Sample code for 30+ languages & platforms
Swift

Read Bitfinex WebSocket Ticker Channel

See more WebSocket Examples

Subscribes to the public Bitfinex websocket ticker channel and receives ticker updates.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

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

    let ws = CkoWebSocket()!

    // 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.

    let rest = CkoRest()!

    // Connect to api.bitfinex.com
    success = rest.connect(hostname: "api.bitfinex.com", port: 443, tls: true, autoReconnect: false)
    ws.useConnection(connection: rest)
    ws.addClientHeaders()

    var responseBody: String? = rest.fullRequestNoBody(httpVerb: "GET", uriPath: "/ws")
    success = ws.validateServerHandshake()
    if success != true {
        print("\(ws.lastErrorText!)")
        print("\(responseBody!)")
        print("\(rest.responseHeader!)")
        return
    }

    // After connecting, the bitfinex websocket server will send
    // an info message that contains the actual version of the websocket stream.
    // Receive that message..
    success = ws.readFrame()
    if success != true {
        print("Failed to receive a frame")
        print("ReadFrame fail reason = \(ws.readFrameFailReason.intValue)")
        print("\(ws.lastErrorText!)")
        return
    }

    // We should get this:
    // {"event":"info","version":1.1,"platform":{"status":1}}
    print("\(ws.getFrameData()!)")

    // Subscribe to the public ticker feed.
    // See https://docs.bitfinex.com/docs for more information.
    let json = CkoJsonObject()!
    json.appendString(name: "event", value: "subscribe")
    json.appendString(name: "channel", value: "ticker")
    json.appendString(name: "pair", value: "BTCUSD")

    var finalFrame: Bool = true
    success = ws.sendFrame(stringToSend: json.emit(), finalFrame: finalFrame)

    // Read the response.
    success = ws.readFrame()
    if success != true {
        print("Failed to receive a frame")
        print("ReadFrame fail reason = \(ws.readFrameFailReason.intValue)")
        print("\(ws.lastErrorText!)")
        return
    }

    // Examine the response
    // We should get this:
    // {"event":"subscribed","channel":"ticker","chanId":2751,"pair":"BTCUSD"}
    print("\(ws.getFrameData()!)")

    // Begin reading the ticker feed.
    // We'll just read the 1st 5 updates and then exit..
    var receivedFinalFrame: Bool = false
    var numUpdatesReceived: Int = 0
    while numUpdatesReceived < 5 {

        success = ws.readFrame()
        if success != true {
            print("Failed to receive a frame")
            print("ReadFrame fail reason = \(ws.readFrameFailReason.intValue)")
            print("\(ws.lastErrorText!)")
            return
        }

        // The responses we desire are in Text frames, where the opcode = 1.
        if ws.frameOpcodeInt.intValue == 1 {
            var receivedText: String? = ws.getFrameData()
            print("\(receivedText!)")
            // Should receive a line of text such as this:
            // [2751,7349,36.34269559,7349.1,41.01777063,-116.2,-0.0156,7349.1,22188.26055319,7560,7270.5]
            numUpdatesReceived = numUpdatesReceived + 1
        }

    }

    // Close the websocket connection.
    success = ws.sendClose(includeStatus: true, statusCode: 1000, reason: "Closing this websocket.")
    if success != true {
        print("\(ws.lastErrorText!)")
        return
    }

    // Read the Close response.
    success = ws.readFrame()
    if success != true {
        print("ReadFrame fail reason = \(ws.readFrameFailReason.intValue)")
        print("\(ws.lastErrorText!)")
        return
    }

    print("Success.")

}