packages feed

hMPC-0.1.0.0: app/Types.hs

module Types where

import Control.Concurrent
import Network.Socket
import qualified Data.Map.Strict as Map
import Control.Monad.State
import Parser
import qualified Data.ByteString as BS
import System.Log.Logger
import System.Random
import Data.Time.Clock

-- read dictionary, key = pc, value = mvar bytestring
type Dict = Map.Map Int (MVar BS.ByteString)
-- pid, (socket send to peer (nothing if self), read value from mvar in dict)
data Party = Party {pid :: Integer, host :: String, port :: Integer, outChan :: Chan BS.ByteString, sock :: Maybe Socket, dict :: MVar Dict, nbytesSent :: MVar Int}

data Barrier = Barrier { count :: MVar Int, signal :: MVar () }

-- state transformer environment
data Env = Env {
    parties :: [Party],
    pc :: Int,
    options :: Options,
    forkIOBarrier :: Barrier,
    gen :: StdGen,
    startTime :: UTCTime
}

type SIO a = StateT Env IO a

runSIO :: SIO a -> Env -> IO a
runSIO = evalStateT

logging :: Priority -> String -> IO ()
logging prio str = logM rootLoggerName prio str