@@ -8,10 +8,10 @@ import Control.Concurrent.Chan
88import Network.Wai.Handler.Warp (run)
99import Network.Wai
1010import Network.HTTP.Types (statusOK)
11−import Data.Enumerator (run_, ($$))
12−import Data.Enumerator.List (generateM)
11+import qualified Data.Conduit as C
1312import Data.Time.Clock.POSIX
1413import Blaze.ByteString.Builder.Char.Utf8 (fromString)
14+import Blaze.ByteString.Builder (Builder)
1515
1616import EventStream
1717
@@ -27,14 +27,16 @@ app chan req =
2727
2828
2929res :: Chan ServerEvent -> Response
30−res chan = ResponseEnumerator (resE chan)
30+res chan = ResponseSource statusOK [("Content-Type", "text/event-stream")] (resE chan)
3131
3232
33−resE :: Chan ServerEvent -> ResponseEnumerator a
34−resE chan genIter =
35− run_ $ generateM (fmap eventToBuilder $ readChan chan) $$ iter
33+resE :: Chan ServerEvent -> C.Source IO Builder
34+resE chan =
35+ C.sourceIO ign (\_ -> ign) (\_ -> fmap (f . eventToBuilder) $ readChan chan)
3636 where
37− iter = genIter statusOK [("Content-Type", "text/event-stream")]
37+ ign = return ()
38+ f Nothing = C.Closed
39+ f (Just b) = C.Open b
3840
3941
4042source :: Chan ServerEvent -> IO ()