close()
click to toggle source
def close
@connections.keys.each { |client_id| flush_connection(client_id) }
@engine.disconnect
end
close_connection(client_id)
click to toggle source
def close_connection(client_id)
debug('Closing connection for ?', client_id)
return unless conn = @connections[client_id]
conn.socket.close if conn.socket
trigger('connection:close', client_id)
@connections.delete(client_id)
end
connect(client_id, options = {}, &callback)
click to toggle source
def connect(client_id, options = {}, &callback)
debug('Accepting connection from ?', client_id)
@engine.ping(client_id)
conn = connection(client_id, true)
conn.connect(options, &callback)
@engine.empty_queue(client_id)
end
connection(client_id, create)
click to toggle source
def connection(client_id, create)
conn = @connections[client_id]
return conn if conn or not create
@connections[client_id] = Connection.new(self, client_id)
trigger('connection:open', client_id)
@connections[client_id]
end
deliver(client_id, messages)
click to toggle source
def deliver(client_id, messages)
return if !messages || messages.empty?
return false unless conn = connection(client_id, false)
messages.each(&conn.method(:deliver))
true
end
disconnect()
click to toggle source
def disconnect
@engine.disconnect if @engine.respond_to?(:disconnect)
end
flush_connection(client_id, close = true)
click to toggle source
def flush_connection(client_id, close = true)
return unless client_id
debug('Flushing connection for ?', client_id)
return unless conn = connection(client_id, false)
conn.socket = nil unless close
conn.flush
close_connection(client_id)
end
generate_id()
click to toggle source
def generate_id
Engine.random
end
has_connection?(client_id)
click to toggle source
def has_connection?(client_id)
@connections.has_key?(client_id)
end
open_socket(client_id, socket)
click to toggle source
def open_socket(client_id, socket)
conn = connection(client_id, true)
conn.socket = socket
end
publish(message)
click to toggle source
def publish(message)
channels = Channel.expand(message['channel'])
@engine.publish(message, channels)
end