-
Notifications
You must be signed in to change notification settings - Fork 0
/
HeartBeatGood.hs
41 lines (36 loc) · 1.52 KB
/
HeartBeatGood.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-- Demonstrates successful bi-directional heartbeating between client and server
import Control.Concurrent.TxEvent
import Stomp.Frames
import Stomp.Frames.IO
import Stomp.Increment
import Network as Network
import System.Environment
import System.IO
main :: IO ()
main = do
args <- getArgs
(ip, port) <- processArgs args
handle <- Network.connectTo ip (portFromString port)
hSetBuffering handle NoBuffering
frameHandler <- initFrameHandler handle
put frameHandler $ connect "nohost" 1000 1000
response <- get frameHandler
case response of
(NewFrame frame@(Frame CONNECTED _ _)) -> putStrLn $ "Connected to " ++ ip ++ " on port " ++ port
otherwise -> error "There was a problem initiating the connection"
updateHeartbeat frameHandler (2000 * 1000)
incrementer <- newIncrementer
receiveLoop frameHandler incrementer
receiveLoop :: FrameHandler -> Incrementer -> IO ()
receiveLoop frameHandler incrementer = do
evt <- sync $ getEvtWithTimeOut frameHandler (2500 * 1000) -- Give a half second's leniency
case evt of
Heartbeat -> do
putStrLn $ "Got a heartbeat from the server!"
receiveLoop frameHandler incrementer
otherwise -> putStrLn $ "Got something other than a heartbeat: " ++ (show evt)
processArgs :: [String] -> IO (HostName, String)
processArgs _ = return ("localhost", "2323")
-- |Convert a String to a PortID
portFromString :: String -> PortID
portFromString s = PortNumber (fromIntegral ((read s)::Int))