import iTasks
import mTask
+derive class iTask MTaskMessage
+
Start :: *World -> *World
+Start world = startEngine (
+ enterInformation "Port Number?" []
+ >>= \port->withShared ([], False, [], False) (mTaskTask port)
+ ) world
Start world = startEngine mTaskTask world
-mTaskTask :: Task ()
-mTaskTask = withShared ([],False,[],False) (\ch->
- syncNetworkChannel "localhost" 8123 "\n" id id ch ||-
- sendByteCode ||-
- updateSharedInformation "channels" [] ch @! ())
-
-sendByteCode :: Task ()
-sendByteCode = viewInformation "send" [] "4" @! ()
-// (toReadableByteCode (unMain bc)) @! ()
+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
- bc :: Main (ByteCode Int Expr)
- bc = sds \x=41 In
- sds \y=1 In
- {main = x =. x +. y}
+ 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
+ | not (trace_tn (fst (toReadableByteCode (unMain bc)))) = undef
+ = toMessages 500 (toRealByteCode (unMain bc))
+
+ bc :: Main (ByteCode Int Stmt)
+ bc = sds \x=1 In {main =
+ If (x ==. lit 3)
+ (x =. lit 1)
+ (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
+| not (trace_tn (join "\n" (map (toString o toJSON) m))) = undef
+= 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)