Skip to content

Commit

Permalink
Initial ping sent by enumerator
Browse files Browse the repository at this point in the history
  • Loading branch information
biilmann committed Sep 27, 2011
1 parent e4136e7 commit e761d68
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions src/EventStream.hs
Expand Up @@ -121,19 +121,21 @@ eventSourceBuilder (ServerEvent n i d)= Just $ flushAfter $
evid (Just i) = mappend (field idField i)


eventSourceEnum source builder timeoutAction finalizer = go
eventSourceEnum source builder timeoutAction finalizer = withInitialPing
where
withInitialPing (Continue k) = k (Chunks [ping]) >>== go
go (Continue k) = do
liftIO $ timeoutAction 10
event <- liftIO $ timeout 9000000 source
case fmap builder event of
Just (Just b) -> k (Chunks [b]) >>== go
Just Nothing -> k EOF
Nothing -> do
k (Chunks [flushAfter $ field commentField (fromString "ping")]) >>== go
k (Chunks [ping]) >>== go
go step = do
liftIO finalizer
returnI step
ping = flushAfter $ field commentField (fromString "ping")


{-|
Expand All @@ -143,12 +145,8 @@ eventSourceEnum source builder timeoutAction finalizer = go
eventStream :: IO ServerEvent -> (ServerEvent -> Maybe Builder) -> IO () -> Snap ()
eventStream source builder finalizer = do
timeoutAction <- getTimeoutAction
writeBuilder $ flushAfter $ field commentField (fromString "ping")
modifyResponse $ setResponseBody $
eventSourceEnum source builder timeoutAction finalizer
{- timeout <- getTimeoutAction-}
{- modifyResponse $ setResponseBody $-}
{- generateM (timeout 1 >> fmap builder source)-}


{-|
Expand Down

0 comments on commit e761d68

Please sign in to comment.