Sha256: fb32c770e3244beec2860d15c01c4e4e6a06628500a9ecf61e64f3969e0c5720

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

require 'em-websocket'

module Alondra
  module Server
    extend self

    def run
      Rails.logger.info "Server starting on port #{Alondra.config.port}"

      EM::WebSocket.start(:host => '0.0.0.0', :port => Alondra.config.port) do |websocket|

        websocket.onopen do
          session = SessionParser.parse(websocket)
          
          Rails.logger.info "client connected."
          Connection.new(websocket, session)
        end

        websocket.onclose do
          Rails.logger.info "Connection closed"
          Connections[websocket].destroy! if Connections[websocket].present?
        end

        websocket.onerror do |ex|
          puts "Error: #{ex.message}"
          Rails.logger.error "Error: #{ex.message}"
          Rails.logger.error ex.backtrace.join("\n")
          Connections[websocket].destroy! if Connections[websocket]
        end

        websocket.onmessage do |msg|
          Rails.logger.info "received: #{msg}"
          CommandDispatcher.dispatch(msg, Connections[websocket])
        end
      end

      EM.error_handler do |error|
        puts "Error raised during event loop: #{error.message}"
        Rails.logger.error "Error raised during event loop: #{error.message}"
        Rails.logger.error error.stacktrace if error.respond_to? :stacktrace
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
alondra-0.0.3 lib/alondra/server.rb