Browse Source

Config support

master
Denis Tereshkin 9 years ago
parent
commit
8bce9791b1
  1. 1
      .gitignore
  2. 63
      app/Main.hs
  3. 11
      quik-connector.cabal

1
.gitignore vendored

@ -1 +1,2 @@
.* .*
quik-connector.config.json

63
app/Main.hs

@ -1,7 +1,7 @@
{-# LANGUAGE OverloadedStrings #-}
module Main where module Main where
import Lib import Lib
import QuoteSource.DDE
import QuoteSource.DataImport import QuoteSource.DataImport
import Control.Concurrent hiding (readChan) import Control.Concurrent hiding (readChan)
import Control.Monad import Control.Monad
@ -13,11 +13,68 @@ import Data.ATrade
import QuoteSource.TableParsers.AllParamsTableParser import QuoteSource.TableParsers.AllParamsTableParser
import QuoteSource.TableParser import QuoteSource.TableParser
callback :: DdeCallback import System.Log.Logger
callback = undefined import System.Log.Handler.Simple
import System.Log.Handler (setFormatter)
import System.Log.Formatter
import Data.Aeson
import Data.Aeson.Types
import qualified Data.ByteString.Lazy as BL
import qualified Data.HashMap.Strict as HM
import qualified Data.Vector as V
import qualified Data.Text as T
data TableConfig = TableConfig {
parserId :: String,
tableName :: String,
tableParams :: Value
} deriving (Show)
data Config = Config {
quotesourceEndpoint :: String,
brokerserverEndpoint :: String,
tables :: [TableConfig]
} deriving (Show)
readConfig :: String -> IO Config
readConfig fname = do
content <- BL.readFile fname
case decode content >>= parseMaybe parseConfig of
Just config -> return config
Nothing -> error "Unable to load config"
parseConfig :: Value -> Parser Config
parseConfig = withObject "object" $ \obj -> do
qse <- obj .: "quotesource-endpoint"
bse <- obj .: "brokerserver-endpoint"
rt <- case HM.lookup "tables" obj of
Just v -> parseTables v
Nothing -> fail "Expected tables array"
return Config { quotesourceEndpoint = qse,
brokerserverEndpoint = bse,
tables = rt }
where
parseTables :: Value -> Parser [TableConfig]
parseTables = withArray "array" $ \arr -> mapM parseTableConfig (V.toList arr)
parseTableConfig :: Value -> Parser TableConfig
parseTableConfig = withObject "object" $ \obj -> do
pid <- obj .: "parser-id"
tn <- obj .: "table-name"
params <- case HM.lookup "params" obj of
Just x -> return x
Nothing -> return $ Object HM.empty
return TableConfig {
parserId = pid,
tableName = tn,
tableParams = params }
main :: IO () main :: IO ()
main = do main = do
config <- readConfig "quik-connector.config.json"
print config
chan <- newBoundedChan 1000 chan <- newBoundedChan 1000
forkIO $ forever $ do forkIO $ forever $ do
tick <- readChan chan tick <- readChan chan

11
quik-connector.cabal

@ -16,7 +16,6 @@ cabal-version: >=1.10
library library
hs-source-dirs: src hs-source-dirs: src
exposed-modules: Lib exposed-modules: Lib
, QuoteSource.DDE
, QuoteSource.DataImport , QuoteSource.DataImport
, Data.ATrade , Data.ATrade
, QuoteSource.TableParser , QuoteSource.TableParser
@ -36,9 +35,11 @@ library
, mtl , mtl
, datetime , datetime
, BoundedChan , BoundedChan
, hslogger
default-language: Haskell2010 default-language: Haskell2010
extra-libraries: "user32" extra-libraries: "user32"
other-modules: QuoteSource.XlParser other-modules: System.Win32.XlParser
, System.Win32.DDE
executable quik-connector-exe executable quik-connector-exe
hs-source-dirs: app hs-source-dirs: app
@ -49,6 +50,12 @@ executable quik-connector-exe
, Win32 , Win32
, gtk , gtk
, BoundedChan , BoundedChan
, hslogger
, aeson
, bytestring
, unordered-containers
, vector
, text
default-language: Haskell2010 default-language: Haskell2010
extra-libraries: "user32" extra-libraries: "user32"

Loading…
Cancel
Save