Skip to content

Commit 73b6216

Browse files
philIipfacebook-github-bot
authored andcommitted
introduce response listener in native network
Summary: Changelog: [Internal] adding a private! api so we can parse text payloads Reviewed By: mdvacca Differential Revision: D83939903
1 parent 52b2c46 commit 73b6216

2 files changed

Lines changed: 44 additions & 1 deletion

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#import "RCTNetworking.h"
9+
10+
@protocol RCTNetworkingTextResponseHandler <NSObject>
11+
12+
- (BOOL)canHandleNetworkingTextResponseForRequest:(NSURLRequest *)request;
13+
- (void)handleNetworkingResponseText:(NSString *)responseText request:(NSURLRequest *)request;
14+
15+
@end
16+
17+
@interface RCTNetworking (Internal)
18+
19+
- (void)addTextResponseHandler:(id<RCTNetworkingTextResponseHandler>)handler;
20+
21+
@end

packages/react-native/Libraries/Network/RCTNetworking.mm

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
#import <React/RCTConvert.h>
1313
#import <React/RCTLog.h>
1414
#import <React/RCTNetworkTask.h>
15-
#import <React/RCTNetworking.h>
1615
#import <React/RCTUtils.h>
1716

1817
#import <React/RCTHTTPRequestHandler.h>
1918
#import <react/featureflags/ReactNativeFeatureFlags.h>
2019

2120
#import "RCTInspectorNetworkReporter.h"
2221
#import "RCTNetworkPlugins.h"
22+
#import "RCTNetworking+Internal.h"
23+
#import "RCTNetworking.h"
2324

2425
typedef RCTURLRequestCancellationBlock (^RCTHTTPQueryResult)(NSError *error, NSDictionary<NSString *, id> *result);
2526

@@ -153,6 +154,7 @@ @implementation RCTNetworking {
153154
NSArray<id<RCTURLRequestHandler>> * (^_handlersProvider)(RCTModuleRegistry *);
154155
NSMutableArray<id<RCTNetworkingRequestHandler>> *_requestHandlers;
155156
NSMutableArray<id<RCTNetworkingResponseHandler>> *_responseHandlers;
157+
NSMutableArray<id<RCTNetworkingTextResponseHandler>> *_textResponseHandlers;
156158
dispatch_queue_t _requestQueue;
157159
}
158160

@@ -672,6 +674,18 @@ - (void)sendRequest:(NSURLRequest *)request
672674
if (!(incrementalUpdates && [responseType isEqualToString:@"text"])) {
673675
[strongSelf sendData:data responseType:responseType response:response forTask:task];
674676
}
677+
678+
if ([responseType isEqualToString:@"text"]) {
679+
for (id<RCTNetworkingTextResponseHandler> handler in strongSelf->_textResponseHandlers) {
680+
if ([handler canHandleNetworkingTextResponseForRequest:task.request]) {
681+
NSString *responseString = [RCTNetworking decodeTextData:data
682+
fromResponse:task.response
683+
withCarryData:[NSMutableData new]];
684+
[handler handleNetworkingResponseText:responseString request:task.request];
685+
}
686+
}
687+
}
688+
675689
NSArray *responseJSON =
676690
@[ task.requestID, RCTNullIfNil(error.localizedDescription), error.code == kCFURLErrorTimedOut ? @YES : @NO ];
677691

@@ -727,6 +741,14 @@ - (void)addResponseHandler:(id<RCTNetworkingResponseHandler>)handler
727741
[_responseHandlers addObject:handler];
728742
}
729743

744+
- (void)addTextResponseHandler:(id<RCTNetworkingTextResponseHandler>)handler
745+
{
746+
if (!_textResponseHandlers) {
747+
_textResponseHandlers = [NSMutableArray new];
748+
}
749+
[_textResponseHandlers addObject:handler];
750+
}
751+
730752
- (void)removeRequestHandler:(id<RCTNetworkingRequestHandler>)handler
731753
{
732754
[_requestHandlers removeObject:handler];

0 commit comments

Comments
 (0)