From 46955fc2f755b6cc1328d119c085352572d76b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Tue, 29 Apr 2025 20:30:43 +0200 Subject: Erebos network connection via WebSocket --- src/WebSocket.hs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/WebSocket.hs') diff --git a/src/WebSocket.hs b/src/WebSocket.hs index 273be85..19d30c4 100644 --- a/src/WebSocket.hs +++ b/src/WebSocket.hs @@ -9,8 +9,12 @@ import Control.Concurrent.Chan import Data.ByteString (ByteString) import Data.ByteString.Unsafe +import Data.Function +import Data.Unique import Data.Word +import Erebos.Network + import Foreign.Marshal.Alloc import Foreign.Ptr @@ -20,13 +24,29 @@ import JavaScript qualified as JS data Connection = Connection - { connJS :: JSVal + { connUnique :: Unique + , connAddress :: String + , connJS :: JSVal , connInQueue :: Chan ByteString } +instance Eq Connection where + (==) = (==) `on` connUnique + +instance Ord Connection where + compare = compare `on` connUnique + +instance Show Connection where + show = connAddress + +instance PeerAddressType Connection where + sendBytesToAddress = sendMessage + startClient :: String -> Int -> String -> (Connection -> IO ()) -> IO () startClient addr port path fun = do - connJS <- js_initWebSocket (toJSString $ "ws://" <> addr <> ":" <> show port <> "/" <> path) + connUnique <- newUnique + let connAddress = "ws://" <> addr <> ":" <> show port <> "/" <> path + connJS <- js_initWebSocket (toJSString connAddress) connInQueue <- newChan let conn = Connection {..} -- cgit v1.2.3