Tcl
Tcl
Binary.com Tick Stream
See more WebSocket Examples
Tick Stream Request -- Initiate a continuous stream of spot price updates for a given symbol.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set ws [new_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.
set rest [new_CkRest]
# Connect to ws.binaryws.com
set success [CkRest_Connect $rest "ws.binaryws.com" 443 1 0]
CkWebSocket_UseConnection $ws $rest
CkWebSocket_AddClientHeaders $ws
# My app_id is 12332. You'll wnat to use your own...
set responseBody [CkRest_fullRequestNoBody $rest "GET" "/websockets/v3?app_id=12332"]
set success [CkWebSocket_ValidateServerHandshake $ws]
if {$success != 1} then {
puts [CkWebSocket_lastErrorText $ws]
puts "$responseBody"
puts [CkRest_responseHeader $rest]
delete_CkWebSocket $ws
delete_CkRest $rest
exit
}
# Build and send the following message:
# {
# "ticks": "R_50",
# "subscribe": 1
# }
set json [new_CkJsonObject]
CkJsonObject_AppendString $json "ticks" "R_50"
CkJsonObject_AppendInt $json "subscribe" 1
# Send a full message in a single frame
set finalFrame 1
set success [CkWebSocket_SendFrame $ws [CkJsonObject_emit $json] $finalFrame]
if {$success != 1} then {
puts [CkWebSocket_lastErrorText $ws]
delete_CkWebSocket $ws
delete_CkRest $rest
delete_CkJsonObject $json
exit
}
set jsonTickData [new_CkJsonObject]
CkJsonObject_put_EmitCompact $jsonTickData 0
# Begin reading the tick stream response.
# We'll just read the 1st 10 updates and then exit..
set receivedFinalFrame 0
set numTicksReceived 0
while {$numTicksReceived < 5} {
set success [CkWebSocket_ReadFrame $ws]
if {$success != 1} then {
puts "Failed to receive a frame"
puts "ReadFrame fail reason = [CkWebSocket_get_ReadFrameFailReason $ws]"
puts [CkWebSocket_lastErrorText $ws]
delete_CkWebSocket $ws
delete_CkRest $rest
delete_CkJsonObject $json
delete_CkJsonObject $jsonTickData
exit
}
# The responses we desire are in Text frames, where the opcode = 1.
if {[CkWebSocket_get_FrameOpcodeInt $ws] == 1} then {
set receivedJson [CkWebSocket_getFrameData $ws]
CkJsonObject_Load $jsonTickData $receivedJson
puts [CkJsonObject_emit $jsonTickData]
set numTicksReceived [expr $numTicksReceived + 1]
}
}
# Close the websocket connection.
set success [CkWebSocket_SendClose $ws 1 1000 "Closing this websocket."]
if {$success != 1} then {
puts [CkWebSocket_lastErrorText $ws]
delete_CkWebSocket $ws
delete_CkRest $rest
delete_CkJsonObject $json
delete_CkJsonObject $jsonTickData
exit
}
# Read the Close response.
set success [CkWebSocket_ReadFrame $ws]
if {$success != 1} then {
puts "ReadFrame fail reason = [CkWebSocket_get_ReadFrameFailReason $ws]"
puts [CkWebSocket_lastErrorText $ws]
delete_CkWebSocket $ws
delete_CkRest $rest
delete_CkJsonObject $json
delete_CkJsonObject $jsonTickData
exit
}
puts "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.
delete_CkWebSocket $ws
delete_CkRest $rest
delete_CkJsonObject $json
delete_CkJsonObject $jsonTickData