class ActionChannels::Server
Attributes
channel_repository[R]
port[R]
Public Class Methods
new(options)
click to toggle source
# File lib/action_channels/server.rb, line 5 def initialize(options) @port = options.fetch(:port) @channel_repository = ChannelRepository.new options.fetch(:channels, []) end
Public Instance Methods
process_client(client)
click to toggle source
# File lib/action_channels/server.rb, line 18 def process_client(client) client.on :message, callback_on_message(client) client.on :close, callback_on_close(client) client.on :error, callback_on_error(client) client.on :io_error, callback_on_io_error(client) client end
run()
click to toggle source
# File lib/action_channels/server.rb, line 10 def run NIO::WebSocket.listen port: port do |driver| process_client Driver.new(driver) end ActionChannels.logger.info "Server started on port: #{port}" end
Private Instance Methods
callback_on_close(client)
click to toggle source
# File lib/action_channels/server.rb, line 61 def callback_on_close(client) lambda do |event| ActionChannels.logger.info "Client closed connection." channel_repository.all.each { |channel| channel.remove_client(client) } end end
callback_on_error(client)
click to toggle source
# File lib/action_channels/server.rb, line 54 def callback_on_error(client) lambda do |event| ActionChannels.logger.error "Received error: #{event.message}" channel_repository.all.each { |channel| channel.remove_client(client) } end end
callback_on_io_error(client)
click to toggle source
# File lib/action_channels/server.rb, line 47 def callback_on_io_error(client) proc do ActionChannels.logger.error "Received io_error." channel_repository.all.each { |channel| channel.remove_client(client) } end end
callback_on_message(client)
click to toggle source
# File lib/action_channels/server.rb, line 29 def callback_on_message(client) lambda do |event| begin ActionChannels.logger.info "Received new message: #{event.data}" message = Message.parse_and_setup_author event.data, client process_message message rescue Errors::NotParseMessage => exp ActionChannels.logger.error exp.message message_sender.send_error_400 client end end end
message_sender()
click to toggle source
# File lib/action_channels/server.rb, line 43 def message_sender @message_sender ||= MessageSenders::WebSocket.new end
process_message(message)
click to toggle source
# File lib/action_channels/server.rb, line 68 def process_message(message) channel = channel_repository.find_by_name_or_create message.channel channel.process_message message end