1
+ module Main (main ) where
2
+
1
3
import System.Environment (getArgs )
2
4
import Network.Transport
3
- import Network.Transport.TCP (createTransport )
5
+ import Network.Transport.TCP (createTransport , defaultTCPAddr , defaultTCPParameters )
4
6
import Control.Concurrent.MVar (MVar , newEmptyMVar , takeMVar , putMVar , newMVar , readMVar , modifyMVar_ , modifyMVar )
5
7
import Control.Concurrent (forkIO )
6
8
import Control.Monad (forever , forM , unless , when )
@@ -11,12 +13,12 @@ import qualified Data.Map as Map (fromList, elems, insert, member, empty, size,
11
13
12
14
chatClient :: MVar () -> EndPoint -> EndPointAddress -> IO ()
13
15
chatClient done endpoint serverAddr = do
14
- connect endpoint serverAddr ReliableOrdered
16
+ _ <- connect endpoint serverAddr ReliableOrdered defaultConnectHints
15
17
cOut <- getPeers >>= connectToPeers
16
18
cIn <- newMVar Map. empty
17
19
18
20
-- Listen for incoming messages
19
- forkIO . forever $ do
21
+ _ <- forkIO . forever $ do
20
22
event <- receive endpoint
21
23
case event of
22
24
Received _ msg ->
@@ -26,7 +28,7 @@ chatClient done endpoint serverAddr = do
26
28
didAdd <- modifyMVar cOut $ \ conns ->
27
29
if not (Map. member addr conns)
28
30
then do
29
- Right conn <- connect endpoint addr ReliableOrdered
31
+ Right conn <- connect endpoint addr ReliableOrdered defaultConnectHints
30
32
return (Map. insert addr conn conns, True )
31
33
else
32
34
return (conns, False )
@@ -38,8 +40,7 @@ chatClient done endpoint serverAddr = do
38
40
close (conns Map. ! addr)
39
41
return (Map. delete addr conns)
40
42
showNumPeers cOut
41
-
42
-
43
+ _ -> pure () -- DO nothing for unrecognised events
43
44
44
45
{-
45
46
chatState <- newMVar (Map.fromList peerConns)
@@ -67,7 +68,7 @@ chatClient done endpoint serverAddr = do
67
68
let go = do
68
69
msg <- BSC. getLine
69
70
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]
71
72
go
72
73
go
73
74
putMVar done ()
@@ -83,7 +84,7 @@ chatClient done endpoint serverAddr = do
83
84
connectToPeers :: [EndPointAddress ] -> IO (MVar (Map EndPointAddress Connection ))
84
85
connectToPeers addrs = do
85
86
conns <- forM addrs $ \ addr -> do
86
- Right conn <- connect endpoint addr ReliableOrdered
87
+ Right conn <- connect endpoint addr ReliableOrdered defaultConnectHints
87
88
return (addr, conn)
88
89
newMVar (Map. fromList conns)
89
90
@@ -97,11 +98,11 @@ chatClient done endpoint serverAddr = do
97
98
main :: IO ()
98
99
main = do
99
100
host: port: server: _ <- getArgs
100
- Right transport <- createTransport host port
101
+ Right transport <- createTransport (defaultTCPAddr host port) defaultTCPParameters
101
102
Right endpoint <- newEndPoint transport
102
103
clientDone <- newEmptyMVar
103
104
104
- forkIO $ chatClient clientDone endpoint (EndPointAddress . BSC. pack $ server)
105
+ _ <- forkIO $ chatClient clientDone endpoint (EndPointAddress . BSC. pack $ server)
105
106
106
107
takeMVar clientDone
107
108
0 commit comments