From 7ff418473187d98b769b1f175e4b1ee485c483bf Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Sun, 23 Feb 2014 23:49:53 +0000 Subject: [PATCH 1/2] VRFS-808 Added call to initAfterConnect from loggedIn(); added timeout to repeated attempts in case of missing WSG login ack --- web/app/assets/javascripts/jamkazam.js | 1 + web/app/views/clients/index.html.erb | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/web/app/assets/javascripts/jamkazam.js b/web/app/assets/javascripts/jamkazam.js index 0db35ebe6..49311fecc 100644 --- a/web/app/assets/javascripts/jamkazam.js +++ b/web/app/assets/javascripts/jamkazam.js @@ -99,6 +99,7 @@ context.jamClient.OnLoggedIn(payload.user_id, payload.token); $.cookie('client_id', payload.client_id); + app.initAfterConnect(); heartbeatMS = payload.heartbeat_interval * 1000; logger.debug("jamkazam.js.loggedIn(): clientId now " + app.clientId + "; Setting up heartbeat every " + heartbeatMS + " MS"); diff --git a/web/app/views/clients/index.html.erb b/web/app/views/clients/index.html.erb index 869d84c16..b127e8944 100644 --- a/web/app/views/clients/index.html.erb +++ b/web/app/views/clients/index.html.erb @@ -103,9 +103,10 @@ JK.currentUserName = null; <% end %> - // Some things can't be initialized until we're connected. Put them here. function _initAfterConnect() { + if (this.didInitAfterConnect) return; + this.didInitAfterConnect = true var recordingManager = new JK.RecordingManager(); @@ -217,6 +218,7 @@ } JK.app = JK.JamKazam(); + JK.app.initAfterConnect = _initAfterConnect; // If no jamClient (when not running in native client) // create a fake one. @@ -241,12 +243,16 @@ // Run a check to see if we're logged in yet. Only after that should // we initialize the other screens. - // TODO: There should be a timeout, and a "could not connect" message. function testConnected() { + this.numCalls = (this.numCalls || 0) + 1; if (JK.clientId) { - _initAfterConnect(); + JK.app.initAfterConnect(); } else { - window.setTimeout(testConnected, 100); + if (50 <= this.numCalls) { // 5 second max + JK.notifyAlert('Server Error', 'Could not connect to server. Please try again later.') + } else { + window.setTimeout(testConnected, 100); + } } } testConnected(); From 4b91f4493cbec17ee00992979f7d681df18c03c4 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Mon, 24 Feb 2014 01:46:38 +0000 Subject: [PATCH 2/2] VRFS-773 added validation check to ensure users cannot connect to multiple music sessions unless they are admin --- .../jam_ruby/constants/validation_messages.rb | 1 + ruby/lib/jam_ruby/models/connection.rb | 11 +++++++ ruby/spec/jam_ruby/connection_manager_spec.rb | 32 ++++++++++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/ruby/lib/jam_ruby/constants/validation_messages.rb b/ruby/lib/jam_ruby/constants/validation_messages.rb index 4a308798b..8ab768503 100644 --- a/ruby/lib/jam_ruby/constants/validation_messages.rb +++ b/ruby/lib/jam_ruby/constants/validation_messages.rb @@ -48,6 +48,7 @@ module ValidationMessages INVITE_REQUIRED = "You must be invited to join this session" FANS_CAN_NOT_JOIN = "Fans can not join this session" CANT_JOIN_RECORDING_SESSION = "is currently recording" + CANT_JOIN_MULTIPLE_SESSIONS = 'You cannot join more than one music session' # recordings ALREADY_BEING_RECORDED = "already being recorded" diff --git a/ruby/lib/jam_ruby/models/connection.rb b/ruby/lib/jam_ruby/models/connection.rb index c1fbec61f..a090629d0 100644 --- a/ruby/lib/jam_ruby/models/connection.rb +++ b/ruby/lib/jam_ruby/models/connection.rb @@ -101,6 +101,17 @@ module JamRuby if music_session.is_recording? errors.add(:music_session, ValidationMessages::CANT_JOIN_RECORDING_SESSION) end + + unless user.admin? + num_sessions = Connection.where(:user_id => user_id) + .where(["(music_session_id IS NOT NULL) AND (aasm_state != ?)",EXPIRED_STATE.to_s]) + .count + if 0 < num_sessions + errors.add(:music_session, ValidationMessages::CANT_JOIN_MULTIPLE_SESSIONS) + return false; + end + end + return true end diff --git a/ruby/spec/jam_ruby/connection_manager_spec.rb b/ruby/spec/jam_ruby/connection_manager_spec.rb index 99bc51a4e..0c0211fc7 100644 --- a/ruby/spec/jam_ruby/connection_manager_spec.rb +++ b/ruby/spec/jam_ruby/connection_manager_spec.rb @@ -46,7 +46,6 @@ describe ConnectionManager do end it "can't create two client_ids of same value" do - client_id = "client_id1" user_id = create_user("test", "user1", "user1@jamkazam.com") @@ -425,5 +424,36 @@ describe ConnectionManager do assert_num_connections(client_id, 0) end + + it "join_music_session fails if user has music_session already active" do + user_id = create_user("test", "user11", "user11@jamkazam.com") + + user = User.find(user_id) + music_session = MusicSession.find(create_music_session(user_id)) + + client_id = Faker::Number.number(20) + @connman.create_connection(user_id, client_id, "1.1.1.1") + connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS) + + client_id = Faker::Number.number(20) + @connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address) + music_session = MusicSession.find(create_music_session(user_id)) + connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS) + + connection.errors.size.should == 1 + connection.errors.get(:music_session).should == [ValidationMessages::CANT_JOIN_MULTIPLE_SESSIONS] + + user.update_attribute(:admin, true) + client_id = Faker::Number.number(20) + @connman.create_connection(user_id, client_id, "1.1.1.1") + music_session = MusicSession.find(create_music_session(user_id)) + connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS) + client_id = Faker::Number.number(20) + @connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address) + music_session = MusicSession.find(create_music_session(user_id)) + connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS) + connection.errors.size.should == 0 + end + end