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