Swift
Swift
WebSocket Binance Trade Stream (subscribe and receive updates)
See more WebSocket Examples
Subscribe to a binance trade stream and receive 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 wss://stream.binance.com:9443
success = rest.connect(hostname: "stream.binance.com", port: 9443, tls: true, autoReconnect: false)
if success == false {
print("\(rest.lastErrorText!)")
return
}
success = ws.useConnection(connection: rest)
if success == false {
print("\(ws.lastErrorText!)")
return
}
ws.addClientHeaders()
// Raw streams are accessed at /ws/<streamName>
var responseBody: String? = rest.fullRequestNoBody(httpVerb: "GET", uriPath: "/ws/btcusdt")
if rest.lastMethodSuccess == false {
print("\(rest.lastErrorText!)")
return
}
success = ws.validateServerHandshake()
if success != true {
print("\(ws.lastErrorText!)")
print("\(responseBody!)")
print("\(rest.responseHeader!)")
return
}
print("\(responseBody!)")
print("\(rest.responseHeader!)")
// POST JSON to subscribe to a stream
// {
// "method": "SUBSCRIBE",
// "params":
// [
// "btcusdt@aggTrade",
// "btcusdt@depth"
// ],
// "id": 1
// }
let json = CkoJsonObject()!
json.updateString(jsonPath: "method", value: "SUBSCRIBE")
json.updateString(jsonPath: "params[0]", value: "btcusdt@aggTrade")
json.updateString(jsonPath: "params[1]", value: "btcusdt@depth")
json.updateInt(jsonPath: "id", value: 1)
// Send a full message in a single frame
var finalFrame: Bool = true
success = ws.sendFrame(stringToSend: json.emit(), finalFrame: finalFrame)
if success != true {
print("\(ws.lastErrorText!)")
return
}
let jsonTradeData = CkoJsonObject()!
jsonTradeData.emitCompact = false
// Begin reading the trade stream response.
// We'll just read the 1st 10 updates and then exit..
var receivedFinalFrame: Bool = false
var numTradesReceived: Int = 0
while numTradesReceived < 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 receivedJson: String? = ws.getFrameData()
jsonTradeData.load(json: receivedJson)
print("\(jsonTradeData.emit()!)")
numTradesReceived = numTradesReceived + 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.")
// The output of the above code is shown here:
}