Server-sent event event source API client in ObjC for iOS and Mac using NSURLSession

TRVSEventSource provides an api for opening an http connection for receiving push notifications from a server in the form of server-sent events. Mozilla Developer Network has a good page on server-sent events and event source usage too.

usage

TRVSEventSource *eventSource = [[TRVSEventSource alloc] initWithURL:[NSURL URLWithString:@"http://127.0.0.1:8000"]];

[eventSource addListenerForEvent:@"message" usingEventHandler:^(TRVSServerSentEvent *event, NSError *error) {
    NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:event.data options:0 error:NULL];
    Message *message = [Message messageWithJSON:JSON];
    NSArray *messages = [self.messages arrayByAddingObject:message];
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:messages.count inSection:0];

    dispatch_async(dispatch_get_main_queue(), ^{
        self.messages = messages;
        [self.collectionView insertItemsAtIndexPaths:@[indexPath]];
    });
}];

I wrote a test server that you can run during development too.

node ./TRVSEventSourceExample/server.js

❯ curl 127.0.0.1:8000
event: message
data: {"id": 1, "body":"1381466575460", "author_id": 1, "conversation_id": 1}

event: message
data: {"id": 2, "body":"1381466577463", "author_id": 1, "conversation_id": 1}