class Citrus::Common::Service::ChannelService::Channel

Channel

Attributes

groups[R]
user_amount[R]

Public Class Methods

new(name, service) click to toggle source

Create a new channel

@param [String] name @param [Object] service

# File lib/citrus/common/service/channel_service.rb, line 403
def initialize name, service
  @name = name
  @groups = {}
  @records = {}
  @channel_service = service
  @state = :state_inited
  @user_amount = 0
end

Public Instance Methods

add(uid, sid) click to toggle source

Add user to channel

@param [String] uid @param [String] sid

# File lib/citrus/common/service/channel_service.rb, line 416
def add uid, sid
  return false unless @state == :state_inited

  res = add uid, sid, @groups
  if res
    @records[uid] = { :sid => sid, :uid => uid }
    @user_amount += 1
  end

  add_to_store @channel_service, gen_key(@channel_service, @name), gen_value(sid, uid)
  res
end
destroy() click to toggle source

Destroy channel

# File lib/citrus/common/service/channel_service.rb, line 464
def destroy
  @state = :state_destroyed
  @channel_service.destroy_channel @name
end
get_member(uid) click to toggle source

Get member info

@param [String] uid

# File lib/citrus/common/service/channel_service.rb, line 459
def get_member uid
  @records[uid]
end
get_members() click to toggle source

Get channel members

# File lib/citrus/common/service/channel_service.rb, line 450
def get_members
  res = []
  @groups.each { |group| group.each { |e| res << e } }
  res
end
leave(uid, sid) click to toggle source

Remove user from channel

@param [String] uid @param [String] sid

# File lib/citrus/common/service/channel_service.rb, line 433
def leave uid, sid
  return unless uid && sid

  @records.delete uid
  @user_amount -= 1
  @user_amout = 0 if @user_amount < 0

  remove_from_store @channel_service, gen_key(@channel_service, @name), gen_value(sid, uid)

  res = delete_from uid, sid, @groups[sid]
  if @groups[sid] && @groups[sid].length == 0
    @groups.delete sid
  end
  res
end
push_message(route, msg, args) { |exception 'channel is not running now'| ... } click to toggle source

Push message to all the members in the channel

@param [String] route @param [Hash] msg @param [Hash] args

# File lib/citrus/common/service/channel_service.rb, line 474
def push_message route, msg, args, &block
  unless @state == :state_inited
    block_given? and yield Exception.new 'channel is not running now'
    return
  end
  send_message_by_group @channel_service, route, msg, @groups, args, &block
end