-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMain.purs
More file actions
52 lines (38 loc) · 1.73 KB
/
Main.purs
File metadata and controls
52 lines (38 loc) · 1.73 KB
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
42
43
44
45
46
47
48
49
50
51
52
-- | Works with the example server in this project
module Main
( main
) where
-------------------------------------------------------------------------------
import Effect (Effect)
import Effect.Class.Console (logShow)
import Web.Event.Event (Event, EventType(EventType), timeStamp)
import Data.Maybe (Maybe(Nothing))
import Data.Tuple (Tuple(Tuple))
import Network.EventSource (addEventListener, URL(URL), eventData, readyState, setOnError, setOnOpen, setOnMessage, newEventSource, url)
import Prelude (Unit, bind, discard, (<>), show)
-------------------------------------------------------------------------------
main :: Effect Unit
main = do
es <- newEventSource (URL "/stream") Nothing
rs <- readyState es
logShow rs
logShow (url es)
setOnOpen es handleOpen
setOnError es handleError
setOnMessage es handleMessage
addEventListener (EventType "boop") handleBoop false es
-------------------------------------------------------------------------------
handleOpen :: Event -> Effect Unit
handleOpen ev = logShow ("Connection is open (" <> show (timeStamp ev) <> ").")
-------------------------------------------------------------------------------
handleError :: Event -> Effect Unit
handleError ev = logShow ("EventSource failed (" <> show (timeStamp ev) <> ").")
-------------------------------------------------------------------------------
handleMessage :: Event -> Effect Unit
handleMessage = handle "message"
-------------------------------------------------------------------------------
handleBoop :: Event -> Effect Unit
handleBoop = handle "boop"
-------------------------------------------------------------------------------
handle :: String -> Event -> Effect Unit
handle tag e = logShow (Tuple tag (eventData e))