Skip to content
This repository has been archived by the owner on Jul 23, 2023. It is now read-only.

Commit

Permalink
Exclude messages from being sent to specified socket_id
Browse files Browse the repository at this point in the history
  • Loading branch information
pairing committed May 12, 2015
1 parent f93234c commit a5e9ffb
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
10 changes: 5 additions & 5 deletions lib/slanger/api_server.rb
Expand Up @@ -26,7 +26,7 @@ class ApiServer < Sinatra::Base
data = JSON.parse(request.body.read.tap{ |s| s.force_encoding('utf-8')})

# Send event to each channel
data["channels"].each { |channel| publish(channel, data['name'], data['data']) }
data["channels"].each { |channel| publish(channel, data['name'], data['data'], data['socket_id']) }

status 202
return {}.to_json
Expand All @@ -41,12 +41,12 @@ class ApiServer < Sinatra::Base
return {}.to_json
end

def payload(channel, event, data)
def payload(channel, event, data, socket_id)
{
event: event,
data: data,
channel: channel,
socket_id: params[:socket_id]
socket_id: socket_id
}.select { |_,v| v }.to_json
end

Expand All @@ -57,8 +57,8 @@ def authenticate
authenticate { |key| Signature::Token.new key, Slanger::Config.secret }
end

def publish(channel, event, data)
Slanger::Redis.publish(channel, payload(channel, event, data))
def publish(channel, event, data, socket_id)
Slanger::Redis.publish(channel, payload(channel, event, data, socket_id))
end
end
end
18 changes: 18 additions & 0 deletions spec/integration/channel_spec.rb
Expand Up @@ -22,6 +22,24 @@
last_event: 'an_event', last_data: { some: "Mit Raben Und Wölfen" }.to_json
end

it 'does not send message to excluded sockets' do
messages = em_stream do |websocket, messages|
case messages.length
when 1
websocket.callback { websocket.send({ event: 'pusher:subscribe', data: { channel: 'MY_CHANNEL'} }.to_json) }
when 2
socket_id = JSON.parse(messages.first["data"])["socket_id"]
Pusher['MY_CHANNEL'].trigger 'not_excluded_socket_event', { some: "Mit Raben Und Wölfen" }
Pusher['MY_CHANNEL'].trigger 'excluded_socket_event', { some: "Mit Raben Und Wölfen" }, socket_id
when 3
EM.stop
end
end

messages.should have_attributes connection_established: true, id_present: true,
last_event: 'not_excluded_socket_event', last_data: { some: "Mit Raben Und Wölfen" }.to_json
end

it 'enforces one subcription per channel, per socket' do
messages = em_stream do |websocket, messages|
case messages.length
Expand Down

0 comments on commit a5e9ffb

Please sign in to comment.