-
Notifications
You must be signed in to change notification settings - Fork 0
/
websocket.go
61 lines (49 loc) · 1.53 KB
/
websocket.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
"flag"
"log"
"os"
"os/signal"
"github.com/doctorruss/stockfighter/stockfighter"
)
var close = flag.Bool("close", true, "Shut down the level on exit")
func main() {
// control logging format
log.SetFlags(0)
flag.Parse()
// redirect OS Interrupt signal to interrupt channel
// to allow close down
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
// create level by name
levelname := "chock_a_block"
g := stockfighter.GM{LevelName:levelname}
levelDetails := g.CreateLevel()
if levelDetails.OK == false {
panic(levelDetails.Error)
}
if (*close) {
defer g.StopLevel()
}
// create websocket endpoint with level details
venue := levelDetails.Venues[0]
tradingAccount := levelDetails.Account
stock := levelDetails.Tickers[0]
//executions := "/ob/api/ws/" + tradingAccount + "/venues/" + venue+ "/executions/stocks/" + stock
quotes := "/ob/api/ws/" + tradingAccount + "/venues/" + venue+ "/tickertape/stocks/" + stock
// create websocket connection and defer the close down
connection := stockfighter.NewWebsocket(quotes)
defer connection.CloseWebSocket()
// fire goroutine to receive messages
msgs:=make(chan [] byte)
go connection.ReceiveWebsocketMsg(msgs)
for {
select {
case message := <- msgs:
log.Printf("recv: %s", message)
// wait until Ctrl+C
case <-interrupt:
return;
}
}
}