Module: Diaspora::WebSocket
- Defined in:
- lib/diaspora/web_socket.rb
Constant Summary
- REDIS_CONNECTION_SET =
'ws-uids'
Class Method Summary (collapse)
- + (Object) ensure_channel(uid)
- + (Object) initialize_channels
- + (Boolean) is_connected?(uid)
- + (Object) length
- + (Object) next
- + (Object) push_to_user(uid, data)
- + (Object) queue_to_user(uid, data)
- + (Object) redis
- + (Object) subscribe(uid, ws)
- + (Object) unsubscribe(uid, sid)
Class Method Details
+ (Object) ensure_channel(uid)
42 43 44 |
# File 'lib/diaspora/web_socket.rb', line 42 def self.ensure_channel(uid) @channels[uid] ||= [EM::Channel.new, 0 ] end |
+ (Object) initialize_channels
20 21 22 |
# File 'lib/diaspora/web_socket.rb', line 20 def self.initialize_channels @channels = {} end |
+ (Boolean) is_connected?(uid)
56 57 58 |
# File 'lib/diaspora/web_socket.rb', line 56 def self.is_connected?(uid) redis.sismember(REDIS_CONNECTION_SET, uid) end |
+ (Object) length
13 14 15 |
# File 'lib/diaspora/web_socket.rb', line 13 def self.length redis.llen :websocket end |
+ (Object) next
24 25 26 |
# File 'lib/diaspora/web_socket.rb', line 24 def self.next redis.rpop(:websocket) end |
+ (Object) push_to_user(uid, data)
28 29 30 31 |
# File 'lib/diaspora/web_socket.rb', line 28 def self.push_to_user(uid, data) Rails.logger.debug "event=socket-push uid=#{uid}" @channels[uid][0].push(data) if @channels[uid] end |
+ (Object) queue_to_user(uid, data)
16 17 18 |
# File 'lib/diaspora/web_socket.rb', line 16 def self.queue_to_user(uid, data) redis.lpush(:websocket, {:uid => uid, :data => data}.to_json) end |
+ (Object) redis
10 11 12 |
# File 'lib/diaspora/web_socket.rb', line 10 def self.redis @redis ||= Resque.redis end |
+ (Object) subscribe(uid, ws)
33 34 35 36 37 38 39 40 |
# File 'lib/diaspora/web_socket.rb', line 33 def self.subscribe(uid, ws) Rails.logger.info "event=socket-subscribe uid=#{uid} channels=#{self.length}" self.ensure_channel(uid) @channels[uid][0].subscribe{ |msg| ws.send msg } @channels[uid][1] += 1 redis.sadd(REDIS_CONNECTION_SET, uid) end |
+ (Object) unsubscribe(uid, sid)
46 47 48 49 50 51 52 53 54 |
# File 'lib/diaspora/web_socket.rb', line 46 def self.unsubscribe(uid,sid) Rails.logger.info "event=socket-unsubscribe sid=#{sid} uid=#{uid} channels=#{self.length}" @channels[uid][0].unsubscribe(sid) if @channels[uid] @channels[uid][1] -= 1 if @channels[uid][1] <= 0 @channels.delete(uid) redis.srem(REDIS_CONNECTION_SET, uid) end end |