Browse Source

junction: setupTimer implementation

junction
Denis Tereshkin 4 years ago
parent
commit
ca2927106c
  1. 3
      src/ATrade/Driver/Junction.hs
  2. 11
      src/ATrade/Driver/Junction/RobotDriverThread.hs

3
src/ATrade/Driver/Junction.hs

@ -151,7 +151,8 @@ junctionMain descriptors = do
bigConf <- loadConfig (configKey inst) bigConf <- loadConfig (configKey inst)
rConf <- liftIO $ newIORef (confStrategy bigConf) rConf <- liftIO $ newIORef (confStrategy bigConf)
rState <- loadState (stateKey inst) >>= liftIO . newIORef rState <- loadState (stateKey inst) >>= liftIO . newIORef
let robotEnv = RobotEnv rState rConf bro barsMap rTimers <- loadState (stateKey inst <> ":timers") >>= liftIO . newIORef
let robotEnv = RobotEnv rState rConf rTimers bro barsMap
createRobotDriverThread inst desc (flip runReaderT robotEnv . unRobotM) bigConf rConf rState createRobotDriverThread inst desc (flip runReaderT robotEnv . unRobotM) bigConf rConf rState
Nothing -> error "Unknown strategy" Nothing -> error "Unknown strategy"
where where

11
src/ATrade/Driver/Junction/RobotDriverThread.hs

@ -40,10 +40,11 @@ import Control.Monad (forM_, forever, void)
import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Reader (MonadReader, ReaderT, asks) import Control.Monad.Reader (MonadReader, ReaderT, asks)
import Data.Aeson (FromJSON, ToJSON) import Data.Aeson (FromJSON, ToJSON)
import Data.IORef (IORef, readIORef, import Data.IORef (IORef, atomicModifyIORef',
writeIORef) readIORef, writeIORef)
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy as TL
import Data.Time (UTCTime)
import Dhall (FromDhall) import Dhall (FromDhall)
import System.Log.Logger (infoM) import System.Log.Logger (infoM)
@ -114,6 +115,7 @@ data RobotEnv c s =
{ {
stateRef :: IORef s, stateRef :: IORef s,
configRef :: IORef c, configRef :: IORef c,
timersRef :: IORef [UTCTime],
broker :: BrokerClientHandle, broker :: BrokerClientHandle,
bars :: IORef Bars bars :: IORef Bars
} }
@ -132,7 +134,10 @@ instance MonadRobot (RobotM c s) c s where
appendToLog = liftIO . infoM "Robot" . TL.unpack appendToLog = liftIO . infoM "Robot" . TL.unpack
setupTimer = undefined setupTimer t = do
ref <- asks timersRef
liftIO $ atomicModifyIORef' ref (\s -> (t : s, ()))
enqueueIOAction = undefined enqueueIOAction = undefined
getConfig = asks configRef >>= liftIO . readIORef getConfig = asks configRef >>= liftIO . readIORef
getState = asks stateRef >>= liftIO . readIORef getState = asks stateRef >>= liftIO . readIORef

Loading…
Cancel
Save