mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-13 22:49:51 -04:00
Simulator fixes!
Fixed memory bug with aggregation framework
This commit is contained in:
parent
97d4017869
commit
7ddd84248b
3 changed files with 34 additions and 19 deletions
|
@ -102,6 +102,7 @@ module.exports = class Simulator extends CocoClass
|
|||
sendResultsBackToServer: (results) =>
|
||||
@trigger 'statusUpdate', 'Simulation completed, sending results back to server!'
|
||||
console.log "Sending result back to server!"
|
||||
|
||||
$.ajax
|
||||
url: "/queue/scoring"
|
||||
data: results
|
||||
|
@ -217,7 +218,11 @@ module.exports = class Simulator extends CocoClass
|
|||
createSpellThang: (thang, method, spellKey) ->
|
||||
@spells[spellKey].thangs ?= {}
|
||||
@spells[spellKey].thangs[thang.id] ?= {}
|
||||
@spells[spellKey].thangs[thang.id].aether = @createAether @spells[spellKey].name, method
|
||||
spellTeam = @task.getSpellKeyToTeamMap()[spellKey]
|
||||
playerTeams = @task.getPlayerTeams()
|
||||
useProtectAPI = true
|
||||
if spellTeam not in playerTeams then useProtectAPI = false
|
||||
@spells[spellKey].thangs[thang.id].aether = @createAether @spells[spellKey].name, method, useProtectAPI
|
||||
|
||||
transpileSpell: (thang, spellKey, methodName) ->
|
||||
slugifiedThangID = _.string.slugify thang.id
|
||||
|
@ -229,10 +234,10 @@ module.exports = class Simulator extends CocoClass
|
|||
console.log "Couldn't transpile #{spellKey}:\n#{source}\n", e
|
||||
aether.transpile ''
|
||||
|
||||
createAether: (methodName, method) ->
|
||||
createAether: (methodName, method, useProtectAPI) ->
|
||||
aetherOptions =
|
||||
functionName: methodName
|
||||
protectAPI: true
|
||||
protectAPI: useProtectAPI
|
||||
includeFlow: false
|
||||
requiresThis: true
|
||||
yieldConditionally: false
|
||||
|
@ -249,6 +254,7 @@ module.exports = class Simulator extends CocoClass
|
|||
class SimulationTask
|
||||
constructor: (@rawData) ->
|
||||
console.log 'Simulating sessions', (session for session in @getSessions())
|
||||
@spellKeyToTeamMap = {}
|
||||
|
||||
getLevelName: ->
|
||||
levelName = @rawData.sessions?[0]?.levelID
|
||||
|
@ -273,21 +279,31 @@ class SimulationTask
|
|||
getReceiptHandle: -> @rawData.receiptHandle
|
||||
|
||||
getSessions: -> @rawData.sessions
|
||||
|
||||
getSpellKeyToTeamMap: -> @spellKeyToTeamMap
|
||||
|
||||
getPlayerTeams: -> _.pluck @rawData.sessions, 'team'
|
||||
|
||||
generateSpellKeyToSourceMap: ->
|
||||
playerTeams = _.pluck @rawData.sessions, 'team'
|
||||
spellKeyToSourceMap = {}
|
||||
for session in @rawData.sessions
|
||||
teamSpells = session.teamSpells[session.team]
|
||||
allTeams = _.keys session.teamSpells
|
||||
nonPlayerTeams = _.difference allTeams, playerTeams
|
||||
for team in allTeams
|
||||
for spell in session.teamSpells[team]
|
||||
@spellKeyToTeamMap[spell] = team
|
||||
for nonPlayerTeam in nonPlayerTeams
|
||||
teamSpells = teamSpells.concat(session.teamSpells[nonPlayerTeam])
|
||||
teamCode = {}
|
||||
|
||||
for thangName, thangSpells of session.code
|
||||
for spellName, spell of thangSpells
|
||||
fullSpellName = [thangName,spellName].join '/'
|
||||
if _.contains(teamSpells, fullSpellName)
|
||||
teamCode[fullSpellName]=spell
|
||||
|
||||
|
||||
_.merge spellKeyToSourceMap, teamCode
|
||||
commonSpells = session.teamSpells["common"]
|
||||
_.merge spellKeyToSourceMap, _.pick(session.code, commonSpells) if commonSpells?
|
||||
|
||||
|
||||
spellKeyToSourceMap
|
||||
|
|
|
@ -240,9 +240,6 @@ LevelHandler = class LevelHandler extends Handler
|
|||
original: level.original.toString()
|
||||
majorVersion: level.version.major
|
||||
submitted:true
|
||||
|
||||
console.log sessionsQueryParameters
|
||||
|
||||
|
||||
query = Session
|
||||
.find(sessionsQueryParameters)
|
||||
|
@ -253,7 +250,6 @@ LevelHandler = class LevelHandler extends Handler
|
|||
return @sendDatabaseError res, err if err? or not resultSessions
|
||||
|
||||
teamSessions = _.groupBy resultSessions, 'team'
|
||||
console.log teamSessions
|
||||
sessions = []
|
||||
numberOfTeams = 0
|
||||
for team of teamSessions
|
||||
|
|
|
@ -36,7 +36,7 @@ module.exports.messagesInQueueCount = (req, res) ->
|
|||
|
||||
module.exports.addPairwiseTaskToQueueFromRequest = (req, res) ->
|
||||
taskPair = req.body.sessions
|
||||
addPairwiseTaskToQueue req.body.sessions (err, success) ->
|
||||
addPairwiseTaskToQueue req.body.sessions, (err, success) ->
|
||||
if err? then return errors.serverError res, "There was an error adding pairwise tasks: #{err}"
|
||||
sendResponseObject req, res, {"message":"All task pairs were succesfully sent to the queue"}
|
||||
|
||||
|
@ -113,7 +113,6 @@ module.exports.createNewTask = (req, res) ->
|
|||
updateSessionToSubmit
|
||||
fetchInitialSessionsToRankAgainst.bind(@, requestLevelMajorVersion, originalLevelID)
|
||||
generateAndSendTaskPairsToTheQueue
|
||||
|
||||
], (err, successMessageObject) ->
|
||||
if err? then return errors.serverError res, "There was an error submitting the game to the queue:#{err}"
|
||||
sendResponseObject req, res, successMessageObject
|
||||
|
@ -188,15 +187,16 @@ fetchInitialSessionsToRankAgainst = (levelMajorVersion, levelID, submittedSessio
|
|||
submittedCode:
|
||||
$exists: true
|
||||
team: opposingTeam
|
||||
|
||||
|
||||
sortParameters =
|
||||
totalScore: 1
|
||||
|
||||
limitNumber = 1
|
||||
|
||||
query = LevelSession.find(findParameters)
|
||||
.sort(sortParameters)
|
||||
.limit(limitNumber)
|
||||
query = LevelSession.aggregate [
|
||||
{$match: findParameters}
|
||||
{$sort: sortParameters}
|
||||
{$limit: limitNumber}
|
||||
]
|
||||
|
||||
query.exec (err, sessionToRankAgainst) ->
|
||||
callback err, sessionToRankAgainst, submittedSession
|
||||
|
@ -206,6 +206,8 @@ generateAndSendTaskPairsToTheQueue = (sessionToRankAgainst,submittedSession, cal
|
|||
taskPairs = generateTaskPairs(sessionToRankAgainst, submittedSession)
|
||||
sendEachTaskPairToTheQueue taskPairs, (taskPairError) ->
|
||||
if taskPairError? then return callback taskPairError
|
||||
console.log "Sent task pairs to the queue!"
|
||||
console.log taskPairs
|
||||
callback null, {"message": "All task pairs were succesfully sent to the queue"}
|
||||
|
||||
|
||||
|
@ -580,7 +582,8 @@ sendEachTaskPairToTheQueue = (taskPairs, callback) -> async.each taskPairs, send
|
|||
generateTaskPairs = (submittedSessions, sessionToScore) ->
|
||||
taskPairs = []
|
||||
for session in submittedSessions
|
||||
session = session.toObject()
|
||||
if session.toObject?
|
||||
session = session.toObject()
|
||||
teams = ['ogres','humans']
|
||||
opposingTeams = _.pull teams, sessionToScore.team
|
||||
if String(session._id) isnt String(sessionToScore._id) and session.team in opposingTeams
|
||||
|
|
Loading…
Reference in a new issue