git.iko.soy/distributed-process
on master help sign in
Clean up demos file and make small update to README
06812deRyan Newton
README.md+3−3
@@ -25,10 +25,10 @@ The `DemoTransport.hs` file contains a number of different functions named
25To try them out, launch `ghci`, including the appropriate sources:
25To try them out, launch `ghci`, including the appropriate sources:
26
26
27 ghci -idistributed-process/src -inetwork-transport/src examples/DemoTransport.hs
27 ghci -idistributed-process/src -inetwork-transport/src examples/DemoTransport.hs
28+
29+The first demo, `demo0` yields the following output when run with the TCP transport:
28
30
29−The first demo, `demo0` yields the following output:
30−
31− *DemoTransport> demo0
31+ *DemoTransport> tcp >>= demo0
32 logServer: [Chunk "hello 1" Empty]
32 logServer: [Chunk "hello 1" Empty]
33 logServer: [Chunk "hello 2" Empty]
33 logServer: [Chunk "hello 2" Empty]
34 logServer: [Chunk "hello 3" Empty]
34 logServer: [Chunk "hello 3" Empty]
examples/DemoTransport.hs+26−30
@@ -10,21 +10,27 @@ import Control.Concurrent
10import Control.Monad
10import Control.Monad
11
11
12import qualified Data.ByteString.Lazy.Char8 as BS
12import qualified Data.ByteString.Lazy.Char8 as BS
13−-- import qualified Data.ByteString.Char8 as BS
14
13
15import Data.IORef
14import Data.IORef
16import Debug.Trace
15import Debug.Trace
17
16
18−-- closeTransport _ = return ()
17+-------------------------------------------
18+
19+{- Run a demo above with one of these tranpsort shorthands like this:
20+ tcp >>= demo0
21+ -}
22+tcp = mkTCPOff 8080
23+mvar = return Network.Transport.MVar.mkTransport
24+pipes = return Network.Transport.Pipes.mkTransport
25+
19
26
20-------------------------------------------
27-------------------------------------------
21−-- Example program using backend directly
28+-- Example programs using backend directly
22−--
29+
23
30
24-- | Check if multiple messages can be sent on the same connection.
31-- | Check if multiple messages can be sent on the same connection.
25demo0 :: IO Transport -> IO ()
32demo0 :: IO Transport -> IO ()
26demo0 mktrans = do
33demo0 mktrans = do
27−-- trans@Transport{closeTransport} <- mktrans
28 trans <- mktrans
34 trans <- mktrans
29
35
30 (sourceAddr, targetEnd) <- newConnection trans
36 (sourceAddr, targetEnd) <- newConnection trans
@@ -37,7 +43,8 @@ demo0 mktrans = do
37 mapM_ (\n -> send sourceEnd [BS.pack ("hello " ++ show n)]) [1 .. 10]
43 mapM_ (\n -> send sourceEnd [BS.pack ("hello " ++ show n)]) [1 .. 10]
38 threadDelay 100000
44 threadDelay 100000
39
45
40−-- closeTransport trans
46+ closeTransport trans
47+
41
48
42-- | Check endpoint serialization and deserialization.
49-- | Check endpoint serialization and deserialization.
43demo1 :: IO Transport -> IO ()
50demo1 :: IO Transport -> IO ()
@@ -60,25 +67,23 @@ demo1 mktrans = do
60 threadDelay 100000
67 threadDelay 100000
61 closeTransport trans
68 closeTransport trans
62
69
70+
63-- | Check that messages can be sent before receive is set up.
71-- | Check that messages can be sent before receive is set up.
64demo2 :: IO Transport -> IO ()
72demo2 :: IO Transport -> IO ()
65demo2 mktrans = do
73demo2 mktrans = do
66 trans <- mktrans
74 trans <- mktrans
67
75
68 (sourceAddr, targetEnd) <- newConnection trans
76 (sourceAddr, targetEnd) <- newConnection trans
69− putStrLn " ================= "
70 sourceEnd <- connect sourceAddr
77 sourceEnd <- connect sourceAddr
71− putStrLn " FRK TO SEND"
78+
72 forkIO $ send sourceEnd [BS.pack "hello 1"]
79 forkIO $ send sourceEnd [BS.pack "hello 1"]
73 threadDelay 100000
80 threadDelay 100000
74
81
75− putStrLn " NEXT fork receiver (logServer):"
76−
77 forkIO $ logServer "logServer" targetEnd
82 forkIO $ logServer "logServer" targetEnd
78 threadDelay 100000
83 threadDelay 100000
79−
80 closeTransport trans
84 closeTransport trans
81
85
86+
82-- | Check that two different transports can be created.
87-- | Check that two different transports can be created.
83demo3 :: IO Transport -> IO ()
88demo3 :: IO Transport -> IO ()
84demo3 mktrans = do
89demo3 mktrans = do
@@ -135,36 +140,27 @@ logServer name targetEnd = forever $ do
135 x <- receive targetEnd
140 x <- receive targetEnd
136 trace (name ++ " rcvd: " ++ show x) $ return ()
141 trace (name ++ " rcvd: " ++ show x) $ return ()
137
142
138−-- Run a demo above with one of these tranpsort shorthands as argument:
143+mkTCPOff off = do
139−
144+ cntr <- newIORef 0
140−-- do cnt <- readIORef cntr
145+ return$ do cnt <- readIORef cntr
141−-- writeIORef cntr (cnt+1)
146+ writeIORef cntr (cnt+1)
142−-- mkTransport (TCPConfig undefined "127.0.0.1" (show (8080 + offset + cnt)))
147+ mkTransport (TCPConfig undefined "127.0.0.1" (show (off + cnt)))
143−
144−--mkTCP = do cntr <- newIORef 0
145−-- mkTCPOff 8080
146
148
147--------------------------------------------------------------------------------
149--------------------------------------------------------------------------------
148
150
149runWAllTranports :: (IO Transport -> IO ()) -> Int -> IO ()
151runWAllTranports :: (IO Transport -> IO ()) -> Int -> IO ()
150runWAllTranports demo offset = do
152runWAllTranports demo offset = do
151 putStrLn "------------------------------------------------------------"
153 putStrLn "------------------------------------------------------------"
152−
153 putStrLn " MVAR transport:"
154 putStrLn " MVAR transport:"
154− demo Network.Transport.MVar.mkTransport
155+ mvar >>= demo
155−
156 putStrLn "\n TCP transport:"
156 putStrLn "\n TCP transport:"
157− cntr <- newIORef 0
157+ tcp >>= demo
158− demo$ do cnt <- readIORef cntr
159− writeIORef cntr (cnt+1)
160− mkTransport (TCPConfig undefined "127.0.0.1" (show (8080 + offset + cnt)))
161−
162 putStrLn "\n PIPES transport:"
158 putStrLn "\n PIPES transport:"
163− demo Network.Transport.Pipes.mkTransport
159+ pipes >>= demo
164 putStrLn "\n"
160 putStrLn "\n"
165
161
166−main = do
167
162
163+main = do
168 putStrLn "Demo0:"
164 putStrLn "Demo0:"
169 runWAllTranports demo0 0
165 runWAllTranports demo0 0
170 putStrLn "Demo1:"
166 putStrLn "Demo1:"
@@ -176,5 +172,5 @@ main = do
176 putStrLn "Demo4:"
172 putStrLn "Demo4:"
177 runWAllTranports demo4 40
173 runWAllTranports demo4 40
178
174
179− threadDelay (500 * 1000)
175+ threadDelay (300 * 1000)
180 putStrLn "Done with all demos!"
176 putStrLn "Done with all demos!"