-- ----------------------------------------------------------------------------
{- |
Module :
Copyright : Copyright (C) 2008 Stefan Schmidt
License : MIT
Maintainer : Stefan Schmidt (stefanschmidt@web.de)
Stability : experimental
Portability: portable
Version : 0.1
-}
-- ----------------------------------------------------------------------------
module Main(main) where
import Control.Concurrent
import qualified Data.ByteString.Lazy as B
import Holumbus.Common.Logging
import Holumbus.Common.Utils
import Holumbus.Network.Port
import Holumbus.Network.PortRegistry.PortRegistryPort
import qualified Holumbus.Console.Console as Console
type StringStream = Stream String
type StringPort = Port String
newStringStream :: IO StringStream
newStringStream = newLocalStream Nothing
decodeStringPort :: Maybe B.ByteString -> Maybe StringPort
decodeStringPort = decodeMaybe
version :: String
version = "Ports-Demo Receiver 0.1"
main :: IO ()
main
= do
initializeLogging []
putStrLn version
putStrLn "Begin"
reg <- newPortRegistryFromXmlFile "/tmp/registry.xml"
setPortRegistry reg
printStreamController
putStrLn "initialising streams..."
s <- newStringStream
p <- newPortFromStream s
globalS <- newStream STGlobal (Just "global") (Just 10002)
putStrLn "streams initialised"
writePortToFile p "p.port"
forkIO $ printMessages "global" globalS
Console.handleUserInput createConsole ()
printMessages :: String -> StringStream -> IO ()
printMessages info s
= do
msg <- readStreamMsg s
putStrLn $ "port: " ++ info
putStrLn "Incoming Message:"
putStrLn $ show msg
let replyPort = decodeStringPort $ getGenericData msg
let text = getMessageData msg
case replyPort of
(Nothing) ->
do
putStrLn "no reply port in message"
(Just p) ->
do
send p ("ECHO:" ++ text)
printMessages info s
createConsole :: Console.ConsoleData ()
createConsole =
Console.addConsoleCommand "debug" printDebug "prints internal state of the filesystem (DEBUG)" $
Console.addConsoleCommand "version" printVersion "prints the version" $
Console.initializeConsole
printDebug :: () -> [String] -> IO ()
printDebug _ _
= do
printStreamController
printVersion :: () -> [String] -> IO ()
printVersion _ _
= do
putStrLn version