|
|
|
@ -5,21 +5,38 @@ module Main where |
|
|
|
import ATrade.Broker.Client (NotificationCallback, cancelOrder, |
|
|
|
import ATrade.Broker.Client (NotificationCallback, cancelOrder, |
|
|
|
startBrokerClient, stopBrokerClient, |
|
|
|
startBrokerClient, stopBrokerClient, |
|
|
|
submitOrder) |
|
|
|
submitOrder) |
|
|
|
import ATrade.Types (Operation (..), Order (..), |
|
|
|
import ATrade.Types (ClientSecurityParams (ClientSecurityParams), |
|
|
|
|
|
|
|
Operation (..), Order (..), |
|
|
|
OrderPrice (..), |
|
|
|
OrderPrice (..), |
|
|
|
OrderState (Unsubmitted), |
|
|
|
OrderState (Unsubmitted), |
|
|
|
SignalId (..), |
|
|
|
SignalId (..)) |
|
|
|
defaultClientSecurityParams) |
|
|
|
|
|
|
|
import Control.Concurrent (threadDelay) |
|
|
|
import Control.Concurrent (threadDelay) |
|
|
|
import Control.Monad (forever, void) |
|
|
|
import Control.Monad (forever, void) |
|
|
|
|
|
|
|
import Data.String (IsString (fromString)) |
|
|
|
|
|
|
|
import qualified Data.Text as T |
|
|
|
|
|
|
|
import Options.Applicative |
|
|
|
import System.IO |
|
|
|
import System.IO |
|
|
|
import System.Log.Formatter |
|
|
|
import System.Log.Formatter |
|
|
|
import System.Log.Handler (setFormatter) |
|
|
|
import System.Log.Handler (setFormatter) |
|
|
|
import System.Log.Handler.Simple |
|
|
|
import System.Log.Handler.Simple |
|
|
|
import System.Log.Logger |
|
|
|
import System.Log.Logger |
|
|
|
import System.ZMQ4 |
|
|
|
import System.Random |
|
|
|
|
|
|
|
import System.ZMQ4 hiding (identity) |
|
|
|
import System.ZMQ4.ZAP |
|
|
|
import System.ZMQ4.ZAP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data Config = Config |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
identity :: String |
|
|
|
|
|
|
|
} deriving (Show, Eq) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
argParser :: Parser Config |
|
|
|
|
|
|
|
argParser = Config <$> |
|
|
|
|
|
|
|
strOption |
|
|
|
|
|
|
|
( long "identity" |
|
|
|
|
|
|
|
<> short 'i' |
|
|
|
|
|
|
|
<> metavar "ID" |
|
|
|
|
|
|
|
<> help "Client identity") |
|
|
|
|
|
|
|
|
|
|
|
initLogging :: [Char] -> IO () |
|
|
|
initLogging :: [Char] -> IO () |
|
|
|
initLogging inst = do |
|
|
|
initLogging inst = do |
|
|
|
handler <- streamHandler stderr DEBUG >>= |
|
|
|
handler <- streamHandler stderr DEBUG >>= |
|
|
|
@ -36,18 +53,27 @@ callback = infoM "notification" . show |
|
|
|
|
|
|
|
|
|
|
|
main :: IO () |
|
|
|
main :: IO () |
|
|
|
main = do |
|
|
|
main = do |
|
|
|
|
|
|
|
cfg <- execParser opts |
|
|
|
initLogging "broker-client-test" |
|
|
|
initLogging "broker-client-test" |
|
|
|
infoM "broker-client-test" "Starting" |
|
|
|
infoM "broker-client-test" "Starting" |
|
|
|
withContext (\ctx -> do |
|
|
|
withContext (\ctx -> |
|
|
|
bro <- startBrokerClient "test" ctx "tcp://127.0.0.1:5530" "tcp://127.0.0.1:5531" [callback] defaultClientSecurityParams |
|
|
|
withZapHandler ctx $ \_ -> do |
|
|
|
|
|
|
|
maybeServerCert <- loadCertificateFromFile "../broker-server-test/server-cert.pub.json" |
|
|
|
|
|
|
|
maybeMyCert <- loadCertificateFromFile "./client-cert.json" |
|
|
|
|
|
|
|
case (maybeServerCert, maybeMyCert) of |
|
|
|
|
|
|
|
(Right serverCert, Right myCert) -> do |
|
|
|
|
|
|
|
let clientParams = ClientSecurityParams (Just myCert) (Just serverCert) |
|
|
|
|
|
|
|
bro <- startBrokerClient (fromString . identity $ cfg) ctx "tcp://127.0.0.1:5530" "tcp://127.0.0.1:5531" [callback] clientParams |
|
|
|
|
|
|
|
|
|
|
|
void $ submitAndCancelOrder bro 1 |
|
|
|
void $ submitAndCancelOrder bro 1 |
|
|
|
void $ forever $ do |
|
|
|
void $ forever $ do |
|
|
|
threadDelay 10000000 |
|
|
|
threadDelay 10000000 |
|
|
|
stopBrokerClient bro) |
|
|
|
stopBrokerClient bro |
|
|
|
|
|
|
|
(_, _) -> error "Unable to load certs" |
|
|
|
|
|
|
|
) |
|
|
|
where |
|
|
|
where |
|
|
|
submitAndCancelOrder bro oid = do |
|
|
|
submitAndCancelOrder bro oid = do |
|
|
|
threadDelay 1000000 |
|
|
|
randomRIO (1000000, 10000000) >>= threadDelay |
|
|
|
infoM "broker-client-test" "Submitting order" |
|
|
|
infoM "broker-client-test" "Submitting order" |
|
|
|
void $ submitOrder bro Order |
|
|
|
void $ submitOrder bro Order |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -61,9 +87,14 @@ main = do |
|
|
|
orderState = Unsubmitted, |
|
|
|
orderState = Unsubmitted, |
|
|
|
orderSignalId = SignalId "" "" "" |
|
|
|
orderSignalId = SignalId "" "" "" |
|
|
|
} |
|
|
|
} |
|
|
|
threadDelay 1000000 |
|
|
|
randomRIO (1000000, 10000000) >>= threadDelay |
|
|
|
infoM "broker-client-test" "Cancelling order" |
|
|
|
infoM "broker-client-test" "Cancelling order" |
|
|
|
void $ cancelOrder bro oid |
|
|
|
void $ cancelOrder bro oid |
|
|
|
submitAndCancelOrder bro (oid + 1) |
|
|
|
submitAndCancelOrder bro (oid + 1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
opts = info (argParser <**> helper) |
|
|
|
|
|
|
|
( fullDesc |
|
|
|
|
|
|
|
<> progDesc "Testing utility for broker-client facility" |
|
|
|
|
|
|
|
<> header "broker-client-test" ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|