merged master

This commit is contained in:
Brian Smith 2012-10-07 00:59:55 -04:00
commit 4333a1d91f
3 changed files with 48 additions and 48 deletions

View File

@ -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

View File

@ -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

View File

@ -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