@@ -25,7 +25,7 @@ type ChanId = Int
25-- ./DemoTCP 127.0.0.1 8082
25-- ./DemoTCP 127.0.0.1 8082
27-- Once the connection is established, the slaves will provide the master
27-- Once the connection is established, the slaves will provide the master
28−-- with their SendAddr. The master then decodes this, and sends a message
28+-- with their SourceAddr. The master then decodes this, and sends a message
29-- back. After processing this message, the slaves respond to the master,
29-- back. After processing this message, the slaves respond to the master,
30-- which then outputs some data.
30-- which then outputs some data.
31main :: IO ()
31main :: IO ()
@@ -34,71 +34,71 @@ main = do
34 case args of
34 case args of
35 -- Master:
35 -- Master:
36 -- The master only provides the host, service, and slaves to expect.
36 -- The master only provides the host, service, and slaves to expect.
37− [host, service, sendAddrFilePath, number] -> do
37+ [host, service, sourceAddrFilePath, number] -> do
38 let numSlaves = read number
38 let numSlaves = read number
39 transport <- mkTransport $ TCPConfig defaultHints host service
39 transport <- mkTransport $ TCPConfig defaultHints host service
40− (clientSendEnds, masterReceiveEnd) <- demoMaster transport sendAddrFilePath numSlaves
40+ (clientSourceEnds, masterTargetEnd) <- demoMaster transport sourceAddrFilePath numSlaves
42− (\clientSendEnd clientId -> send clientSendEnd [BS.pack . show $ clientId])
42+ (\clientSourceEnd clientId -> send clientSourceEnd [BS.pack . show $ clientId])
43− clientSendEnds [0 .. numSlaves-1]
43+ clientSourceEnds [0 .. numSlaves-1]
44 replicateM_ numSlaves $ do
44 replicateM_ numSlaves $ do
45− [clientMessage] <- receive masterReceiveEnd
45+ [clientMessage] <- receive masterTargetEnd
46 print clientMessage
46 print clientMessage
49 -- Each slave provides its own host and service, as well as details of
49 -- Each slave provides its own host and service, as well as details of
50 -- the master it wishes to connect to.
50 -- the master it wishes to connect to.
51− [host, service, sendAddrFilePath] -> do
51+ [host, service, sourceAddrFilePath] -> do
52 transport <- mkTransport $ TCPConfig defaultHints host service
52 transport <- mkTransport $ TCPConfig defaultHints host service
53− (masterSendEnd, slaveReceiveEnd) <- demoSlave transport sendAddrFilePath
53+ (masterSourceEnd, slaveTargetEnd) <- demoSlave transport sourceAddrFilePath
54− [clientId] <- receive slaveReceiveEnd
54+ [clientId] <- receive slaveTargetEnd
55 putStrLn $ "slave: received clientId: " ++ show clientId
55 putStrLn $ "slave: received clientId: " ++ show clientId
56 let message = "Connected to slave: " ++ BS.unpack clientId
56 let message = "Connected to slave: " ++ BS.unpack clientId
58− send masterSendEnd [BS.pack message]
58+ send masterSourceEnd [BS.pack message]
59 putStrLn "slave: sent message to master"
59 putStrLn "slave: sent message to master"
61 _ -> error "Unexpected arguments"
61 _ -> error "Unexpected arguments"
63demoMaster :: Transport -- ^ Transport
63demoMaster :: Transport -- ^ Transport
64− -> FilePath -- ^ File to write SendAddr
64+ -> FilePath -- ^ File to write SourceAddr
65 -> Int -- ^ Number of slaves to expect
65 -> Int -- ^ Number of slaves to expect
66− -> IO ([SendEnd], ReceiveEnd)
66+ -> IO ([SourceEnd], TargetEnd)
67−demoMaster transport sendAddrFilePath numSlaves = do
67+demoMaster transport sourceAddrFilePath numSlaves = do
68 -- Establish an initial transport
68 -- Establish an initial transport
69− (sendAddr, receiveEnd) <- newConnection transport
69+ (sourceAddr, targetEnd) <- newConnection transport
71− -- Write a file containing the sendAddr
71+ -- Write a file containing the sourceAddr
72− putStrLn $ "master: writing sendAddr file:" ++ (show . serialize $ sendAddr)
72+ putStrLn $ "master: writing sourceAddr file:" ++ (show . serialize $ sourceAddr)
73− BS.writeFile sendAddrFilePath $ serialize sendAddr
73+ BS.writeFile sourceAddrFilePath $ serialize sourceAddr
75− -- Deserialize each of the sendEnds received by the slaves
75+ -- Deserialize each of the sourceEnds received by the slaves
76− sendEnds <- replicateM numSlaves $ do
76+ sourceEnds <- replicateM numSlaves $ do
77− [bytes] <- receive receiveEnd
77+ [bytes] <- receive targetEnd
78 putStrLn "master: received connection."
78 putStrLn "master: received connection."
79 case deserialize transport bytes of
79 case deserialize transport bytes of
80 Nothing -> fail "Garbage message from slave!"
80 Nothing -> fail "Garbage message from slave!"
81− Just sendAddr -> connect sendAddr
81+ Just sourceAddr -> connect sourceAddr
82− return (sendEnds, receiveEnd)
82+ return (sourceEnds, targetEnd)
84demoSlave :: Transport -- ^ Transport
84demoSlave :: Transport -- ^ Transport
85− -> FilePath -- ^ File to read SendAddr
85+ -> FilePath -- ^ File to read SourceAddr
86− -> IO (SendEnd, ReceiveEnd)
86+ -> IO (SourceEnd, TargetEnd)
87−demoSlave transport masterSendAddrFilePath = do
87+demoSlave transport masterSourceAddrFilePath = do
88 -- Create a new connection on the transport
88 -- Create a new connection on the transport
89− (sendAddr, receiveEnd) <- newConnection transport
89+ (sourceAddr, targetEnd) <- newConnection transport
91 -- Establish connection with the master
91 -- Establish connection with the master
92− bytes <- BS.readFile masterSendAddrFilePath
92+ bytes <- BS.readFile masterSourceAddrFilePath
93 case deserialize transport bytes of
93 case deserialize transport bytes of
94− Just masterSendAddr -> do
94+ Just masterSourceAddr -> do
95− putStrLn $ "slave: connecting to sendAddr: " ++ (show . serialize $ masterSendAddr)
95+ putStrLn $ "slave: connecting to sourceAddr: " ++ (show . serialize $ masterSourceAddr)
96− masterSendEnd <- connect masterSendAddr
96+ masterSourceEnd <- connect masterSourceAddr
98− -- Send the serialized address of this slave
98+ -- Source the serialized address of this slave
99− send masterSendEnd [serialize sendAddr]
99+ send masterSourceEnd [serialize sourceAddr]
100− putStrLn "slave: sent sendAddr"
100+ putStrLn "slave: sent sourceAddr"
101− return (masterSendEnd, receiveEnd)
101+ return (masterSourceEnd, targetEnd)
103− Nothing -> error "slave: Unable to deserialize master SendAddr!"
103+ Nothing -> error "slave: Unable to deserialize master SourceAddr!"