-encode :: MTaskMessage -> String
-encode (MTSds i v) = "s" +++ to16bit i +++ v
-encode (MTTask to data) = "t" +++ to16bit to +++ toString (size data) +++ data
-encode (MTPub i v) = "u" +++ to16bit i +++ v
-encode (MTUpd i v) = "u" +++ to16bit i +++ v
-
-decode :: String -> MTaskMessage
-decode x = case x.[0] of
- 'u' = MTUpd (toInt x.[1]) (x % (2,4))
- _ = abort ("Didn't understand message: " +++ x)
-
-safePrint :: String -> String
-safePrint s = join " " [saf c\\c<-:s]
- where
- saf c = "\x" +++ toString (toInt c)
-
-derive gPrint MTaskMessage
-instance toString MTaskMessage where
+encode :: MTaskMSGSend -> String
+encode (MTSds i v) = "s" +++ to16bit i +++ v +++ "\n"
+encode (MTTask to data) = "t" +++ to16bit to +++ to16bit (size data) +++ data +++ "\n"
+encode (MTUpd i v) = "u" +++ to16bit i +++ v +++ "\n"
+
+decode :: String -> MTaskMSGRecv
+decode x
+| size x == 0 = MTEmpty
+= case x.[0] of
+ '\0' = MTEmpty
+ '\n' = MTEmpty
+ 'm' = MTMessage x
+ 't' = MTTaskAdded (from16bit (x % (1,3)))
+ 'u' = MTPub (from16bit (x % (1,3))) (x % (3,5))
+ _ = MTMessage x//abort ("Didn't understand message: " +++ join " " [toString (toInt c)\\c<-: x] +++ "\n")
+
+safePrint :== toString o toJSON
+
+instance toString MTaskMSGSend where