on master help sign in
Merge pull request #52 from reflex-frp/websockets-0.12
1d575e3Hamish Mackenzie
jsaddle-warp/jsaddle-warp.cabal+1−1
@@ -38,7 +38,7 @@ library
38 wai >=3.0.3.0 && <3.3,
38 wai >=3.0.3.0 && <3.3,
39 wai-websockets >=3.0.0.6 && <3.1,
39 wai-websockets >=3.0.0.6 && <3.1,
40 warp >=3.1.2 && <3.3,
40 warp >=3.1.2 && <3.3,
41− websockets >=0.9.5.0 && <0.11
41+ websockets >=0.9.5.0 && <0.13
42 exposed-modules:
42 exposed-modules:
43 Language.Javascript.JSaddle.Warp
43 Language.Javascript.JSaddle.Warp
44 build-depends:
44 build-depends:
jsaddle-warp/src/Language/Javascript/JSaddle/WebSockets.hs+4−3
@@ -38,7 +38,6 @@ import Network.Wai
38import Network.WebSockets
38import Network.WebSockets
39 (defaultConnectionOptions, ConnectionOptions(..), sendTextData,
39 (defaultConnectionOptions, ConnectionOptions(..), sendTextData,
40 receiveDataMessage, acceptRequest, ServerApp, sendPing)
40 receiveDataMessage, acceptRequest, ServerApp, sendPing)
41−import qualified Network.WebSockets as WS (DataMessage(..))
42import Network.Wai.Handler.WebSockets (websocketsOr)
41import Network.Wai.Handler.WebSockets (websocketsOr)
43import Network.HTTP.Types (Status(..))
42import Network.HTTP.Types (Status(..))
44
43
@@ -66,6 +65,8 @@ import Foreign.Store (newStore, readStore, lookupStore)
66import Language.Javascript.JSaddle (askJSM)
65import Language.Javascript.JSaddle (askJSM)
67import Control.Monad.IO.Class (MonadIO(..))
66import Control.Monad.IO.Class (MonadIO(..))
68
67
68+import Language.Javascript.JSaddle.WebSockets.Compat (getTextMessageByteString)
69+
69jsaddleOr :: ConnectionOptions -> JSM () -> Application -> IO Application
70jsaddleOr :: ConnectionOptions -> JSM () -> Application -> IO Application
70jsaddleOr opts entryPoint otherApp = do
71jsaddleOr opts entryPoint otherApp = do
71 syncHandlers <- newIORef M.empty
72 syncHandlers <- newIORef M.empty
@@ -78,8 +79,8 @@ jsaddleOr opts entryPoint otherApp = do
78 liftIO $ sendTextData conn (encode syncKey)
79 liftIO $ sendTextData conn (encode syncKey)
79 entryPoint
80 entryPoint
80 _ <- forkIO . forever $
81 _ <- forkIO . forever $
81− receiveDataMessage conn >>= \case
82+ receiveDataMessage conn >>= \msg -> case getTextMessageByteString msg of
82− (WS.Text t) ->
83+ Just t ->
83 case decode t of
84 case decode t of
84 Nothing -> error $ "jsaddle Results decode failed : " <> show t
85 Nothing -> error $ "jsaddle Results decode failed : " <> show t
85 Just r -> processResult r
86 Just r -> processResult r
jsaddle-warp/src/Language/Javascript/JSaddle/WebSockets/Compat.hsnew file+29
@@ -0,0 +1,29 @@
1+{-# LANGUAGE CPP #-}
2+-----------------------------------------------------------------------------
3+--
4+-- Module : Language.Javascript.JSaddle.WebSockets.Compat
5+-- Copyright : (c) Hamish Mackenzie
6+-- License : MIT
7+--
8+-- Maintainer : Hamish Mackenzie <Hamish.K.Mackenzie@googlemail.com>
9+--
10+-- | This module is necessary to harmonize various versions of the websockets
11+-- package; we can't do this CPP inline in
12+-- Language.Javascript.JSaddle.WebSockets because that module uses multi-line
13+-- strings, which are incompatible with CPP
14+--
15+-----------------------------------------------------------------------------
16+module Language.Javascript.JSaddle.WebSockets.Compat where
17+
18+import Data.ByteString.Lazy (ByteString)
19+import qualified Network.WebSockets as WS (DataMessage(..))
20+
21+getTextMessageByteString :: WS.DataMessage -> Maybe ByteString
22+getTextMessageByteString msg = case msg of
23+#if MIN_VERSION_websockets(0,11,0)
24+ (WS.Text t _) ->
25+#else
26+ (WS.Text t) ->
27+#endif
28+ Just t
29+ _ -> Nothing
jsaddle-webkit2gtk/jsaddle-webkit2gtk.cabal+1−1
@@ -35,7 +35,7 @@ library
35 gi-gtk >=3.0.17 && <3.1,
35 gi-gtk >=3.0.17 && <3.1,
36 gi-webkit2 >=4.0.14 && <4.1,
36 gi-webkit2 >=4.0.14 && <4.1,
37 gi-javascriptcore >=4.0.14 && <4.1,
37 gi-javascriptcore >=4.0.14 && <4.1,
38− haskell-gi-base >=0.20 && <0.21,
38+ haskell-gi-base >=0.20 && <0.22,
39 haskell-gi-overloading ==0.0.*,
39 haskell-gi-overloading ==0.0.*,
40 jsaddle >=0.9.4.0 && <0.10,
40 jsaddle >=0.9.4.0 && <0.10,
41 text >=1.2.1.3 && <1.3,
41 text >=1.2.1.3 && <1.3,