lib/tamashii/manager/server.rb in tamashii-manager-0.1.7 vs lib/tamashii/manager/server.rb in tamashii-manager-0.2.0
- old
+ new
@@ -1,81 +1,24 @@
-require "json"
-require "securerandom"
-require "websocket/driver"
-require "monitor"
+# frozen_string_literal: true
-require "tamashii/manager/client"
-require "tamashii/manager/stream"
-require "tamashii/manager/stream_event_loop"
+Tamashii::Server.config do |config|
+ config.connection_class = Tamashii::Manager::Client
+ config.pubsub_class = Tamashii::Manager::Subscription
+end
module Tamashii
module Manager
- class Server
- class << self
- attr_reader :instance
-
- LOCK = Monitor.new
-
- def compile
- @instance ||= new
- end
-
- def call(env)
- LOCK.synchronize { compile } unless instance
- call!(env)
- end
-
- def call!(env)
- instance.call(env)
- end
- end
-
+ # :nodoc:
+ class Server < Tamashii::Server::Base
def initialize
- @event_loop = StreamEventLoop.new
+ super
setup_heartbeat_timer
-
- Manager.logger.info("Server is created, read for accept connection")
end
+ # NOTE: Move into Tamashii::Server maybe better
def setup_heartbeat_timer
@heartbeat_timer = @event_loop.timer(Config.heartbeat_interval) do
- @event_loop.post { Connection.instance.map(&:beat) }
- end
- end
-
- def call(env)
- if WebSocket::Driver.websocket?(env)
- Client.new(env, @event_loop)
- # A dummy rack response
- body = {
- message: "WS connected",
- version: Tamashii::Manager::VERSION
- }.to_json
-
- [
- 200,
- {
- "Content-Type" => "application/json",
- "Content-Length" => body.bytesize
- },
- [body]
- ]
- else
-
- # TODO: Handle HTTP API
- body = {
- message: "Invalid protocol or api request",
- version: Tamashii::Manager::VERSION
- }.to_json
-
- [
- 404,
- {
- "Content-Type" => "application/json",
- "Content-Length" => body.bytesize
- },
- [body]
- ]
+ @event_loop.post { Client.accepted_clients.values.map(&:beat) }
end
end
end
end
end