Remove class check and make data constraint to NSData (#22633)
Summary: We always use `NSData` to send, for the `NSString` support, we already transform to `NSData` before call `_sendFrameWithOpcode` method. So we can remove these class check. Changelog: ---------- [iOS] [Changed] [RCTSRWebSocket] - Remove class check and make data parameter of `_sendFrameWithOpcode` constraint to `NSData` Pull Request resolved: https://github.com/facebook/react-native/pull/22633 Differential Revision: D14320451 Pulled By: cpojer fbshipit-source-id: 63ac194d08965d7518a8ac38eea77fd5b43b6147
This commit is contained in:
Родитель
1889b797d3
Коммит
8491cc36dd
|
@ -645,6 +645,9 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
- (void)send:(id)data;
|
- (void)send:(id)data;
|
||||||
{
|
{
|
||||||
RCTAssert(self.readyState != RCTSR_CONNECTING, @"Invalid State: Cannot call send: until connection is open");
|
RCTAssert(self.readyState != RCTSR_CONNECTING, @"Invalid State: Cannot call send: until connection is open");
|
||||||
|
if (nil == data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// TODO: maybe not copy this for performance
|
// TODO: maybe not copy this for performance
|
||||||
data = [data copy];
|
data = [data copy];
|
||||||
dispatch_async(_workQueue, ^{
|
dispatch_async(_workQueue, ^{
|
||||||
|
@ -652,8 +655,6 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
[self _sendFrameWithOpcode:RCTSROpCodeTextFrame data:[(NSString *)data dataUsingEncoding:NSUTF8StringEncoding]];
|
[self _sendFrameWithOpcode:RCTSROpCodeTextFrame data:[(NSString *)data dataUsingEncoding:NSUTF8StringEncoding]];
|
||||||
} else if ([data isKindOfClass:[NSData class]]) {
|
} else if ([data isKindOfClass:[NSData class]]) {
|
||||||
[self _sendFrameWithOpcode:RCTSROpCodeBinaryFrame data:data];
|
[self _sendFrameWithOpcode:RCTSROpCodeBinaryFrame data:data];
|
||||||
} else if (data == nil) {
|
|
||||||
[self _sendFrameWithOpcode:RCTSROpCodeTextFrame data:data];
|
|
||||||
} else {
|
} else {
|
||||||
assert(NO);
|
assert(NO);
|
||||||
}
|
}
|
||||||
|
@ -1223,7 +1224,7 @@ static const char CRLFCRLFBytes[] = {'\r', '\n', '\r', '\n'};
|
||||||
|
|
||||||
static const size_t RCTSRFrameHeaderOverhead = 32;
|
static const size_t RCTSRFrameHeaderOverhead = 32;
|
||||||
|
|
||||||
- (void)_sendFrameWithOpcode:(RCTSROpCode)opcode data:(id)data;
|
- (void)_sendFrameWithOpcode:(RCTSROpCode)opcode data:(NSData *)data;
|
||||||
{
|
{
|
||||||
[self assertOnWorkQueue];
|
[self assertOnWorkQueue];
|
||||||
|
|
||||||
|
@ -1231,9 +1232,7 @@ static const size_t RCTSRFrameHeaderOverhead = 32;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RCTAssert([data isKindOfClass:[NSData class]] || [data isKindOfClass:[NSString class]], @"NSString or NSData");
|
size_t payloadLength = [data length];
|
||||||
|
|
||||||
size_t payloadLength = [data isKindOfClass:[NSString class]] ? [(NSString *)data lengthOfBytesUsingEncoding:NSUTF8StringEncoding] : [data length];
|
|
||||||
|
|
||||||
NSMutableData *frame = [[NSMutableData alloc] initWithLength:payloadLength + RCTSRFrameHeaderOverhead];
|
NSMutableData *frame = [[NSMutableData alloc] initWithLength:payloadLength + RCTSRFrameHeaderOverhead];
|
||||||
if (!frame) {
|
if (!frame) {
|
||||||
|
@ -1257,14 +1256,7 @@ static const size_t RCTSRFrameHeaderOverhead = 32;
|
||||||
|
|
||||||
size_t frame_buffer_size = 2;
|
size_t frame_buffer_size = 2;
|
||||||
|
|
||||||
const uint8_t *unmasked_payload = NULL;
|
const uint8_t *unmasked_payload = (uint8_t *)[data bytes];
|
||||||
if ([data isKindOfClass:[NSData class]]) {
|
|
||||||
unmasked_payload = (uint8_t *)[data bytes];
|
|
||||||
} else if ([data isKindOfClass:[NSString class]]) {
|
|
||||||
unmasked_payload = (const uint8_t *)[data UTF8String];
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (payloadLength < 126) {
|
if (payloadLength < 126) {
|
||||||
frame_buffer[1] |= payloadLength;
|
frame_buffer[1] |= payloadLength;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче