import iTasks
import mTask
+derive class iTask MTaskMessage
+
Start :: *World -> *World
-Start world = startEngine mTaskTask world
+Start world = startEngine (
+ enterInformation "Port Number?" []
+ >>= \port->withShared ([], False, [], False) (mTaskTask port)
+ ) world
+//Start world = startEngine mTaskTask world
+
+mTaskTask :: Int (Shared ([MTaskMessage],Bool,[MTaskMessage],Bool)) -> Task ()
+mTaskTask port ch =
+ syncNetworkChannel "localhost" port "\n" decode encode ch ||-
+ (
+ sendMsg msgs ch >>= \_->
+ viewSharedInformation "channels" [ViewWith lens] ch @! ()
+ ) >>* [OnAction ActionFinish (always shutDown)]
+ where
+ lens :: ([MTaskMessage],Bool,[MTaskMessage],Bool) -> ([String], [String])
+ lens (r,_,s,_) = (f r, f s)
+ where
+ f [] = []
+ f [MTEmpty:xs] = f xs
+ f [x:xs] = [toString x:f xs]
+
+ msgs = toMessages 500 (toRealByteCode (unMain bc))
-mTaskTask :: Task ()
-mTaskTask = withShared ([],False,[],False) (\ch->
- syncNetworkChannel "localhost" 8123 "\n" id id ch ||-
- updateSharedInformation "channels" [] ch @! ())
+ bc :: Main (ByteCode Int Stmt)
+ bc = sds \x=0 In {main = x =. x +. lit 1 :. pub x}
-syncNetworkChannel :: String Int String (String -> m) (m -> String) (Shared ([m],Bool,[m],Bool)) -> Task () | iTask m
+sendMsg :: [MTaskMessage] (Shared ([MTaskMessage],Bool,[MTaskMessage],Bool)) -> Task ()
+sendMsg m ch = upd (\(r,rs,s,ss)->(r,rs,s ++ m,ss)) ch @! ()
+
+syncNetworkChannel :: String Int String (String -> m) (n -> String) (Shared ([m],Bool,[n],Bool)) -> Task () | iTask m & iTask n
syncNetworkChannel server port msgSeparator decodeFun encodeFun channel
= tcpconnect server port channel {ConnectionHandlers|onConnect=onConnect,whileConnected=whileConnected,onDisconnect=onDisconnect} @! ()
where
onDisconnect l (received,receiveStopped,send,sendStopped)
= (Ok l,Just (received,True,send,sendStopped))
-consumeNetworkStream :: ([m] -> Task ()) (Shared ([m],Bool,[m],Bool)) -> Task () | iTask m
-consumeNetworkStream processTask channel
- = ((watch channel >>* [OnValue (ifValue ifProcess process)]) <! id) @! ()
- where
- ifProcess (received,receiveStopped,_,_)
- = receiveStopped || (not (isEmpty received))
-
- process (received,receiveStopped,_,_)
- = upd empty channel
- >>| if (isEmpty received) (return ()) (processTask received)
- @! receiveStopped
-
- empty :: ([m],Bool,[m],Bool) -> ([m],Bool,[m],Bool)
- empty (_,rs,s,ss) = ([],rs,s,ss)
+//consumeNetworkStream :: ([m] -> Task ()) (Shared ([m],Bool,[n],Bool)) -> Task () | iTask m & iTask n
+//consumeNetworkStream processTask channel
+// = ((watch channel >>* [OnValue (ifValue ifProcess process)]) <! id) @! ()
+// where
+// ifProcess (received,receiveStopped,_,_)
+// = receiveStopped || (not (isEmpty received))
+//
+// process (received,receiveStopped,_,_)
+// = upd empty channel
+// >>| if (isEmpty received) (return ()) (processTask received)
+// @! receiveStopped
+//
+// empty :: ([m],Bool,[m],Bool) -> ([m],Bool,[m],Bool)
+// empty (_,rs,s,ss) = ([],rs,s,ss)