|
|
|
@ -22,7 +22,8 @@ data QuoteSourceServer = QuoteSourceServerState { |
|
|
|
outSocket :: Socket Pub, |
|
|
|
outSocket :: Socket Pub, |
|
|
|
tickChannel :: BoundedChan QuoteSourceServerData, |
|
|
|
tickChannel :: BoundedChan QuoteSourceServerData, |
|
|
|
completionMvar :: MVar (), |
|
|
|
completionMvar :: MVar (), |
|
|
|
serverThreadId :: ThreadId |
|
|
|
serverThreadId :: ThreadId, |
|
|
|
|
|
|
|
heartbeatThreadId :: ThreadId |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
data QuoteSourceServerData = QSSTick Tick | QSSHeartbeat | QSSKill |
|
|
|
data QuoteSourceServerData = QSSTick Tick | QSSHeartbeat | QSSKill |
|
|
|
@ -53,17 +54,22 @@ startQuoteSourceServer chan c ep = do |
|
|
|
sock <- socket c Pub |
|
|
|
sock <- socket c Pub |
|
|
|
bind sock $ T.unpack ep |
|
|
|
bind sock $ T.unpack ep |
|
|
|
tid <- myThreadId |
|
|
|
tid <- myThreadId |
|
|
|
|
|
|
|
hbTid <- forkIO $ forever $ do |
|
|
|
|
|
|
|
threadDelay 1000000 |
|
|
|
|
|
|
|
writeChan chan QSSHeartbeat |
|
|
|
|
|
|
|
|
|
|
|
mv <- newEmptyMVar |
|
|
|
mv <- newEmptyMVar |
|
|
|
let state = QuoteSourceServerState { |
|
|
|
let state = QuoteSourceServerState { |
|
|
|
ctx = c, |
|
|
|
ctx = c, |
|
|
|
outSocket = sock, |
|
|
|
outSocket = sock, |
|
|
|
tickChannel = chan, |
|
|
|
tickChannel = chan, |
|
|
|
completionMvar = mv, |
|
|
|
completionMvar = mv, |
|
|
|
serverThreadId = tid |
|
|
|
serverThreadId = tid, |
|
|
|
|
|
|
|
heartbeatThreadId = hbTid |
|
|
|
} |
|
|
|
} |
|
|
|
stid <- forkIO $ serverThread state |
|
|
|
stid <- forkIO $ serverThread state |
|
|
|
return $ state { serverThreadId = stid } |
|
|
|
return $ state { serverThreadId = stid } |
|
|
|
|
|
|
|
|
|
|
|
stopQuoteSourceServer :: QuoteSourceServer -> IO () |
|
|
|
stopQuoteSourceServer :: QuoteSourceServer -> IO () |
|
|
|
stopQuoteSourceServer server = writeChan (tickChannel server) QSSKill >> readMVar (completionMvar server) |
|
|
|
stopQuoteSourceServer server = killThread (heartbeatThreadId server) >> writeChan (tickChannel server) QSSKill >> readMVar (completionMvar server) |
|
|
|
|
|
|
|
|
|
|
|
|