Swift
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
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.")
}