diff --git a/app/lib/LevelLoader.coffee b/app/lib/LevelLoader.coffee index 2b22c98c7..a18d9cc82 100644 --- a/app/lib/LevelLoader.coffee +++ b/app/lib/LevelLoader.coffee @@ -91,18 +91,9 @@ module.exports = class LevelLoader extends CocoClass loadDependenciesForSession: (session) -> if me.id isnt session.get 'creator' session.patch = session.save = -> console.error "Not saving session, since we didn't create it." + @loadCodeLanguagesForSession session if session is @session - codeLanguage = session.get('codeLanguage') or me.get('aceConfig')?.language or 'python' - modulePath = "vendor/aether-#{codeLanguage}" - loading = application.moduleLoader?.load(modulePath) - if loading - @languageModuleResource = @supermodel.addSomethingResource 'language_module' - @listenTo application.moduleLoader, 'loaded', (e) -> - if e.id is modulePath - @languageModuleResource.markLoaded() - @stopListening application.moduleLoader @addSessionBrowserInfo session - # hero-ladder games require the correct session team in level:loaded team = @team ? @session.get('team') Backbone.Mediator.publish 'level:loaded', level: @level, team: team @@ -138,6 +129,19 @@ module.exports = class LevelLoader extends CocoClass if _.size(@sessionDependenciesRegistered) is 2 and @checkAllWorldNecessitiesRegisteredAndLoaded() @onWorldNecessitiesLoaded() + loadCodeLanguagesForSession: (session) -> + codeLanguages = _.uniq _.filter [session.get('codeLanguage') or 'python', session.get('submittedCodeLanguage')] + for codeLanguage in codeLanguages + do (codeLanguage) => + modulePath = "vendor/aether-#{codeLanguage}" + return unless application.moduleLoader?.load modulePath + languageModuleResource = @supermodel.addSomethingResource 'language_module' + onModuleLoaded = (e) -> + return unless e.id is modulePath + languageModuleResource.markLoaded() + @stopListening application.moduleLoader, 'loaded', onModuleLoaded # listenToOnce might work here instead, haven't tried + @listenTo application.moduleLoader, 'loaded', onModuleLoaded + addSessionBrowserInfo: (session) -> return unless me.id is session.get 'creator' return unless $.browser? diff --git a/app/schemas/models/level_session.coffee b/app/schemas/models/level_session.coffee index 2d4c74405..a4fca840e 100644 --- a/app/schemas/models/level_session.coffee +++ b/app/schemas/models/level_session.coffee @@ -286,7 +286,7 @@ _.extend LevelSessionSchema.properties, type: ['string', 'null'] # 'null' in case an opponent session got corrupted, don't care much here description: 'What submittedCodeLanguage the opponent used during the match' simulator: {type: 'object', description: 'Holds info on who simulated the match, and with what tools.'} - randomSeed: {type: 'integer', description: 'Stores the random seed that was used during this match.'} + randomSeed: {description: 'Stores the random seed that was used during this match.'} c.extendBasicProperties LevelSessionSchema, 'level.session' c.extendPermissionsProperties LevelSessionSchema, 'level.session' diff --git a/server/queues/scoring.coffee b/server/queues/scoring.coffee index 66a947ce8..9b895ec69 100644 --- a/server/queues/scoring.coffee +++ b/server/queues/scoring.coffee @@ -611,7 +611,7 @@ updateMatchesInSession = (matchObject, sessionID, callback) -> currentMatchObject.opponents = opponentsArray currentMatchObject.codeLanguage = matchObject.opponents[opponentsArray[0].sessionID].codeLanguage currentMatchObject.simulator = @clientResponseObject.simulator - currentMatchObject.randomSeed = @clientResponseObject.randomSeed + currentMatchObject.randomSeed = parseInt(@clientResponseObject.randomSeed or 0, 10) LevelSession.findOne {'_id': sessionID}, (err, session) -> session = session.toObject() currentMatchObject.playtime = session.playtime ? 0