iOS client
To build the iOS client you need a Mac and the Apple developer tools (Xcode) installed. To run it on an actual device (and not the simulator), an Apple developer program membership is required.
For iOS, we use the websocket client implementation SocketRocket. The easiest way to include the library is via Cocoapods. This is what our Podfile looks like:
platform :ios, "7.0"
pod "SocketRocket"
If you haven't got Cocoapods installed, run
gem install cocoapods
and pod setup
. Then run pod install
from the iOS directory with the Podfile, and we're good to go.
The relevant code is in ViewController.m. To connect to the websocket server:
- (void)connectWebSocket {
webSocket.delegate = nil;
webSocket = nil;
NSString *urlString = @"ws://localhost:8080";
SRWebSocket *newWebSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:urlString]];
newWebSocket.delegate = self;
[newWebSocket open];
}
Replace localhost with the relevant hostname if not running the simulator on the same computer that runs the websocket server.
Then we implement the SRWebSocketDelegate protocol:
- (void)webSocketDidOpen:(SRWebSocket *)newWebSocket {
webSocket = newWebSocket;
[webSocket send:[NSString stringWithFormat:@"Hello from %@", [UIDevice currentDevice].name]];
}
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error {
[self connectWebSocket];
}
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean {
[self connectWebSocket];
}
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {
self.messagesTextView.text = [NSString stringWithFormat:@"%@\n%@", self.messagesTextView.text, message];
}
Note that this is very similar to the Websockets browser Javascript API.
Here is how to send a new message:
- (IBAction)sendMessage:(id)sender {
[webSocket send:self.messageTextField.text];
self.messageTextField.text = nil;
}
The remaining code in the iOS project is mainly for dealing with resizing views when showing or hiding the keyboard. The app targets iOS 7.0 and is not optimized for iPad.
No comments:
Post a Comment
Please comment here...