2
This commit is contained in:
@@ -181,12 +181,15 @@ didReceiveResponse:(NSURLResponse *)response
|
||||
}
|
||||
|
||||
- (void)URLSession:(NSURLSession *)session
|
||||
task:(NSURLSessionTask *)task
|
||||
task:(NSURLSessionTask *)task
|
||||
didCompleteWithError:(nullable NSError *)error;
|
||||
{
|
||||
if (_closedByUser) {
|
||||
_buffer = [NSMutableData data];
|
||||
return;
|
||||
}
|
||||
|
||||
[self _dispatchPlainBufferIfNeeded];
|
||||
|
||||
WJXEvent *event = [[WJXEvent alloc] initWithReadyState:WJXEventStateClosed];
|
||||
if (nil == (event.error = error)) {
|
||||
@@ -239,13 +242,16 @@ didCompleteWithError:(nullable NSError *)error;
|
||||
WJXEvent *event = [[WJXEvent alloc] initWithReadyState:WJXEventStateOpen];
|
||||
|
||||
NSString *eventString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
if (eventString.length == 0) { return; }
|
||||
NSArray *lines = [eventString componentsSeparatedByCharactersInSet:NSCharacterSet.newlineCharacterSet];
|
||||
BOOL hasDataLine = NO;
|
||||
for (NSString *line in lines) {
|
||||
if ([line hasPrefix:@"id:"]) {
|
||||
event.eventId = [[line substringFromIndex:3] stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet];
|
||||
} else if ([line hasPrefix:@"event:"]) {
|
||||
event.event = [[line substringFromIndex:6] stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet];
|
||||
} else if ([line hasPrefix:@"data:"]) {
|
||||
hasDataLine = YES;
|
||||
NSString *data = [[line substringFromIndex:5] stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet];
|
||||
event.data = event.data ? [event.data stringByAppendingFormat:@"\n%@", data] : data;
|
||||
} else if ([line hasPrefix:@"retry:"]) {
|
||||
@@ -253,6 +259,13 @@ didCompleteWithError:(nullable NSError *)error;
|
||||
self.retryInterval = [retryString doubleValue] / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasDataLine) {
|
||||
NSString *trimmed = [eventString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
||||
if (trimmed.length > 0) {
|
||||
event.data = trimmed;
|
||||
}
|
||||
}
|
||||
|
||||
if (event.eventId) {
|
||||
self.lastEventId = event.eventId;
|
||||
@@ -272,6 +285,15 @@ didCompleteWithError:(nullable NSError *)error;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)_dispatchPlainBufferIfNeeded
|
||||
{
|
||||
if (_buffer.length == 0) { return; }
|
||||
NSData *data = [_buffer copy];
|
||||
[_buffer setLength:0];
|
||||
if (data.length == 0) { return; }
|
||||
[self _parseEventData:data];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Setters
|
||||
|
||||
Reference in New Issue
Block a user