- onConnect _ (received,receiveStopped,send,sendStopped)
- = (Ok "",if (not (isEmpty send)) (Just (received,False,[],sendStopped)) Nothing, map encodeFun send,False)
- whileConnected Nothing acc (received,receiveStopped,send,sendStopped)
- = (Ok acc, Nothing, [], False)
- whileConnected (Just newData) acc (received,receiveStopped,send,sendStopped)
- # [acc:msgs] = reverse (split msgSeparator (concat [acc,newData]))
- # write = if (not (isEmpty msgs && isEmpty send))
- (Just (received ++ map decodeFun (reverse msgs),receiveStopped,[],sendStopped))
- Nothing
- = (Ok acc,write,map encodeFun send,False)
-
- onDisconnect l (received,receiveStopped,send,sendStopped)
- = (Ok l,Just (received,True,send,sendStopped))
-
-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
+ onConnect :: String ([MTaskMSGRecv],[MTaskMSGSend],Bool) -> (MaybeErrorString String, Maybe ([MTaskMSGRecv],[MTaskMSGSend],Bool), [String], Bool)
+ onConnect _ (msgs,send,sendStopped)
+ = (Ok "", Just (msgs,[],sendStopped), map encode send, False)
+
+ whileConnected :: (Maybe String) String ([MTaskMSGRecv], [MTaskMSGSend],Bool) -> (MaybeErrorString String, Maybe ([MTaskMSGRecv],[MTaskMSGSend],Bool), [String], Bool)
+ whileConnected Nothing acc (msgs,send,sendStopped)
+ = (Ok acc, Nothing, [], False)
+// = (Ok acc, Just (msgs,[],sendStopped), map encode send, False)
+
+ whileConnected (Just newData) acc (msgs,send,sendStopped)
+ | sendStopped = (Ok acc, Just (msgs ++ [decode newData],[],False), map encode send, False)
+ = (Ok acc, Just (msgs ++ [decode newData],[],False), [], False)