class Citrus::Common::Service::ChannelService::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