Browse Source

Broker.Server: debug trade sink

master
Denis Tereshkin 9 years ago
parent
commit
50396e0ba2
  1. 9
      src/ATrade/Broker/Server.hs
  2. 8
      src/ATrade/Types.hs

9
src/ATrade/Broker/Server.hs

@ -109,11 +109,12 @@ tradeSinkHandler :: Context -> IORef BrokerServerState -> T.Text -> IO ()
tradeSinkHandler c state tradeSinkEp = when (tradeSinkEp /= "") $ tradeSinkHandler c state tradeSinkEp = when (tradeSinkEp /= "") $
whileM_ (not <$> wasKilled) $ whileM_ (not <$> wasKilled) $
withSocket c Dealer (\sock -> do withSocket c Dealer (\sock -> do
debugM "Broker.Server" "Connecting trade sink socket"
chan <- tradeSink <$> readIORef state chan <- tradeSink <$> readIORef state
connect sock $ T.unpack tradeSinkEp connect sock $ T.unpack tradeSinkEp
timeoutMv <- newEmptyMVar timeoutMv <- newIORef False
threadDelay 1000000 threadDelay 1000000
whileM_ (andM [not <$> wasKilled, isNothing <$> tryReadMVar timeoutMv]) $ do whileM_ (andM [not <$> wasKilled, readIORef timeoutMv]) $ do
maybeTrade <- tryReadChan chan maybeTrade <- tryReadChan chan
case maybeTrade of case maybeTrade of
Just trade -> sendMulti sock $ B.empty :| [encodeTrade trade] Just trade -> sendMulti sock $ B.empty :| [encodeTrade trade]
@ -123,7 +124,9 @@ tradeSinkHandler c state tradeSinkEp = when (tradeSinkEp /= "") $
events <- poll 5000 [Sock sock [In] Nothing] events <- poll 5000 [Sock sock [In] Nothing]
if not . L.null . L.head $ events if not . L.null . L.head $ events
then void . receive $ sock -- anything will do then void . receive $ sock -- anything will do
else putMVar timeoutMv ()) else do
writeIORef timeoutMv True
warningM "Broker.Server" "Trade sink timeout")
where where
wasKilled = fmap killMvar (readIORef state) >>= fmap isJust . tryReadMVar wasKilled = fmap killMvar (readIORef state) >>= fmap isJust . tryReadMVar

8
src/ATrade/Types.hs

@ -376,3 +376,11 @@ defaultClientSecurityParams = ClientSecurityParams {
cspServerCertificate = Nothing cspServerCertificate = Nothing
} }
data TickerInfo = TickerInfo {
tiTicker :: TickerId,
tiClass :: T.Text,
tiBase :: Maybe TickerId,
tiLotSize :: Integer,
tiTickSize :: Decimal
} deriving (Show, Eq)

Loading…
Cancel
Save