@@ -2,41 +2,24 @@
22module Main where
33
44import Control.Monad
5−import Control.Monad.Trans
65import Control.Concurrent (forkIO, threadDelay)
76import Control.Concurrent.Chan
87import Network.Wai.Handler.Warp (run)
98import Network.Wai
109import Network.HTTP.Types (statusOK)
11−import Data.Enumerator (run_, ($$))
12−import Data.Enumerator.List (generateM)
1310import Data.Time.Clock.POSIX
1411import Blaze.ByteString.Builder.Char.Utf8 (fromString)
1512
16−import EventStream
17−
13+import Network.Wai.EventSource
1814
1915app :: Chan ServerEvent -> Application
2016app chan req =
2117 case pathInfo req of
2218 [] -> return $ ResponseFile statusOK [("Content-Type", "text/html")] "static/index.html" Nothing
23− ["es"] -> do
24− chan' <- liftIO $ dupChan chan
25− return $ res chan'
19+ ["es"] -> eventSourceApp chan req
2620 _ -> error "unexpected pathInfo"
2721
2822
29−res :: Chan ServerEvent -> Response
30−res chan = ResponseEnumerator (resE chan)
31−
32−
33−resE :: Chan ServerEvent -> ResponseEnumerator a
34−resE chan genIter =
35− run_ $ generateM (fmap eventToBuilder $ readChan chan) $$ iter
36− where
37− iter = genIter statusOK [("Content-Type", "text/event-stream")]
38−
39−
4023source :: Chan ServerEvent -> IO ()
4124source chan = forever $ do
4225 threadDelay 1000000