|
|
|
@ -1,42 +1,46 @@ |
|
|
|
{-# LANGUAGE OverloadedStrings, OverloadedLabels, LambdaCase #-} |
|
|
|
{-# LANGUAGE LambdaCase #-} |
|
|
|
|
|
|
|
{-# LANGUAGE OverloadedLabels #-} |
|
|
|
|
|
|
|
{-# LANGUAGE OverloadedStrings #-} |
|
|
|
|
|
|
|
|
|
|
|
module Main where |
|
|
|
module Main where |
|
|
|
|
|
|
|
|
|
|
|
import System.IO |
|
|
|
import System.IO |
|
|
|
|
|
|
|
|
|
|
|
import QuoteSource.DataImport |
|
|
|
import ATrade.QuoteSource.Server |
|
|
|
import Control.Concurrent hiding (readChan, writeChan) |
|
|
|
import ATrade.Types |
|
|
|
import Control.Monad |
|
|
|
import Control.Concurrent hiding (readChan, |
|
|
|
import Control.Exception.Safe |
|
|
|
writeChan) |
|
|
|
|
|
|
|
import Control.Concurrent.BoundedChan |
|
|
|
import Control.Error.Util |
|
|
|
import Control.Error.Util |
|
|
|
import qualified GI.Gtk as Gtk |
|
|
|
import Control.Exception.Safe |
|
|
|
|
|
|
|
import Control.Monad |
|
|
|
import Data.GI.Base |
|
|
|
import Data.GI.Base |
|
|
|
import Control.Concurrent.BoundedChan |
|
|
|
import qualified GI.Gtk as Gtk |
|
|
|
import ATrade.Types |
|
|
|
import QuoteSource.DataImport |
|
|
|
import QuoteSource.TableParsers.AllParamsTableParser |
|
|
|
|
|
|
|
import QuoteSource.TableParser |
|
|
|
|
|
|
|
import QuoteSource.PipeReader |
|
|
|
import QuoteSource.PipeReader |
|
|
|
import ATrade.QuoteSource.Server |
|
|
|
import QuoteSource.TableParser |
|
|
|
|
|
|
|
import QuoteSource.TableParsers.AllParamsTableParser |
|
|
|
|
|
|
|
|
|
|
|
import ATrade.Broker.TradeSinks.ZMQTradeSink |
|
|
|
|
|
|
|
import ATrade.Broker.TradeSinks.TelegramTradeSink |
|
|
|
|
|
|
|
import ATrade.Broker.Server |
|
|
|
import ATrade.Broker.Server |
|
|
|
|
|
|
|
import ATrade.Broker.TradeSinks.ZMQTradeSink |
|
|
|
import Broker.PaperBroker |
|
|
|
import Broker.PaperBroker |
|
|
|
import Broker.QuikBroker |
|
|
|
import Broker.QuikBroker |
|
|
|
|
|
|
|
|
|
|
|
import System.Directory |
|
|
|
import System.Directory |
|
|
|
import System.Timeout |
|
|
|
|
|
|
|
import System.Log.Logger |
|
|
|
|
|
|
|
import System.Log.Handler.Simple |
|
|
|
|
|
|
|
import System.Log.Handler (setFormatter) |
|
|
|
|
|
|
|
import System.Log.Formatter |
|
|
|
import System.Log.Formatter |
|
|
|
|
|
|
|
import System.Log.Handler (setFormatter) |
|
|
|
|
|
|
|
import System.Log.Handler.Simple |
|
|
|
|
|
|
|
import System.Log.Logger |
|
|
|
|
|
|
|
import System.Timeout |
|
|
|
import System.ZMQ4 |
|
|
|
import System.ZMQ4 |
|
|
|
import System.ZMQ4.ZAP |
|
|
|
import System.ZMQ4.ZAP |
|
|
|
|
|
|
|
|
|
|
|
import qualified Data.Text as T |
|
|
|
|
|
|
|
import Data.Maybe |
|
|
|
import Data.Maybe |
|
|
|
|
|
|
|
import qualified Data.Text as T |
|
|
|
|
|
|
|
|
|
|
|
import Config |
|
|
|
import Config |
|
|
|
import TickTable (mkTickTable) |
|
|
|
import TickTable (mkTickTable) |
|
|
|
|
|
|
|
import Version |
|
|
|
|
|
|
|
|
|
|
|
forkBoundedChan :: Int -> BoundedChan Tick -> IO (ThreadId, BoundedChan Tick, BoundedChan Tick, BoundedChan QuoteSourceServerData) |
|
|
|
forkBoundedChan :: Int -> BoundedChan Tick -> IO (ThreadId, BoundedChan Tick, BoundedChan Tick, BoundedChan QuoteSourceServerData) |
|
|
|
forkBoundedChan size sourceChan = do |
|
|
|
forkBoundedChan size sourceChan = do |
|
|
|
@ -57,14 +61,18 @@ initLogging = do |
|
|
|
handler <- streamHandler stderr DEBUG >>= |
|
|
|
handler <- streamHandler stderr DEBUG >>= |
|
|
|
(\x -> return $ |
|
|
|
(\x -> return $ |
|
|
|
setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg")) |
|
|
|
setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg")) |
|
|
|
|
|
|
|
fhandler <- fileHandler "quik-connector.log" DEBUG >>= |
|
|
|
|
|
|
|
(\x -> return $ |
|
|
|
|
|
|
|
setFormatter x (simpleLogFormatter "$utcTime\t {$loggername} <$prio> -> $msg")) |
|
|
|
|
|
|
|
|
|
|
|
hSetBuffering stderr LineBuffering |
|
|
|
hSetBuffering stderr LineBuffering |
|
|
|
updateGlobalLogger rootLoggerName (setLevel DEBUG) |
|
|
|
updateGlobalLogger rootLoggerName (setLevel DEBUG) |
|
|
|
updateGlobalLogger rootLoggerName (setHandlers [handler]) |
|
|
|
updateGlobalLogger rootLoggerName (setHandlers [handler, fhandler]) |
|
|
|
|
|
|
|
|
|
|
|
main :: IO () |
|
|
|
main :: IO () |
|
|
|
main = do |
|
|
|
main = do |
|
|
|
initLogging |
|
|
|
initLogging |
|
|
|
|
|
|
|
infoM "main" $ "Starting quik-connector-" ++ T.unpack quikConnectorVersionText |
|
|
|
infoM "main" "Loading config" |
|
|
|
infoM "main" "Loading config" |
|
|
|
config <- readConfig "quik-connector.config.json" |
|
|
|
config <- readConfig "quik-connector.config.json" |
|
|
|
|
|
|
|
|
|
|
|
@ -103,9 +111,9 @@ main = do |
|
|
|
|
|
|
|
|
|
|
|
bracket (forkIO $ pipeReaderThread ctx config) killThread (\_ -> do |
|
|
|
bracket (forkIO $ pipeReaderThread ctx config) killThread (\_ -> do |
|
|
|
withZMQTradeSink ctx (tradeSink config) (\zmqTradeSink -> do |
|
|
|
withZMQTradeSink ctx (tradeSink config) (\zmqTradeSink -> do |
|
|
|
withTelegramTradeSink (telegramToken config) (telegramChatId config) (\telegramTradeSink -> do |
|
|
|
withZMQTradeSink ctx (tradeSink2 config) (\zmqTradeSink2 -> do |
|
|
|
bracket (startQuoteSourceServer c2 ctx (T.pack $ quotesourceEndpoint config) (Just "global")) stopQuoteSourceServer (\_ -> do |
|
|
|
bracket (startQuoteSourceServer c2 ctx (T.pack $ quotesourceEndpoint config) (Just "global")) stopQuoteSourceServer (\_ -> do |
|
|
|
bracket (startBrokerServer [brokerP, brokerQ] ctx (T.pack $ brokerserverEndpoint config) [telegramTradeSink, zmqTradeSink] serverParams) stopBrokerServer (\_ -> do |
|
|
|
bracket (startBrokerServer [brokerP, brokerQ] ctx (T.pack $ brokerserverEndpoint config) [zmqTradeSink2, zmqTradeSink] serverParams) stopBrokerServer (\_ -> do |
|
|
|
void $ Gtk.init Nothing |
|
|
|
void $ Gtk.init Nothing |
|
|
|
window <- new Gtk.Window [ #title := "Quik connector" ] |
|
|
|
window <- new Gtk.Window [ #title := "Quik connector" ] |
|
|
|
void $ on window #destroy Gtk.mainQuit |
|
|
|
void $ on window #destroy Gtk.mainQuit |
|
|
|
|