Browse Source

BrokerServer: formatting

master
Denis Tereshkin 4 years ago
parent
commit
3ae040d89b
  1. 72
      src/ATrade/Broker/Server.hs

72
src/ATrade/Broker/Server.hs

@ -7,32 +7,60 @@ module ATrade.Broker.Server (
TradeSink TradeSink
) where ) where
import ATrade.Broker.Backend import ATrade.Broker.Backend (BrokerBackend (..),
import ATrade.Broker.Protocol BrokerBackendNotification (..),
import ATrade.Types backendNotificationOrderId)
import ATrade.Util import ATrade.Broker.Protocol (BrokerServerRequest (..),
import Control.Concurrent hiding (readChan, writeChan) BrokerServerResponse (..),
import Control.Concurrent.BoundedChan ClientIdentity,
import Control.Exception Notification (..),
import Control.Monad NotificationSqnum (NotificationSqnum),
import Control.Monad.Loops RequestSqnum,
import Data.Aeson 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.Bimap as BM
import qualified Data.ByteString as B hiding (putStrLn) import qualified Data.ByteString as B hiding (putStrLn)
import qualified Data.ByteString.Lazy as BL 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 qualified Data.List as L
import Data.List.NonEmpty import Data.List.NonEmpty (NonEmpty ((:|)))
import qualified Data.Map as M import qualified Data.Map as M
import Data.Maybe import Data.Maybe (isJust, isNothing)
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.Encoding as E import qualified Data.Text.Encoding as E
import Data.Time.Clock import Data.Time.Clock ()
import Safe (lastMay) import Safe (lastMay)
import System.Log.Logger import System.Log.Logger (debugM, warningM)
import System.Timeout import System.Timeout ()
import System.ZMQ4 import System.ZMQ4 (Context, Event (In),
import System.ZMQ4.ZAP 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 newtype OrderIdGenerator = IO OrderId
type PeerId = B.ByteString type PeerId = B.ByteString
@ -59,7 +87,13 @@ data BrokerServerHandle = BrokerServerHandle ThreadId ThreadId (MVar ()) (MVar (
type TradeSink = Trade -> IO () 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 startBrokerServer brokers c ep notificationsEp tradeSinks params = do
sock <- socket c Router sock <- socket c Router
notificationsSock <- socket c Pub notificationsSock <- socket c Pub

Loading…
Cancel
Save