Skip to content

Commit 6f0c69c

Browse files
committed
sourceRequest
1 parent 71c4ebb commit 6f0c69c

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

Web/SocketIO/Protocol.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import Prelude hiding (take, takeWh
2222

2323
--------------------------------------------------------------------------------
2424
-- | Attoparsec Conduit
25-
parseMessage :: Conduit ByteString (ResourceT IO) Message
25+
parseMessage :: Conduit ByteString IO Message
2626
parseMessage = do
2727
conduitParserEither framedOrNot =$= awaitForever go
2828
where framedOrNot = choice [frameParser messageParser, messageParser]

Web/SocketIO/Request.hs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,35 @@
11
--------------------------------------------------------------------------------
22
-- | Converts HTTP requests to Socket.IO requests
33
{-# LANGUAGE OverloadedStrings #-}
4-
module Web.SocketIO.Request (parseHTTPRequest) where
4+
module Web.SocketIO.Request (sourceRequest, parseHTTPRequest) where
55

66
--------------------------------------------------------------------------------
77
import Web.SocketIO.Types
88
import Web.SocketIO.Protocol
99

1010
--------------------------------------------------------------------------------
1111
import Control.Applicative ((<$>))
12+
import Data.Conduit
1213
import qualified Network.Wai as Wai
1314
import Network.HTTP.Types (Method)
1415

16+
sourceRequest :: Wai.Request -> Source IO Request
17+
sourceRequest request = do
18+
let path = parsePath (Wai.rawPathInfo request)
19+
let method = Wai.requestMethod request
20+
21+
case (method, path) of
22+
("GET", (WithoutSession _ _)) -> yield Handshake
23+
("GET", (WithSession _ _ _ sessionID)) -> yield (Connect sessionID)
24+
("POST", (WithSession _ _ _ sessionID)) -> do
25+
Wai.requestBody request $= parseMessage =$= filterMsgEvent sessionID
26+
(_, (WithSession _ _ _ sessionID)) -> yield (Disconnect sessionID)
27+
_ -> error "error handling http request"
28+
where filterMsgEvent sessionID = do
29+
message <- await
30+
case message of
31+
Just (MsgEvent _ _ event) -> yield (Emit sessionID event)
32+
_ -> return ()
1533
--------------------------------------------------------------------------------
1634
-- | Information of a HTTP reqeust we need
1735
type RequestInfo = (Method, Path, Framed Message)

0 commit comments

Comments
 (0)