X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=Devices%2FmTaskTCP.icl;h=4ebc1ac223898681f3825acaf209806d8eebde19;hb=a2df77cbda43d5a24eeb8ac7db7452baae9f18aa;hp=4e3aba64228090d4b967a98a47bf7f73ded8035e;hpb=639cdcf1c26177c87237bd5790e89184f531731d;p=mTask.git diff --git a/Devices/mTaskTCP.icl b/Devices/mTaskTCP.icl index 4e3aba6..4ebc1ac 100644 --- a/Devices/mTaskTCP.icl +++ b/Devices/mTaskTCP.icl @@ -5,6 +5,7 @@ import StdDebug import Devices.mTaskDevice import iTasks from Data.Tuple import appSnd +from Data.Maybe import fromMaybe from Text import class Text(indexOf), instance Text String derive class iTask TCPSettings @@ -22,25 +23,25 @@ instance MTaskDuplex TCPSettings where onDisconnect=onDisconnect} @! () where onConnect :: String ([MTaskMSGRecv],[MTaskMSGSend],Bool) -> (MaybeErrorString String, Maybe ([MTaskMSGRecv],[MTaskMSGSend],Bool), [String], Bool) - onConnect acc (msgs,send,sendStopped) = (Ok acc, Just (msgs,[],sendStopped), map encode send, False) + onConnect acc (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) //We stop whileConnected _ _ (_,_,True) = (Ok "", Nothing, [], True) - //No new data and nothing to send whileConnected Nothing acc (_,[],_) = (Ok acc, Nothing, [], False) - //New data and possibly something to send - whileConnected (Just newdata) acc (msgs,send,sendStopped) - # (acc, nd) = process (acc +++ newdata) + whileConnected newdata acc (msgs,send,sendStopped) + # (acc, nd) = process (acc +++ fromMaybe "" newdata) | isEmpty nd && isEmpty send = (Ok acc, Nothing, [], False) = (Ok acc, Just (msgs++map decode nd,[],sendStopped), map encode send, False) process :: String -> (String, [String]) - process s = case indexOf "\n" s of + process s + | not (trace_tn ("process: " +++ toString (toJSON s))) = undef + = case indexOf "\n" s of -1 = (s, []) - i = appSnd (\ss->[s % (0,i):ss]) (process (s % (i, size s))) + i = appSnd (\ss->[s % (0,i-1):ss]) (process (s % (i+1, size s))) onDisconnect :: String ([MTaskMSGRecv],[MTaskMSGSend],Bool) -> (MaybeErrorString String, Maybe ([MTaskMSGRecv],[MTaskMSGSend],Bool)) onDisconnect _ (msgs,send,sendStopped) = (Ok "", Nothing)