class Ki::ChannelManager

Public Class Methods

cleanup() click to toggle source
# File lib/ki/channel_manager.rb, line 50
def self.cleanup
  db.delete 'realtime_channel_sockets', {}
  db.delete 'realtime_channel_subscriptions', {}
  db.delete 'realtime_channel_messages', {}
end
connect() click to toggle source
# File lib/ki/channel_manager.rb, line 5
def self.connect
  db.insert 'realtime_channel_sockets', {}
end
db() click to toggle source
# File lib/ki/channel_manager.rb, line 56
def self.db
  Orm::Db.instance
end
disconnect(socket) click to toggle source
# File lib/ki/channel_manager.rb, line 9
def self.disconnect(socket)
  db.delete 'realtime_channel_sockets', { 'id' => socket['id'] }
  db.delete 'realtime_channel_subscriptions', { 'socket_id' => socket['id'] }
end
publish(json) click to toggle source
# File lib/ki/channel_manager.rb, line 32
def self.publish(json)
  json['created_at'] = Time.now.to_i
  db.insert 'realtime_channel_messages', json
end
sockets() click to toggle source
# File lib/ki/channel_manager.rb, line 14
def self.sockets
  db.find 'realtime_channel_sockets'
end
subscribe(json) click to toggle source
# File lib/ki/channel_manager.rb, line 18
def self.subscribe(json)
  channels = db.find 'realtime_channel_subscriptions', json
  if channels.empty?
    item = db.insert 'realtime_channel_subscriptions', json
    channels.push item
  end
  channels
end
tick(json) click to toggle source
# File lib/ki/channel_manager.rb, line 37
def self.tick(json)
  subscribed_channels = db.find 'realtime_channel_subscriptions', json
  channel_names = subscribed_channels.map { |sc| sc['channel_name'] }

  t = Time.now.to_i

  messages = db.find 'realtime_channel_messages', {
    'channel_name' => { '$in' => channel_names },
    'created_at' => { '$gt' => t - 5 }
  }
  messages
end
unsubscribe(json) click to toggle source
# File lib/ki/channel_manager.rb, line 27
def self.unsubscribe(json)
  json.delete('type')
  db.delete 'realtime_channel_subscriptions', json
end