SignalR-ObjC is a client library for iOS and Mac OS X. It's built on top of two popular open source libraries AFNetworking and SocketRocket. SignalR-ObjC is intended to be used along side ASP.NET SignalR, a new library for ASP.NET developers that makes it incredibly simple to add real-time functionality to your applications. What is "real-time web" functionality? It's the ability to have your server-side code push content to the connected clients as it happens, in real-time.
CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like SignalR-ObjC in your projects. See the "Getting Started" guide for more information. You can install it with the following command:
$ gem install cocoapods To integrate SignalR-ObjC into your Xcode project using CocoaPods, specify it in your Podfile:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' pod 'SignalR-ObjC', '~> 2.0' Then, run the following command:
$ pod install | Hubs | |
|---|---|
| SRHubConnection | |
| Core | |
| SRConnection | |
| Transports | |
| SRAutoTransport | SRAutoTransport chooses the best supported transport for both client and server. This achieved by falling back to less performant transports. The default transport fallback is: 1. SRWebSocketTransport (if supported by the server) 2. SRServerSentEventsTransport 3. SRLongPollingTransport |
| SRWebSocketTransport | WebSockets is the only transport that establishes a true persistent, two-way connection between the client and server. |
| SRServerSentEventsTransport | With Server Sent Events, also known as EventSource, it's possible for a server to send new data to a client at any time, by pushing messages to the client. Server Sent Events requires few new connections then Long Polling and therefore will have less latency. |
| SRLongPollingTransport | Long polling does not create a persistent connection, but instead polls the server with a request that stays open until the server responds, at which point the connection closes, and a new connection is requested immediately. This may introduce some latency while the connection resets. |
using System.Threading.Tasks; using Microsoft.AspNet.SignalR; //Server public class MyConnection : PersistentConnection { protected override Task OnReceived(IRequest request, string connectionId, string data) { // Broadcast data to all clients return Connection.Broadcast(data); } }#import "SignalR.h" //Client SRConnection *connection = [SRConnection connectionWithURLString:@"http://localhost/mysite/echo"]; // Register for connection lifecycle events [connection setStarted:^{ NSLog(@"Connection Started"); [connection send:@"hello world"]; }]; [connection setReceived:^(NSString *message) { NSLog(@"Connection Recieved Data: %@",message); }]; [connection setConnectionSlow:^{ NSLog(@"Connection Slow"); }]; [connection setReconnecting:^{ NSLog(@"Connection Reconnecting"); }]; [connection setReconnected:^{ NSLog(@"Connection Reconnected"); }]; [connection setClosed:^{ NSLog(@"Connection Closed"); }]; [connection setError:^(NSError *error) { NSLog(@"Connection Error %@",error); }]; [connection start];//Server public class Chat : Hub { public void Send(string message) { // Call the addMessage method on all clients Clients.All.addMessage(message); } }//Client #import "SignalR.h" // Connect to the service SRHubConnection *hubConnection = [SRHubConnection connectionWithURLString:@"http://localhost/mysite"]; // Create a proxy to the chat service SRHubProxy *chat = [hubConnection createHubProxy:@"chat"]; [chat on:@"addMessage" perform:self selector:@selector(addMessage:)]; // Register for connection lifecycle events [hubConnection setStarted:^{ NSLog(@"Connection Started"); [connection send:@"hello world"]; }]; [hubConnection setReceived:^(NSString *message) { NSLog(@"Connection Recieved Data: %@",message); }]; [hubConnection setConnectionSlow:^{ NSLog(@"Connection Slow"); }]; [hubConnection setReconnecting:^{ NSLog(@"Connection Reconnecting"); }]; [hubConnection setReconnected:^{ NSLog(@"Connection Reconnected"); }]; [hubConnection setClosed:^{ NSLog(@"Connection Closed"); }]; [hubConnection setError:^(NSError *error) { NSLog(@"Connection Error %@",error); }]; // Start the connection [hubConnection start]; - (void)addMessage:(NSString *)message { // Print the message when it comes in NSLog(message); }id qs = @{ @"param1": @1, @"param2": @"another" }; SRConnection *connection = [SRConnection connectionWithURLString:@"http://localhost/mysite" queryString:qs];id qs = @{ @"param1": @1, @"param2": @"another" }; SRHubConnection *hubConnection = [SRHubConnection connectionWithURLString:@"http://localhost/mysite" queryString:qs];id headers = @{ @"param1": @1, @"param2": @"another" }; SRConnection *connection = [SRConnection connectionWithURLString:@"http://localhost/mysite"]; [connection setHeaders:headers]; //Alternative Usage SRConnection *connection = [SRConnection connectionWithURLString:@"http://localhost/mysite"]; [connection addValue:@"1" forHTTPHeaderField:@"param1"]; [connection addValue:@"another" forHTTPHeaderField:@"param2"];id headers = @{ @"param1": @1, @"param2": @"another" }; SRHubConnection *hubConnection = [SRHubConnection connectionWithURLString:@"http://localhost/mysite"]; [hubConnection setHeaders:headers]; //Alternative Usage SRHubConnection *hubConnection = [SRHubConnection connectionWithURLString:@"http://localhost/mysite"]; [hubConnection addValue:@"1" forHTTPHeaderField:@"param1"]; [hubConnection addValue:@"another" forHTTPHeaderField:@"param2"];SignalR-ObjC requires either iOS 7.0 and above, or Mac OS 10.9 (64-bit with modern Cocoa runtime) and above.
- SignalR-ObjC requires ARC
- SignalR-ObjC uses AFNetworking. The minimum supported version of AFNetworking is 2.x
- SignalR-ObjC uses SocketRocket. The minimum supported version of SocketRocket is 0.4.x
SignalR-ObjC is available under the MIT license. See the LICENSE file for more info.
SignalR-ObjC uses 3rd-party code which each have specific licenses, see ACKNOWLEDGEMENTS for contributions
