on develop help sign in
Accept both text and binary data from WebSocket messages
eb61be8Ryan Trinkle
src-ghcjs/Reflex/Dom/WebSocket/Foreign.hs+7−2
@@ -17,6 +17,8 @@ import Control.Monad.Reader
17import GHCJS.Buffer
17import GHCJS.Buffer
18import JavaScript.TypedArray.ArrayBuffer as JS
18import JavaScript.TypedArray.ArrayBuffer as JS
19import GHCJS.Marshal.Pure
19import GHCJS.Marshal.Pure
20+import GHCJS.Foreign.Internal
21+import Data.Text.Encoding
20
22
21data JSWebSocket = JSWebSocket { unWebSocket :: WebSocket }
23data JSWebSocket = JSWebSocket { unWebSocket :: WebSocket }
22
24
@@ -28,8 +30,11 @@ newWebSocket _ url onMessage onOpen onClose = do
28 _ <- on ws message $ do
30 _ <- on ws message $ do
29 e <- ask
31 e <- ask
30 d <- getData e
32 d <- getData e
33+ liftIO $ case jsTypeOf d of
34+ String -> onMessage $ encodeUtf8 $ pFromJSVal d
35+ _ -> do
31− ab <- liftIO $ unsafeFreeze $ pFromJSVal d
36+ ab <- unsafeFreeze $ pFromJSVal d
32− liftIO $ onMessage $ toByteString 0 Nothing $ createFromArrayBuffer ab
37+ onMessage $ toByteString 0 Nothing $ createFromArrayBuffer ab
33 _ <- on ws closeEvent $ liftIO onClose
38 _ <- on ws closeEvent $ liftIO onClose
34 return $ JSWebSocket ws
39 return $ JSWebSocket ws
35
40