@@ -8,10 +8,10 @@ import Control.Concurrent.Chan
8import Network.Wai.Handler.Warp (run)
8import Network.Wai.Handler.Warp (run)
9import Network.Wai
9import Network.Wai
10import Network.HTTP.Types (statusOK)
10import Network.HTTP.Types (statusOK)
11−import Data.Enumerator (run_, ($$))
11+import qualified Data.Conduit as C
12−import Data.Enumerator.List (generateM)
13import Data.Time.Clock.POSIX
12import Data.Time.Clock.POSIX
14import Blaze.ByteString.Builder.Char.Utf8 (fromString)
13import Blaze.ByteString.Builder.Char.Utf8 (fromString)
14+import Blaze.ByteString.Builder (Builder)
16import EventStream
16import EventStream
@@ -27,14 +27,16 @@ app chan req =
29res :: Chan ServerEvent -> Response
29res :: Chan ServerEvent -> Response
30−res chan = ResponseEnumerator (resE chan)
30+res chan = ResponseSource statusOK [("Content-Type", "text/event-stream")] (resE chan)
33−resE :: Chan ServerEvent -> ResponseEnumerator a
33+resE :: Chan ServerEvent -> C.Source IO Builder
34−resE chan genIter =
34+resE chan =
35− run_ $ generateM (fmap eventToBuilder $ readChan chan) $$ iter
35+ C.sourceIO ign (\_ -> ign) (\_ -> fmap (f . eventToBuilder) $ readChan chan)
37− iter = genIter statusOK [("Content-Type", "text/event-stream")]
37+ ign = return ()
39+ f (Just b) = C.Open b
40source :: Chan ServerEvent -> IO ()
42source :: Chan ServerEvent -> IO ()