@@ -6,6 +6,8 @@ import Prelude hiding (div, span, mapM, mapM_, concat, concatMap, all, sequence)
66
77import Data.ByteString (ByteString)
88import qualified Data.ByteString as BS
9+import Data.Text as T
10+import Data.Text.Encoding (encodeUtf8)
911import GHCJS.Types
1012import GHCJS.DOM.WebSocket (message, open, closeEvent)
1113import qualified GHCJS.DOM.WebSocket as GD
@@ -17,6 +19,8 @@ import Control.Monad.Reader
1719import GHCJS.Buffer
1820import JavaScript.TypedArray.ArrayBuffer as JS
1921import GHCJS.Marshal.Pure
22+import qualified GHCJS.Prim as Prim
23+import GHCJS.Foreign
2024
2125data JSWebSocket = JSWebSocket { unWebSocket :: WebSocket }
2226
@@ -28,8 +32,12 @@ newWebSocket _ url onMessage onOpen onClose = do
2832 _ <- on ws message $ do
2933 e <- ask
3034 d <- getData e
31− ab <- liftIO $ unsafeFreeze $ pFromJSVal d
32− liftIO $ onMessage $ toByteString 0 Nothing $ createFromArrayBuffer ab
35+ if isString d
36+ then
37+ liftIO $ onMessage $ encodeUtf8 $ T.pack $ Prim.fromJSString d
38+ else do
39+ ab <- liftIO $ unsafeFreeze $ pFromJSVal d
40+ liftIO $ onMessage $ toByteString 0 Nothing $ createFromArrayBuffer ab
3341 _ <- on ws closeEvent $ liftIO onClose
3442 return $ JSWebSocket ws
3543