class ManagerRemoteWebSockets

Public Class Methods

new() click to toggle source

methods

Calls superclass method ManagerRemoteSocketBase::new
# File lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb, line 17
def initialize
  super

  @class_client = @class_client || SocketClientWebSockets

  @class_client.manager_remote = self
end

Public Instance Methods

start!(callback = nil) click to toggle source
# File lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb, line 27
def start!(callback = nil)
  start_server_websocket(callback)
  start_server_websocket_secure(nil)

  nil
end

Protected Instance Methods

server_type() click to toggle source

properties

# File lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb, line 8
def server_type
  'websocket'
end
start_server_websocket(callback) click to toggle source
# File lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb, line 35
def start_server_websocket(callback)
  @port = Constants::REMOTE_PORT_WEBSOCKET
  start_server(@port, nil, callback)

  nil
end
start_server_websocket_secure(callback) click to toggle source
# File lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb, line 43
def start_server_websocket_secure(callback)
  path_private_key = ENV['SERVER_PRIVATE_KEY']
  path_certificate = ENV['SERVER_CERTIFICATE']

  can_start_server = true

  if path_private_key.nil?
    can_start_server = false
  else
    can_start_server = can_start_server && File.exist?(path_private_key)
  end

  if path_certificate.nil?
    can_start_server = false
  else
    can_start_server = can_start_server && File.exist?(path_certificate)
  end

  if can_start_server
    tls_options =
        {
            private_key_file: path_private_key,
            cert_chain_file:  path_certificate,
        }

    @logger.info 'try start secure websocket server'

    @port_secure = Constants::REMOTE_PORT_WEBSOCKET_SECURE

    start_server(@port_secure, tls_options, callback)
  else
    @port_secure = 0
  end

  nil
end

Private Instance Methods

start_server(port, tls_options = nil, callback = nil) click to toggle source
# File lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb, line 81
def start_server(port, tls_options = nil, callback = nil)
  host = '0.0.0.0'

  thread = Thread.new do
    begin

      EM.run do

        begin

          params =
              {
                  host: host,
                  port: port
              }

          unless tls_options.nil?
            params[:secure]      = true
            params[:tls_options] = tls_options
          end

          EM::WebSocket.run(params) do |websocket|
            client           = @class_client.new(websocket)
            client.websocket = websocket
          end

          @logger.info "server #{self.server_type}\tstarted on #{host}:#{port}"

          callback.call unless callback.nil?

        rescue Exception => e
          AppInfo.instance.on_server_error(e.to_s, e)
        end
      end
    rescue Exception => e
      message = "ATTENTION! error on web socket server #{host}:#{port} thread. Server is secure: #{!tls_options.nil?}. Error: #{e}"

      AppInfo.instance.on_server_error(message, e)

      retry
    end
  end

  thread.name = "thread_remote_server_#{host}:#{port}"

  nil
end