From bfe77a7c2ea1a8284c778af18a4ca6e6ab305ad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20K=C3=A4chele?= Date: Sun, 18 Feb 2024 21:15:55 +0100 Subject: [PATCH] Add event machine websocket server --- lib/rex/server.rb | 1 + lib/rex/server/websocket_server.rb | 33 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 lib/rex/server/websocket_server.rb diff --git a/lib/rex/server.rb b/lib/rex/server.rb index 601723c..fb8c54f 100644 --- a/lib/rex/server.rb +++ b/lib/rex/server.rb @@ -10,6 +10,7 @@ require_relative "server/message_parser" require_relative "server/matching_engine" require_relative "server/message_broker" require_relative "server/message_processor" +require_relative "server/websocket_server" module Rex module Server VERSION = "0.1.0" diff --git a/lib/rex/server/websocket_server.rb b/lib/rex/server/websocket_server.rb new file mode 100644 index 0000000..21921eb --- /dev/null +++ b/lib/rex/server/websocket_server.rb @@ -0,0 +1,33 @@ +require "em-websocket" +module Rex + module Server + class WebsocketServer + def initialize(message_broker, outbox, host: "0.0.0.0", port: 8080) + @message_broker = message_broker + @outbox = outbox + @host = host + @port = port + end + + def start + EM::WebSocket.run(host: @host, port: @port) do |connection| + setup_connection_handling(connection) + end + end + + def setup_connection_handling(connection) + connection.onopen do + connection_id = @message_broker.register(connection) + + connection.onmessage do |message| + @outbox.push([connection_id, message]) + end + + connection.onclose do + @message_broker.unregister(connection_id) + end + end + end + end + end +end