@@ -1,23 +1,44 @@
1module DemoTransport where
1module DemoTransport where
3import Network.Transport
3import Network.Transport
4−import Network.Transport.MVar (mkTransport)
4+import qualified Network.Transport.MVar
5+import Network.Transport.TCP (mkTransport, TCPConfig (..))
6import Control.Concurrent
7import Control.Concurrent
7import qualified Data.ByteString.Char8 as BS
10import qualified Data.ByteString.Char8 as BS
9-------------------------------------------
14-------------------------------------------
10-- Example program using backend directly
15-- Example program using backend directly
13−-- check the endpoint serialisation works
18+-- | Check if multiple messages can be sent on the same connection.
21+ trans <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
23+ (sendAddr, receiveEnd) <- newConnection trans
25+ forkIO $ logServer "logServer" receiveEnd
28+ sendEnd <- connect sendAddr
30+ mapM_ (\n -> send sendEnd [BS.pack ("hello " ++ show n)]) [1 .. 10]
33+-- | Check endpoint serialization and deserialization.
14demo1 :: IO ()
34demo1 :: IO ()
16− trans <- mkTransport
36+ -- trans <- mkTransport
37+ trans <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
18 (sendAddr, receiveEnd) <- newConnection trans
39 (sendAddr, receiveEnd) <- newConnection trans
20− forkIO $ logServer receiveEnd
41+ forkIO $ logServer "logServer" receiveEnd
21 threadDelay 100000
42 threadDelay 100000
23 sendEnd <- connect sendAddr
44 sendEnd <- connect sendAddr
@@ -30,24 +51,58 @@ demo1 = do
30 send sendEnd' [BS.pack "hello 2"]
51 send sendEnd' [BS.pack "hello 2"]
31 threadDelay 100000
52 threadDelay 100000
33−-- check that we can send before any corresponding receive
54+-- | Check that messages can be sent before receive is set up.
34demo2 :: IO ()
55demo2 :: IO ()
36− trans <- mkTransport
57+ -- trans <- mkTransport
58+ trans <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
38 (sendAddr, receiveEnd) <- newConnection trans
60 (sendAddr, receiveEnd) <- newConnection trans
40 sendEnd <- connect sendAddr
62 sendEnd <- connect sendAddr
42 forkIO $ send sendEnd [BS.pack "hello 1"]
63 forkIO $ send sendEnd [BS.pack "hello 1"]
43 threadDelay 100000
64 threadDelay 100000
44− forkIO $ logServer receiveEnd
46− forkIO $ send sendEnd [BS.pack "hello 2"]
66+ forkIO $ logServer "logServer" receiveEnd
69+-- | Check that two different transports can be created.
72+ trans1 <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
73+ trans2 <- mkTransport $ TCPConfig undefined "127.0.0.1" "8081"
75+ (sendAddr1, receiveEnd1) <- newConnection trans1
76+ (sendAddr2, receiveEnd2) <- newConnection trans2
78+ forkIO $ logServer "logServer1" receiveEnd1
79+ forkIO $ logServer "logServer2" receiveEnd2
81+ sendEnd1 <- connect sendAddr1
82+ sendEnd2 <- connect sendAddr2
84+ send sendEnd1 [BS.pack "hello1"]
85+ send sendEnd2 [BS.pack "hello2"]
87+-- | Check that two different connections on the same transport can be created.
90+ trans <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
91+ -- trans <- Network.Transport.MVar.mkTransport
93+ (sendAddr1, receiveEnd1) <- newConnection trans
94+ (sendAddr2, receiveEnd2) <- newConnection trans
96+ forkIO $ logServer "logServer1" receiveEnd1
97+ forkIO $ logServer "logServer2" receiveEnd2
99+ sendEnd1 <- connect sendAddr1
100+ sendEnd2 <- connect sendAddr2
102+ send sendEnd1 [BS.pack "hello1"]
103+ send sendEnd2 [BS.pack "hello2"]
49−logServer :: ReceiveEnd -> IO ()
105+logServer :: String -> ReceiveEnd -> IO ()
50−logServer receiveEnd = do
106+logServer name receiveEnd = forever $ do
51 x <- receive receiveEnd
107 x <- receive receiveEnd
52− print x
108+ trace (name ++ ": " ++ show x) $ return ()