Skip to content

Commit b4b07a1

Browse files
committed
Move ChatServer/Client example into network-transport-tcp.
1 parent 68171a2 commit b4b07a1

File tree

3 files changed

+44
-16
lines changed

3 files changed

+44
-16
lines changed

packages/network-transport-tcp/network-transport-tcp.cabal

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,27 @@ Test-Suite TestQC
105105
DeriveDataTypeable
106106
MultiParamTypeClasses
107107
default-language: Haskell2010
108+
109+
executable chat-server
110+
import: warnings
111+
main-is: ChatServer.hs
112+
hs-source-dirs: tests/chat
113+
Default-Language: Haskell2010
114+
build-depends: base >= 4.14 && < 5,
115+
bytestring,
116+
containers,
117+
mtl,
118+
network-transport,
119+
network-transport-tcp
120+
121+
executable chat-client
122+
import: warnings
123+
main-is: ChatClient.hs
124+
hs-source-dirs: tests/chat
125+
Default-Language: Haskell2010
126+
build-depends: base >= 4.14 && < 5,
127+
bytestring,
128+
containers,
129+
network-transport,
130+
network-transport-tcp
131+

packages/network-transport/tests/chat/ChatClient.hs renamed to packages/network-transport-tcp/tests/chat/ChatClient.hs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
module Main (main) where
2+
13
import System.Environment (getArgs)
24
import Network.Transport
3-
import Network.Transport.TCP (createTransport)
5+
import Network.Transport.TCP (createTransport, defaultTCPAddr, defaultTCPParameters)
46
import Control.Concurrent.MVar (MVar, newEmptyMVar, takeMVar, putMVar, newMVar, readMVar, modifyMVar_, modifyMVar)
57
import Control.Concurrent (forkIO)
68
import Control.Monad (forever, forM, unless, when)
@@ -11,12 +13,12 @@ import qualified Data.Map as Map (fromList, elems, insert, member, empty, size,
1113

1214
chatClient :: MVar () -> EndPoint -> EndPointAddress -> IO ()
1315
chatClient done endpoint serverAddr = do
14-
connect endpoint serverAddr ReliableOrdered
16+
_ <- connect endpoint serverAddr ReliableOrdered defaultConnectHints
1517
cOut <- getPeers >>= connectToPeers
1618
cIn <- newMVar Map.empty
1719

1820
-- Listen for incoming messages
19-
forkIO . forever $ do
21+
_ <- forkIO . forever $ do
2022
event <- receive endpoint
2123
case event of
2224
Received _ msg ->
@@ -26,7 +28,7 @@ chatClient done endpoint serverAddr = do
2628
didAdd <- modifyMVar cOut $ \conns ->
2729
if not (Map.member addr conns)
2830
then do
29-
Right conn <- connect endpoint addr ReliableOrdered
31+
Right conn <- connect endpoint addr ReliableOrdered defaultConnectHints
3032
return (Map.insert addr conn conns, True)
3133
else
3234
return (conns, False)
@@ -38,8 +40,7 @@ chatClient done endpoint serverAddr = do
3840
close (conns Map.! addr)
3941
return (Map.delete addr conns)
4042
showNumPeers cOut
41-
42-
43+
_ -> pure () -- DO nothing for unrecognised events
4344

4445
{-
4546
chatState <- newMVar (Map.fromList peerConns)
@@ -67,7 +68,7 @@ chatClient done endpoint serverAddr = do
6768
let go = do
6869
msg <- BSC.getLine
6970
unless (BS.null msg) $ do
70-
readMVar cOut >>= \conns -> forM (Map.elems conns) $ \conn -> send conn [msg]
71+
_ <- readMVar cOut >>= \conns -> forM (Map.elems conns) $ \conn -> send conn [msg]
7172
go
7273
go
7374
putMVar done ()
@@ -83,7 +84,7 @@ chatClient done endpoint serverAddr = do
8384
connectToPeers :: [EndPointAddress] -> IO (MVar (Map EndPointAddress Connection))
8485
connectToPeers addrs = do
8586
conns <- forM addrs $ \addr -> do
86-
Right conn <- connect endpoint addr ReliableOrdered
87+
Right conn <- connect endpoint addr ReliableOrdered defaultConnectHints
8788
return (addr, conn)
8889
newMVar (Map.fromList conns)
8990

@@ -97,11 +98,11 @@ chatClient done endpoint serverAddr = do
9798
main :: IO ()
9899
main = do
99100
host:port:server:_ <- getArgs
100-
Right transport <- createTransport host port
101+
Right transport <- createTransport (defaultTCPAddr host port) defaultTCPParameters
101102
Right endpoint <- newEndPoint transport
102103
clientDone <- newEmptyMVar
103104

104-
forkIO $ chatClient clientDone endpoint (EndPointAddress . BSC.pack $ server)
105+
_ <- forkIO $ chatClient clientDone endpoint (EndPointAddress . BSC.pack $ server)
105106

106107
takeMVar clientDone
107108

Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
module Main (main) where
2+
13
import System.Environment (getArgs)
24
import Network.Transport
3-
import Network.Transport.TCP (createTransport)
5+
import Network.Transport.TCP (createTransport, defaultTCPAddr, defaultTCPParameters)
46
import Control.Monad.State (evalStateT, modify, get)
57
import Control.Monad (forever)
68
import Control.Monad.IO.Class (liftIO)
@@ -10,7 +12,7 @@ import qualified Data.ByteString.Char8 as BSC (pack)
1012
main :: IO ()
1113
main = do
1214
host:port:_ <- getArgs
13-
Right transport <- createTransport host port
15+
Right transport <- createTransport (defaultTCPAddr host port) defaultTCPParameters
1416
Right endpoint <- newEndPoint transport
1517

1618
putStrLn $ "Chat server ready at " ++ (show . endPointAddressToByteString . address $ endpoint)
@@ -20,9 +22,10 @@ main = do
2022
case event of
2123
ConnectionOpened cid _ addr -> do
2224
get >>= \clients -> liftIO $ do
23-
Right conn <- connect endpoint addr ReliableOrdered
24-
send conn [BSC.pack . show . IntMap.elems $ clients]
25+
Right conn <- connect endpoint addr ReliableOrdered defaultConnectHints
26+
_ <- send conn [BSC.pack . show . IntMap.elems $ clients]
2527
close conn
26-
modify $ IntMap.insert cid (endPointAddressToByteString addr)
28+
modify $ IntMap.insert (fromIntegral cid) (endPointAddressToByteString addr)
2729
ConnectionClosed cid ->
28-
modify $ IntMap.delete cid
30+
modify $ IntMap.delete (fromIntegral cid)
31+
_ -> liftIO . putStrLn $ "Other event received"

0 commit comments

Comments
 (0)