merged master
This commit is contained in:
commit
4333a1d91f
|
|
@ -430,13 +430,13 @@ module JamWebsockets
|
|||
|
||||
handle_heartbeat(client_msg.heartbeat, client)
|
||||
|
||||
elsif client_msg.type == ClientMessage::Type::LOGIN_JAM_SESSION
|
||||
elsif client_msg.type == ClientMessage::Type::LOGIN_MUSIC_SESSION
|
||||
|
||||
handle_join_jam_session(client_msg.login_jam_session, client)
|
||||
handle_join_music_session(client_msg.login_music_session, client)
|
||||
|
||||
elsif client_msg.type == ClientMessage::Type::LEAVE_JAM_SESSION
|
||||
elsif client_msg.type == ClientMessage::Type::LEAVE_MUSIC_SESSION
|
||||
|
||||
handle_leave_jam_session(client_msg.leave_jam_session, client)
|
||||
handle_leave_music_session(client_msg.leave_music_session, client)
|
||||
|
||||
else
|
||||
raise SessionError, "unknown message type '#{client_msg.type}' for #{client_msg.target}-directed message"
|
||||
|
|
@ -507,14 +507,14 @@ module JamWebsockets
|
|||
connection.save
|
||||
end
|
||||
|
||||
def handle_join_jam_session(join_jam_session, client)
|
||||
# verify that the current user has the rights to actually join the jam session
|
||||
def handle_join_music_session(join_music_session, client)
|
||||
# verify that the current user has the rights to actually join the music session
|
||||
context = @clients[client]
|
||||
|
||||
session_id = join_jam_session.jam_session
|
||||
session_id = join_music_session.music_session
|
||||
|
||||
begin
|
||||
session = access_jam_session?(session_id, context.user)
|
||||
session = access_music_session?(session_id, context.user)
|
||||
@log.debug "user #{context} joining new session #{session}"
|
||||
@semaphore.synchronize do
|
||||
old_session = context.session
|
||||
|
|
@ -528,14 +528,14 @@ module JamWebsockets
|
|||
rescue => e
|
||||
# send back a failure ack and bail
|
||||
@log.debug "client requested non-existent session. client:#{client.request['origin']} user:#{context.user.email}"
|
||||
login_jam_session = @message_factory.login_jam_session_ack(true, e.to_s)
|
||||
send_to_client(client, login_jam_session)
|
||||
login_music_session = @message_factory.login_music_session_ack(true, e.to_s)
|
||||
send_to_client(client, login_music_session)
|
||||
return
|
||||
end
|
||||
|
||||
# respond with LOGIN_JAM_SESSION_ACK to let client know it was successful
|
||||
login_jam_session = @message_factory.login_jam_session_ack(false, nil)
|
||||
send_to_client(client, login_jam_session)
|
||||
# respond with LOGIN_MUSIC_SESSION_ACK to let client know it was successful
|
||||
login_music_session = @message_factory.login_music_session_ack(false, nil)
|
||||
send_to_client(client, login_music_session)
|
||||
|
||||
# send 'new client' message to other members in the session
|
||||
handle_session_directed(session_id,
|
||||
|
|
@ -543,7 +543,7 @@ module JamWebsockets
|
|||
client)
|
||||
end
|
||||
|
||||
def handle_leave_jam_session(leave_jam_session, client)
|
||||
def handle_leave_music_session(leave_music_session, client)
|
||||
|
||||
context = @clients[client]
|
||||
|
||||
|
|
@ -583,18 +583,18 @@ module JamWebsockets
|
|||
end
|
||||
end
|
||||
|
||||
def access_jam_session?(jam_session_id, user)
|
||||
jam_session = JamSession.find_by_id(jam_session_id)
|
||||
def access_music_session?(music_session_id, user)
|
||||
music_session = MusicSession.find_by_id(music_session_id)
|
||||
|
||||
if jam_session.nil?
|
||||
if music_session.nil?
|
||||
raise SessionError, 'specified session not found'
|
||||
end
|
||||
|
||||
if !jam_session.access? user
|
||||
if !music_session.access? user
|
||||
raise SessionError, 'not allowed to join the specified session'
|
||||
end
|
||||
|
||||
return jam_session
|
||||
return music_session
|
||||
end
|
||||
|
||||
def handle_session_directed(session_id, client_msg, client)
|
||||
|
|
@ -604,7 +604,7 @@ module JamWebsockets
|
|||
# by not catching any exception here, this will kill the connection
|
||||
# if for some reason the client is trying to send to a session that it doesn't
|
||||
# belong to
|
||||
session = access_jam_session?(session_id, context.user)
|
||||
session = access_music_session?(session_id, context.user)
|
||||
|
||||
@log.debug "publishing to session #{session} from client_id #{client.client_id}"
|
||||
# put it on the topic exchange for sessions
|
||||
|
|
|
|||
|
|
@ -10,11 +10,11 @@ FactoryGirl.define do
|
|||
end
|
||||
end
|
||||
|
||||
factory :jam_session, :class => JamRuby::JamSession do
|
||||
sequence(:name) { |n| "Jam Session #{n}" }
|
||||
factory :music_session, :class => JamRuby::MusicSession do
|
||||
sequence(:description) { |n| "Jam Session #{n}" }
|
||||
end
|
||||
|
||||
factory :jam_session_member, :class => JamRuby::JamSessionMember do
|
||||
|
||||
factory :music_session_client, :class => JamRuby::MusicSessionClient do
|
||||
ip_address "1.1.1.1"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -58,16 +58,16 @@ def login(router, user, password)
|
|||
# first log in
|
||||
client.onmsgblock.call login.to_s
|
||||
|
||||
# then join jam session
|
||||
# then join music session
|
||||
return client
|
||||
end
|
||||
|
||||
def login_jam_session(router, client, jam_session)
|
||||
def login_music_session(router, client, music_session)
|
||||
message_factory = MessageFactory.new
|
||||
login_jam_session = message_factory.login_jam_session(jam_session.id)
|
||||
login_ack = message_factory.login_jam_session_ack(false, nil);
|
||||
login_music_session = message_factory.login_music_session(music_session.id)
|
||||
login_ack = message_factory.login_music_session_ack(false, nil);
|
||||
router.should_receive(:send_to_client).with(client, login_ack)
|
||||
client.onmsgblock.call login_jam_session.to_s
|
||||
client.onmsgblock.call login_music_session.to_s
|
||||
end
|
||||
|
||||
|
||||
|
|
@ -182,44 +182,44 @@ describe Router do
|
|||
end
|
||||
|
||||
|
||||
it "should allow jam_session_join of valid user", :mq => true do
|
||||
it "should allow music_session_join of valid user", :mq => true do
|
||||
|
||||
user1 = FactoryGirl.create(:user) # in the jam session
|
||||
user2 = FactoryGirl.create(:user) # in the jam session
|
||||
user3 = FactoryGirl.create(:user) # not in the jam session
|
||||
user1 = FactoryGirl.create(:user) # in the music session
|
||||
user2 = FactoryGirl.create(:user) # in the music session
|
||||
user3 = FactoryGirl.create(:user) # not in the music session
|
||||
|
||||
jam_session = FactoryGirl.create(:jam_session, :creator => user1)
|
||||
music_session = FactoryGirl.create(:music_session, :creator => user1)
|
||||
|
||||
jam_session_member1 = FactoryGirl.create(:jam_session_member, :user => user1, :jam_session => jam_session)
|
||||
jam_session_member2 = FactoryGirl.create(:jam_session_member, :user => user2, :jam_session => jam_session)
|
||||
music_session_member1 = FactoryGirl.create(:music_session_client, :user => user1, :music_session => music_session)
|
||||
music_session_member2 = FactoryGirl.create(:music_session_client, :user => user2, :music_session => music_session)
|
||||
|
||||
# make a jam_session and define two members
|
||||
# make a music_session and define two members
|
||||
|
||||
# create client 1, log him in, and log him in to jam session
|
||||
# create client 1, log him in, and log him in to music session
|
||||
client1 = login(@router, user1, "foobar")
|
||||
login_jam_session(@router, client1, jam_session)
|
||||
login_music_session(@router, client1, music_session)
|
||||
end
|
||||
|
||||
it "should allow two valid subscribers to communicate with session-directed messages", :mq => true do
|
||||
|
||||
EventMachine.run do
|
||||
user1 = FactoryGirl.create(:user) # in the jam session
|
||||
user2 = FactoryGirl.create(:user) # in the jam session
|
||||
user1 = FactoryGirl.create(:user) # in the music session
|
||||
user2 = FactoryGirl.create(:user) # in the music session
|
||||
|
||||
jam_session = FactoryGirl.create(:jam_session, :creator => user1)
|
||||
music_session = FactoryGirl.create(:music_session, :creator => user1)
|
||||
|
||||
jam_session_member1 = FactoryGirl.create(:jam_session_member, :user => user1, :jam_session => jam_session)
|
||||
jam_session_member2 = FactoryGirl.create(:jam_session_member, :user => user2, :jam_session => jam_session)
|
||||
music_session_member1 = FactoryGirl.create(:music_session_client, :user => user1, :music_session => music_session)
|
||||
music_session_member2 = FactoryGirl.create(:music_session_client, :user => user2, :music_session => music_session)
|
||||
|
||||
# make a jam_session and define two members
|
||||
# make a music_session and define two members
|
||||
|
||||
|
||||
# create client 1, log him in, and log him in to jam session
|
||||
# create client 1, log him in, and log him in to music session
|
||||
client1 = login(@router, user1, "foobar")
|
||||
login_jam_session(@router, client1, jam_session)
|
||||
login_music_session(@router, client1, music_session)
|
||||
|
||||
client2 = login(@router, user2, "foobar")
|
||||
login_jam_session(@router, client2, jam_session)
|
||||
login_music_session(@router, client2, music_session)
|
||||
EM.stop
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue