Visual FoxPro
Visual FoxPro
Binary.com Tick Stream
See more WebSocket Examples
Tick Stream Request -- Initiate a continuous stream of spot price updates for a given symbol.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loWs
LOCAL loRest
LOCAL lcResponseBody
LOCAL loJson
LOCAL lnFinalFrame
LOCAL loJsonTickData
LOCAL lnReceivedFinalFrame
LOCAL lnNumTicksReceived
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 ws.binaryws.com
lnSuccess = loRest.Connect("ws.binaryws.com",443,1,0)
loWs.UseConnection(loRest)
loWs.AddClientHeaders()
* My app_id is 12332. You'll wnat to use your own...
lcResponseBody = loRest.FullRequestNoBody("GET","/websockets/v3?app_id=12332")
lnSuccess = loWs.ValidateServerHandshake()
IF (lnSuccess <> 1) THEN
? loWs.LastErrorText
? lcResponseBody
? loRest.ResponseHeader
RELEASE loWs
RELEASE loRest
CANCEL
ENDIF
* Build and send the following message:
* {
* "ticks": "R_50",
* "subscribe": 1
* }
loJson = CreateObject('Chilkat.JsonObject')
loJson.AppendString("ticks","R_50")
loJson.AppendInt("subscribe",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
loJsonTickData = CreateObject('Chilkat.JsonObject')
loJsonTickData.EmitCompact = 0
* Begin reading the tick stream response.
* We'll just read the 1st 10 updates and then exit..
lnReceivedFinalFrame = 0
lnNumTicksReceived = 0
DO WHILE lnNumTicksReceived < 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 loJsonTickData
CANCEL
ENDIF
* The responses we desire are in Text frames, where the opcode = 1.
IF (loWs.FrameOpcodeInt = 1) THEN
lcReceivedJson = loWs.GetFrameData()
loJsonTickData.Load(lcReceivedJson)
? loJsonTickData.Emit()
lnNumTicksReceived = lnNumTicksReceived + 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 loJsonTickData
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 loJsonTickData
CANCEL
ENDIF
? "Success."
* The output of the above code is shown here:
* {
* "echo_req": {
* "subscribe": 1,
* "ticks": "R_50"
* },
* "msg_type": "tick",
* "tick": {
* "ask": "373.8725",
* "bid": "373.8325",
* "epoch": "1517437456",
* "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
* "quote": "373.8525",
* "symbol": "R_50"
* }
* }
*
* {
* "echo_req": {
* "subscribe": 1,
* "ticks": "R_50"
* },
* "msg_type": "tick",
* "tick": {
* "ask": "373.7952",
* "bid": "373.7552",
* "epoch": "1517437458",
* "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
* "quote": "373.7752",
* "symbol": "R_50"
* }
* }
*
* {
* "echo_req": {
* "subscribe": 1,
* "ticks": "R_50"
* },
* "msg_type": "tick",
* "tick": {
* "ask": "373.8638",
* "bid": "373.8238",
* "epoch": "1517437460",
* "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
* "quote": "373.8438",
* "symbol": "R_50"
* }
* }
*
* {
* "echo_req": {
* "subscribe": 1,
* "ticks": "R_50"
* },
* "msg_type": "tick",
* "tick": {
* "ask": "373.7636",
* "bid": "373.7236",
* "epoch": "1517437462",
* "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
* "quote": "373.7436",
* "symbol": "R_50"
* }
* }
*
* {
* "echo_req": {
* "subscribe": 1,
* "ticks": "R_50"
* },
* "msg_type": "tick",
* "tick": {
* "ask": "373.6870",
* "bid": "373.6470",
* "epoch": "1517437464",
* "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
* "quote": "373.6670",
* "symbol": "R_50"
* }
* }
*
* Success.
RELEASE loWs
RELEASE loRest
RELEASE loJson
RELEASE loJsonTickData