Visual FoxPro
Visual FoxPro
WebSocket Binance Trade Stream (subscribe and receive updates)
See more WebSocket Examples
Subscribe to a binance trade stream and receive updates.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loWs
LOCAL loRest
LOCAL lcResponseBody
LOCAL loJson
LOCAL lnFinalFrame
LOCAL loJsonTradeData
LOCAL lnReceivedFinalFrame
LOCAL lnNumTradesReceived
LOCAL lcReceivedJson
lnSuccess = 0
* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
loWs = CreateObject('Chilkat.WebSocket')
* 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('Chilkat.Rest')
* Connect to wss://stream.binance.com:9443
lnSuccess = loRest.Connect("stream.binance.com",9443,1,0)
IF (lnSuccess = 0) THEN
? loRest.LastErrorText
RELEASE loWs
RELEASE loRest
CANCEL
ENDIF
lnSuccess = loWs.UseConnection(loRest)
IF (lnSuccess = 0) THEN
? loWs.LastErrorText
RELEASE loWs
RELEASE loRest
CANCEL
ENDIF
loWs.AddClientHeaders()
* Raw streams are accessed at /ws/<streamName>
lcResponseBody = loRest.FullRequestNoBody("GET","/ws/btcusdt")
IF (loRest.LastMethodSuccess = 0) THEN
? loRest.LastErrorText
RELEASE loWs
RELEASE loRest
CANCEL
ENDIF
lnSuccess = loWs.ValidateServerHandshake()
IF (lnSuccess <> 1) THEN
? loWs.LastErrorText
? lcResponseBody
? loRest.ResponseHeader
RELEASE loWs
RELEASE loRest
CANCEL
ENDIF
? lcResponseBody
? loRest.ResponseHeader
* POST JSON to subscribe to a stream
* {
* "method": "SUBSCRIBE",
* "params":
* [
* "btcusdt@aggTrade",
* "btcusdt@depth"
* ],
* "id": 1
* }
loJson = CreateObject('Chilkat.JsonObject')
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
lnFinalFrame = 1
lnSuccess = loWs.SendFrame(loJson.Emit(),lnFinalFrame)
IF (lnSuccess <> 1) THEN
? loWs.LastErrorText
RELEASE loWs
RELEASE loRest
RELEASE loJson
CANCEL
ENDIF
loJsonTradeData = CreateObject('Chilkat.JsonObject')
loJsonTradeData.EmitCompact = 0
* Begin reading the trade stream response.
* We'll just read the 1st 10 updates and then exit..
lnReceivedFinalFrame = 0
lnNumTradesReceived = 0
DO WHILE lnNumTradesReceived < 5
lnSuccess = loWs.ReadFrame()
IF (lnSuccess <> 1) THEN
? "Failed to receive a frame"
? "ReadFrame fail reason = " + STR(loWs.ReadFrameFailReason)
? loWs.LastErrorText
RELEASE loWs
RELEASE loRest
RELEASE loJson
RELEASE loJsonTradeData
CANCEL
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.
lnSuccess = loWs.SendClose(1,1000,"Closing this websocket.")
IF (lnSuccess <> 1) THEN
? loWs.LastErrorText
RELEASE loWs
RELEASE loRest
RELEASE loJson
RELEASE loJsonTradeData
CANCEL
ENDIF
* Read the Close response.
lnSuccess = loWs.ReadFrame()
IF (lnSuccess <> 1) THEN
? "ReadFrame fail reason = " + STR(loWs.ReadFrameFailReason)
? loWs.LastErrorText
RELEASE loWs
RELEASE loRest
RELEASE loJson
RELEASE loJsonTradeData
CANCEL
ENDIF
? "Success."
* The output of the above code is shown here:
RELEASE loWs
RELEASE loRest
RELEASE loJson
RELEASE loJsonTradeData