update
[mTask.git] / miTask.icl
index a00d6f0..62b6ce1 100644 (file)
@@ -7,25 +7,46 @@ from Text import class Text(concat,join,split), instance Text String
 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
@@ -43,17 +64,17 @@ syncNetworkChannel server port msgSeparator decodeFun encodeFun channel
                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)