From 3ae040d89bc2993bbe79dda0db17d7701e64a85d Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Sat, 4 Dec 2021 12:50:00 +0700 Subject: [PATCH] BrokerServer: formatting --- src/ATrade/Broker/Server.hs | 72 +++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 19 deletions(-) diff --git a/src/ATrade/Broker/Server.hs b/src/ATrade/Broker/Server.hs index 0735cdf..6b9d6a4 100644 --- a/src/ATrade/Broker/Server.hs +++ b/src/ATrade/Broker/Server.hs @@ -7,32 +7,60 @@ module ATrade.Broker.Server ( TradeSink ) where -import ATrade.Broker.Backend -import ATrade.Broker.Protocol -import ATrade.Types -import ATrade.Util -import Control.Concurrent hiding (readChan, writeChan) -import Control.Concurrent.BoundedChan -import Control.Exception -import Control.Monad -import Control.Monad.Loops -import Data.Aeson +import ATrade.Broker.Backend (BrokerBackend (..), + BrokerBackendNotification (..), + backendNotificationOrderId) +import ATrade.Broker.Protocol (BrokerServerRequest (..), + BrokerServerResponse (..), + ClientIdentity, + Notification (..), + NotificationSqnum (NotificationSqnum), + RequestSqnum, + getNotificationSqnum, + nextSqnum, requestSqnum) +import ATrade.Types (Order (orderAccountId, orderId), + OrderId, + ServerSecurityParams (sspCertificate, sspDomain), + Trade (tradeOrderId)) +import ATrade.Util (atomicMapIORef) +import Control.Concurrent (MVar, ThreadId, forkIO, + killThread, myThreadId, + newEmptyMVar, putMVar, + readMVar, threadDelay, + tryReadMVar, yield) +import Control.Concurrent.BoundedChan (BoundedChan, newBoundedChan, + tryReadChan, tryWriteChan) +import Control.Exception (finally) +import Control.Monad (unless) +import Control.Monad.Loops (whileM_) +import Data.Aeson (eitherDecode, encode) import qualified Data.Bimap as BM import qualified Data.ByteString as B hiding (putStrLn) import qualified Data.ByteString.Lazy as BL hiding (putStrLn) -import Data.IORef +import Data.IORef (IORef, atomicModifyIORef', + newIORef, readIORef) import qualified Data.List as L -import Data.List.NonEmpty +import Data.List.NonEmpty (NonEmpty ((:|))) import qualified Data.Map as M -import Data.Maybe +import Data.Maybe (isJust, isNothing) import qualified Data.Text as T import qualified Data.Text.Encoding as E -import Data.Time.Clock +import Data.Time.Clock () import Safe (lastMay) -import System.Log.Logger -import System.Timeout -import System.ZMQ4 -import System.ZMQ4.ZAP +import System.Log.Logger (debugM, warningM) +import System.Timeout () +import System.ZMQ4 (Context, Event (In), + Poll (Sock), Pub (..), + Router (..), Socket, + Switch (On), bind, close, poll, + receiveMulti, restrict, + sendMulti, setCurveServer, + setLinger, setTcpKeepAlive, + setTcpKeepAliveCount, + setTcpKeepAliveIdle, + setTcpKeepAliveInterval, + setZapDomain, socket) +import System.ZMQ4.ZAP (zapApplyCertificate) newtype OrderIdGenerator = IO OrderId type PeerId = B.ByteString @@ -59,7 +87,13 @@ data BrokerServerHandle = BrokerServerHandle ThreadId ThreadId (MVar ()) (MVar ( type TradeSink = Trade -> IO () -startBrokerServer :: [BrokerBackend] -> Context -> T.Text -> T.Text -> [TradeSink] -> ServerSecurityParams -> IO BrokerServerHandle +startBrokerServer :: [BrokerBackend] -> + Context -> + T.Text -> + T.Text -> + [TradeSink] -> + ServerSecurityParams -> + IO BrokerServerHandle startBrokerServer brokers c ep notificationsEp tradeSinks params = do sock <- socket c Router notificationsSock <- socket c Pub