|
|
|
@ -12,7 +12,7 @@ module ATrade.Driver.Junction.BrokerService |
|
|
|
|
|
|
|
|
|
|
|
import qualified ATrade.Broker.Client as Bro |
|
|
|
import qualified ATrade.Broker.Client as Bro |
|
|
|
import ATrade.Broker.Protocol (Notification (..)) |
|
|
|
import ATrade.Broker.Protocol (Notification (..)) |
|
|
|
import ATrade.Logging (Message, logDebug) |
|
|
|
import ATrade.Logging (Message, logDebug, logWarning) |
|
|
|
import ATrade.Types (Order (..), OrderId) |
|
|
|
import ATrade.Types (Order (..), OrderId) |
|
|
|
import Colog (WithLog) |
|
|
|
import Colog (WithLog) |
|
|
|
import Control.Monad.IO.Class (MonadIO (liftIO)) |
|
|
|
import Control.Monad.IO.Class (MonadIO (liftIO)) |
|
|
|
@ -38,19 +38,27 @@ submitOrder service identity order = do |
|
|
|
oid <- nextOrderId service |
|
|
|
oid <- nextOrderId service |
|
|
|
logDebug "BrokerService" $ "New order, id: " <> (T.pack . show) oid |
|
|
|
logDebug "BrokerService" $ "New order, id: " <> (T.pack . show) oid |
|
|
|
liftIO $ atomicModifyIORef' (orderMap service) (\s -> (M.insert oid identity s, ())) |
|
|
|
liftIO $ atomicModifyIORef' (orderMap service) (\s -> (M.insert oid identity s, ())) |
|
|
|
_ <- liftIO $ Bro.submitOrder (broker service) order { orderId = oid } |
|
|
|
r <- liftIO $ Bro.submitOrder (broker service) order { orderId = oid } |
|
|
|
|
|
|
|
case r of |
|
|
|
|
|
|
|
Left err -> logWarning "BrokerServer" $ "Submit order error: " <> err |
|
|
|
|
|
|
|
_ -> return () |
|
|
|
return oid |
|
|
|
return oid |
|
|
|
where |
|
|
|
where |
|
|
|
nextOrderId srv = liftIO $ atomicModifyIORef' (orderIdCounter srv) (\s -> (s + 1, s)) |
|
|
|
nextOrderId srv = liftIO $ atomicModifyIORef' (orderIdCounter srv) (\s -> (s + 1, s)) |
|
|
|
|
|
|
|
|
|
|
|
cancelOrder :: BrokerService -> OrderId -> IO () |
|
|
|
cancelOrder :: (MonadIO m, WithLog env Message m) => BrokerService -> OrderId -> m () |
|
|
|
cancelOrder service oid = do |
|
|
|
cancelOrder service oid = do |
|
|
|
_ <- Bro.cancelOrder (broker service) oid |
|
|
|
r <- liftIO $ Bro.cancelOrder (broker service) oid |
|
|
|
|
|
|
|
case r of |
|
|
|
|
|
|
|
Left err -> logWarning "BrokerServer" $ "Submit order error: " <> err |
|
|
|
|
|
|
|
_ -> return () |
|
|
|
return () |
|
|
|
return () |
|
|
|
|
|
|
|
|
|
|
|
getNotifications :: BrokerService -> IO [Notification] |
|
|
|
getNotifications :: (MonadIO m, WithLog env Message m) => BrokerService -> m [Notification] |
|
|
|
getNotifications service = do |
|
|
|
getNotifications service = do |
|
|
|
v <- Bro.getNotifications (broker service) |
|
|
|
v <- liftIO $ Bro.getNotifications (broker service) |
|
|
|
case v of |
|
|
|
case v of |
|
|
|
Left _ -> return [] |
|
|
|
Left err -> do |
|
|
|
|
|
|
|
logWarning "BrokerServer" $ "Submit order error: " <> err |
|
|
|
|
|
|
|
return [] |
|
|
|
Right n -> return n |
|
|
|
Right n -> return n |
|
|
|
|