@@ -1,147 +0,0 @@
3−-- module DemoTransport where
6−import Network.Transport
7−import qualified Network.Transport.MVar
8−import Network.Transport.TCP (mkTransport, TCPConfig (..))
10−import qualified Network.Transport.Pipes as Pipes
12−import Control.Concurrent
14−import Control.Exception
15−import System.IO (stderr, hPutStrLn)
17−import qualified Data.ByteString.Char8 as BS
21−forkWithExceptions :: (IO () -> IO ThreadId) -> String -> IO () -> IO ThreadId
22−forkWithExceptions forkit descr action = do
25− Control.Exception.catch
28− hPutStrLn stderr $ "Exception inside "++descr++": "++show e
29− throwTo parent (e::SomeException)
32−-------------------------------------------
33−-- Example program using backend directly
36−-- | Check if multiple messages can be sent on the same connection.
41− (sourceAddr, targetEnd) <- newConnection trans
44− -- [2012.02.19] I'm seeing indefinite MVar errors cropping up here:
45− forkWithExceptions forkOS "receiver thread" $ logServer "logServer" targetEnd
47− forkIO $ logServer "logServer" targetEnd
51− sourceEnd <- connect sourceAddr
53− mapM_ (\n -> send sourceEnd [BS.pack ("hello " ++ show n)]) [1 .. 10]
59− demo0 Network.Transport.MVar.mkTransport
61− demo0$ mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
63− demo0 Pipes.mkTransport
69−-- | Check endpoint serialization and deserialization.
72− -- trans <- mkTransport
73− trans <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
75− (sourceAddr, targetEnd) <- newConnection trans
77− forkIO $ logServer "logServer" targetEnd
80− sourceEnd <- connect sourceAddr
82− -- This use of Just is slightly naughty
83− let Just sourceAddr' = deserialize trans (serialize sourceAddr)
84− sourceEnd' <- connect sourceAddr'
86− send sourceEnd [BS.pack "hello 1"]
87− send sourceEnd' [BS.pack "hello 2"]
90−-- | Check that messages can be sent before receive is set up.
93− -- trans <- mkTransport
94− trans <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
96− (sourceAddr, targetEnd) <- newConnection trans
98− sourceEnd <- connect sourceAddr
99− forkIO $ send sourceEnd [BS.pack "hello 1"]
102− forkIO $ logServer "logServer" targetEnd
105−-- | Check that two different transports can be created.
108− trans1 <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
109− trans2 <- mkTransport $ TCPConfig undefined "127.0.0.1" "8081"
111− (sourceAddr1, targetEnd1) <- newConnection trans1
112− (sourceAddr2, targetEnd2) <- newConnection trans2
114− forkIO $ logServer "logServer1" targetEnd1
115− forkIO $ logServer "logServer2" targetEnd2
117− sourceEnd1 <- connect sourceAddr1
118− sourceEnd2 <- connect sourceAddr2
120− send sourceEnd1 [BS.pack "hello1"]
121− send sourceEnd2 [BS.pack "hello2"]
123−-- | Check that two different connections on the same transport can be created.
126− trans <- mkTransport $ TCPConfig undefined "127.0.0.1" "8080"
127− -- trans <- Network.Transport.MVar.mkTransport
129− (sourceAddr1, targetEnd1) <- newConnection trans
130− (sourceAddr2, targetEnd2) <- newConnection trans
132− forkIO $ logServer "logServer1" targetEnd1
133− forkIO $ logServer "logServer2" targetEnd2
135− sourceEnd1 <- connect sourceAddr1
136− sourceEnd2 <- connect sourceAddr2
138− send sourceEnd1 [BS.pack "hello1"]
139− send sourceEnd2 [BS.pack "hello2"]
143−logServer :: String -> TargetEnd -> IO ()
144−logServer name targetEnd = forever $ do
145− x <- receive targetEnd
146− trace (name ++ " rcvd: " ++ show x) $ return ()