Lianja
Lianja
WebSocket Binance Trade Stream (subscribe and receive updates)
See more WebSocket Examples
Subscribe to a binance trade stream and receive updates.Chilkat Lianja Downloads
llSuccess = .F.
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loWs = createobject("CkWebSocket")
// 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.
loRest = createobject("CkRest")
// Connect to wss://stream.binance.com:9443
llSuccess = loRest.Connect("stream.binance.com",9443,.T.,.F.)
if (llSuccess = .F.) then
? loRest.LastErrorText
release loWs
release loRest
return
endif
llSuccess = loWs.UseConnection(loRest)
if (llSuccess = .F.) then
? loWs.LastErrorText
release loWs
release loRest
return
endif
loWs.AddClientHeaders()
// Raw streams are accessed at /ws/<streamName>
lcResponseBody = loRest.FullRequestNoBody("GET","/ws/btcusdt")
if (loRest.LastMethodSuccess = .F.) then
? loRest.LastErrorText
release loWs
release loRest
return
endif
llSuccess = loWs.ValidateServerHandshake()
if (llSuccess <> .T.) then
? loWs.LastErrorText
? lcResponseBody
? loRest.ResponseHeader
release loWs
release loRest
return
endif
? lcResponseBody
? loRest.ResponseHeader
// POST JSON to subscribe to a stream
// {
// "method": "SUBSCRIBE",
// "params":
// [
// "btcusdt@aggTrade",
// "btcusdt@depth"
// ],
// "id": 1
// }
loJson = createobject("CkJsonObject")
loJson.UpdateString("method","SUBSCRIBE")
loJson.UpdateString("params[0]","btcusdt@aggTrade")
loJson.UpdateString("params[1]","btcusdt@depth")
loJson.UpdateInt("id",1)
// Send a full message in a single frame
llFinalFrame = .T.
llSuccess = loWs.SendFrame(loJson.Emit(),llFinalFrame)
if (llSuccess <> .T.) then
? loWs.LastErrorText
release loWs
release loRest
release loJson
return
endif
loJsonTradeData = createobject("CkJsonObject")
loJsonTradeData.EmitCompact = .F.
// Begin reading the trade stream response.
// We'll just read the 1st 10 updates and then exit..
llReceivedFinalFrame = .F.
lnNumTradesReceived = 0
do while lnNumTradesReceived < 5
llSuccess = loWs.ReadFrame()
if (llSuccess <> .T.) then
? "Failed to receive a frame"
? "ReadFrame fail reason = " + str(loWs.ReadFrameFailReason)
? loWs.LastErrorText
release loWs
release loRest
release loJson
release loJsonTradeData
return
endif
// The responses we desire are in Text frames, where the opcode = 1.
if (loWs.FrameOpcodeInt = 1) then
lcReceivedJson = loWs.GetFrameData()
loJsonTradeData.Load(lcReceivedJson)
? loJsonTradeData.Emit()
lnNumTradesReceived = lnNumTradesReceived + 1
endif
enddo
// Close the websocket connection.
llSuccess = loWs.SendClose(.T.,1000,"Closing this websocket.")
if (llSuccess <> .T.) then
? loWs.LastErrorText
release loWs
release loRest
release loJson
release loJsonTradeData
return
endif
// Read the Close response.
llSuccess = loWs.ReadFrame()
if (llSuccess <> .T.) then
? "ReadFrame fail reason = " + str(loWs.ReadFrameFailReason)
? loWs.LastErrorText
release loWs
release loRest
release loJson
release loJsonTradeData
return
endif
? "Success."
// The output of the above code is shown here:
release loWs
release loRest
release loJson
release loJsonTradeData