Browse Source

Broker.Server: handle exceptions

master
Denis Tereshkin 9 years ago
parent
commit
80e0dd52af
  1. 7
      src/ATrade/Broker/Server.hs

7
src/ATrade/Broker/Server.hs

@ -108,7 +108,11 @@ notificationCallback state n = do
tradeSinkHandler :: Context -> IORef BrokerServerState -> T.Text -> IO () 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 handle (\e -> do
warningM "Broker.Server" $ "Trade sink: exception: " ++ (show (e :: SomeException)) ++ "; isZMQ: " ++ show (isZMQError e)
when (isZMQError e) $ do
debugM "Broker.Server" "Rethrowing exception"
throwIO e) $ withSocket c Dealer (\sock -> do
debugM "Broker.Server" "Connecting trade sink socket" 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
@ -129,6 +133,7 @@ tradeSinkHandler c state tradeSinkEp = when (tradeSinkEp /= "") $
warningM "Broker.Server" "Trade sink timeout") warningM "Broker.Server" "Trade sink timeout")
where where
isZMQError e = "ZMQError" `L.isPrefixOf` show e
wasKilled = fmap killMvar (readIORef state) >>= fmap isJust . tryReadMVar wasKilled = fmap killMvar (readIORef state) >>= fmap isJust . tryReadMVar
encodeTrade :: Trade -> B.ByteString encodeTrade :: Trade -> B.ByteString
encodeTrade = BL.toStrict . encode . convertTrade encodeTrade = BL.toStrict . encode . convertTrade

Loading…
Cancel
Save