Sample code for 30+ languages & platforms
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

Visual FoxPro
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