class Strum::Server::Interceptor

Constants

Settings

Settings for this manager

Public Class Methods

new(settings = {}) click to toggle source

Create a Gateway object and spawn an endpoint for incoming connections. @param settings [Hash] Settings for this interceptor.

Calls superclass method Strum::Internal::Component::new
# File lib/strum/server/interceptor.rb, line 21
def initialize(settings = {})
  self[:Settings] = Settings.new(
      ENV['SESSION_MAX_SIZE'].to_i,
      ENV['SESSION_THROTTLE_COUNT'].to_i,
      ENV['SESSION_DELAY_TIME'].to_i)
  super(:Reactor)
end

Public Instance Methods

intercept(socket) click to toggle source

Intercepts a socket

# File lib/strum/server/interceptor.rb, line 31
def intercept(socket)
  report "Intercepting incoming socket from #{socket.io.addr[-1]}"
  begin
    validate(socket)
    authenticate(socket)
    session = self[:SessionGenerator].generate(socket)
    self[:Manage].register_session(session)
  rescue SocketError
    close_socket(socket)
  end
end

Private Instance Methods

authenticate(socket) click to toggle source
# File lib/strum/server/interceptor.rb, line 73
def authenticate(socket); end
close_socket(socket) click to toggle source

Closes a socket and removes it from our Manager's list.

# File lib/strum/server/interceptor.rb, line 67
def close_socket(socket)
  socket.close
  self[:Manager][:SessionList][socket.io.addr[-1]].delete(socket)
end
validate(socket) click to toggle source

Validates a socket.

# File lib/strum/server/interceptor.rb, line 47
def validate(socket)
  at = Time.now
  if self[:Manager][:SessionList].key? ip
    unless (at - self[:Manager][:SessionList].last[:InitTime]) < self[:Settings][:DELAY_TIME]
      self[:Component][:API].trigger_events(Strum::Internal::Events::SocketDelayViolationEvent)
      close_socket(socket)
    end
    unless self[:SessionList].size < self[:Settings][:MAX_SIZE]
      self[:Component][:API].trigger_events(Strum::Internal::Events::SocketListOverflow)
      close_socket(socket)
    end
    unless self[:SessionList][ip].size < self[:Settings][:THROTTLE_COUNT]
      self[:Component][:API].trigger_events(Strum::Internal::Events::SocketThrottleEvent)
      close_socket(socket)
    end
  end
end