Sample code for 30+ languages & platforms
Objective-C

Binary.com Tick Stream

See more WebSocket Examples

Tick Stream Request -- Initiate a continuous stream of spot price updates for a given symbol.

Chilkat Objective-C Downloads

Objective-C
#import <CkoWebSocket.h>
#import <CkoRest.h>
#import <NSString.h>
#import <CkoJsonObject.h>

BOOL success = NO;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

CkoWebSocket *ws = [[CkoWebSocket alloc] init];

// For brevity, this example does not check for errors when etablishing the WebSocket connection.
// See Establish WebSocket Connection for more complete sample code for making the connection.

CkoRest *rest = [[CkoRest alloc] init];

// Connect to ws.binaryws.com
success = [rest Connect: @"ws.binaryws.com" port: [NSNumber numberWithInt: 443] tls: YES autoReconnect: NO];
[ws UseConnection: rest];
[ws AddClientHeaders];

// My app_id is 12332.  You'll wnat to use your own...
NSString *responseBody = [rest FullRequestNoBody: @"GET" uriPath: @"/websockets/v3?app_id=12332"];
success = [ws ValidateServerHandshake];
if (success != YES) {
    NSLog(@"%@",ws.LastErrorText);
    NSLog(@"%@",responseBody);
    NSLog(@"%@",rest.ResponseHeader);
    return;
}

// Build and send the following message:

// {
//   "ticks": "R_50",
//   "subscribe": 1
// }

CkoJsonObject *json = [[CkoJsonObject alloc] init];
[json AppendString: @"ticks" value: @"R_50"];
[json AppendInt: @"subscribe" value: [NSNumber numberWithInt: 1]];

// Send a full message in a single frame
BOOL finalFrame = YES;
success = [ws SendFrame: [json Emit] finalFrame: finalFrame];
if (success != YES) {
    NSLog(@"%@",ws.LastErrorText);
    return;
}

CkoJsonObject *jsonTickData = [[CkoJsonObject alloc] init];
jsonTickData.EmitCompact = NO;

// Begin reading the tick stream response.
// We'll just read the 1st 10 updates and then exit..
BOOL receivedFinalFrame = NO;
int numTicksReceived = 0;
while (numTicksReceived < 5) {

    success = [ws ReadFrame];
    if (success != YES) {
        NSLog(@"%@",@"Failed to receive a frame");
        NSLog(@"%@%d",@"ReadFrame fail reason = ",[ws.ReadFrameFailReason intValue]);
        NSLog(@"%@",ws.LastErrorText);
        return;
    }

    // The responses we desire are in Text frames, where the opcode = 1.
    if ([ws.FrameOpcodeInt intValue] == 1) {
        NSString *receivedJson = [ws GetFrameData];

        [jsonTickData Load: receivedJson];
        NSLog(@"%@",[jsonTickData Emit]);

        numTicksReceived = numTicksReceived + 1;
    }

}

// Close the websocket connection.
success = [ws SendClose: YES statusCode: [NSNumber numberWithInt: 1000] reason: @"Closing this websocket."];
if (success != YES) {
    NSLog(@"%@",ws.LastErrorText);
    return;
}

// Read the Close response.
success = [ws ReadFrame];
if (success != YES) {
    NSLog(@"%@%d",@"ReadFrame fail reason = ",[ws.ReadFrameFailReason intValue]);
    NSLog(@"%@",ws.LastErrorText);
    return;
}

NSLog(@"%@",@"Success.");

// The output of the above code is shown here:

// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.8725",
//     "bid": "373.8325",
//     "epoch": "1517437456",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.8525",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.7952",
//     "bid": "373.7552",
//     "epoch": "1517437458",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.7752",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.8638",
//     "bid": "373.8238",
//     "epoch": "1517437460",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.8438",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.7636",
//     "bid": "373.7236",
//     "epoch": "1517437462",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.7436",
//     "symbol": "R_50"
//   }
// }
// 
// {
//   "echo_req": {
//     "subscribe": 1,
//     "ticks": "R_50"
//   },
//   "msg_type": "tick",
//   "tick": {
//     "ask": "373.6870",
//     "bid": "373.6470",
//     "epoch": "1517437464",
//     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
//     "quote": "373.6670",
//     "symbol": "R_50"
//   }
// }
// 
// Success.