zmq: some state update mechanism
authorMax Voit <max.voit+gtdv@with-eyes.net>
Fri, 29 May 2015 12:00:34 +0000 (14:00 +0200)
committerMax Voit <max.voit+gtdv@with-eyes.net>
Fri, 29 May 2015 12:00:34 +0000 (14:00 +0200)
zmq-concept/master.hs
zmq-concept/slave.hs

index 2d2427e..0e2f6ec 100644 (file)
@@ -16,11 +16,18 @@ main = do
             ident <- receive sock
             _ <- receive sock
             msg <- receive sock
-            send sock [SendMore] ident
-            send sock [SendMore] ""
-            send sock [] (CS.pack (show (i :: Int)))
+            case CS.head msg of
+                'S' -> sendUpdate sock ident 0
+                'D' -> sendUpdate sock ident i
 
             liftIO $ CS.putStrLn $ CS.append (formatID ident) msg
             liftIO $ hFlush stdout
         return ()
     where formatID i = CS.cons '[' $ CS.append i "] "
+
+sendUpdate sock id num = do
+    send sock [SendMore] id
+    send sock [SendMore] ""
+    send sock [] $ CS.cons 'U' (CS.pack (show (num :: Int)))
+
+
index 07325cd..1611734 100644 (file)
@@ -13,10 +13,13 @@ main = do
     runZMQ $ do
         sock <- socket Req
         connect sock addr
-        send sock [] "started"
+        send sock [] "S"
         forever $ do
             liftIO $ threadDelay 500000
-            c <- receive sock 
-            liftIO . CS.putStrLn $ c
-            send sock [] $ CS.append "Done: " $ c
-            liftIO $ hFlush stdout
+            msg <- receive sock 
+            case CS.head msg of
+                'U' -> do
+                    send sock [] $ CS.append "Done: " $ msg
+                    liftIO . CS.putStrLn $ CS.append "D" $ CS.tail msg
+                    liftIO $ hFlush stdout
+                _ -> return ()