wai-websockets 1.2.0.3 → 1.3.0
raw patch · 3 files changed
+16/−16 lines, 3 filesdep ~conduitdep ~waidep ~warpPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: conduit, wai, warp
API changes (from Hackage documentation)
Files
- Network/Wai/Handler/WebSockets.hs +11/−9
- server.lhs +1/−3
- wai-websockets.cabal +4/−4
Network/Wai/Handler/WebSockets.hs view
@@ -8,7 +8,7 @@ import Data.ByteString (ByteString) import Data.Char (toLower) import qualified Data.ByteString.Char8 as S-import qualified Data.Conduit as C+import Data.Conduit import qualified Data.Enumerator as E import qualified Network.Wai as Wai import qualified Network.Wai.Handler.Warp as Warp@@ -18,7 +18,7 @@ intercept :: WS.Protocol p => (WS.Request -> WS.WebSockets p ()) -> Wai.Request- -> Maybe (C.Source (C.ResourceT IO) ByteString -> Warp.Connection -> C.ResourceT IO ())+ -> Maybe (Source (ResourceT IO) ByteString -> Warp.Connection -> ResourceT IO ()) intercept = interceptWith WS.defaultWebSocketsOptions -- | Variation of 'intercept' which allows custom options.@@ -26,7 +26,7 @@ => WS.WebSocketsOptions -> (WS.Request -> WS.WebSockets p ()) -> Wai.Request- -> Maybe (C.Source (C.ResourceT IO) ByteString -> Warp.Connection -> C.ResourceT IO ())+ -> Maybe (Source (ResourceT IO) ByteString -> Warp.Connection -> ResourceT IO ()) interceptWith opts app req = case lookup "upgrade" $ Wai.requestHeaders req of Just s | S.map toLower s == "websocket" -> Just $ runWebSockets opts req' app@@ -41,21 +41,23 @@ => WS.WebSocketsOptions -> WS.RequestHttpPart -> (WS.Request -> WS.WebSockets p ())- -> C.Source (C.ResourceT IO) ByteString+ -> Source (ResourceT IO) ByteString -> Warp.Connection- -> C.ResourceT IO ()+ -> ResourceT IO () runWebSockets opts req app source conn = do step <- liftIO $ E.runIteratee $ WS.runWebSocketsWith opts req app send- source C.$$ C.sinkState (E.returnI step) push close+ source $$ sink (E.returnI step) where send = iterConnection conn + sink iter = await >>= maybe (close iter) (push iter)+ push iter bs = do step <- liftIO $ E.runIteratee $ E.enumList 1 [bs] E.$$ iter case step of- E.Continue _ -> return $ C.StateProcessing $ E.returnI step- E.Yield out inp -> return $ C.StateDone (streamToMaybe inp) out- E.Error e -> C.monadThrow e+ E.Continue _ -> sink $ E.returnI step+ E.Yield out inp -> maybe (return ()) leftover (streamToMaybe inp) >> return out+ E.Error e -> liftIO $ monadThrow e close iter = do _ <- liftIO $ E.runIteratee $ E.enumEOF E.$$ iter return ()
server.lhs view
@@ -87,9 +87,7 @@ > } staticApp > staticApp :: Network.Wai.Application-> staticApp = Static.staticApp Static.defaultFileServerSettings-> { Static.ssFolder = Static.embeddedLookup $ Static.toEmbedded $(embedDir "static")-> }+> staticApp = Static.staticApp $ Static.embeddedSettings $(embedDir "static") When a client connects, we accept the connection, regardless of the path.
wai-websockets.cabal view
@@ -1,5 +1,5 @@ Name: wai-websockets-Version: 1.2.0.3+Version: 1.3.0 Synopsis: Provide a bridge betweeen WAI and the websockets package. License: MIT License-file: LICENSE@@ -19,8 +19,8 @@ Library Build-Depends: base >= 3 && < 5 , bytestring >= 0.9.1.4- , conduit >= 0.4 && < 0.5- , wai >= 1.2 && < 1.3+ , conduit >= 0.5 && < 0.6+ , wai >= 1.3 && < 1.4 , enumerator >= 0.4.8 && < 0.5 , network-enumerator >= 0.1.2 && < 0.2 , blaze-builder >= 0.2.1.4 && < 0.4@@ -28,7 +28,7 @@ , network >= 2.2.1.5 && < 2.4 , transformers >= 0.2 && < 0.4 , websockets >= 0.6 && < 0.7- , warp >= 1.2 && < 1.3+ , warp >= 1.3 && < 1.4 Exposed-modules: Network.Wai.Handler.WebSockets ghc-options: -Wall