UNPKG

@screeps/engine

Version:

This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.

89 lines (70 loc) 2.74 kB
#!/usr/bin/env node var q = require('q'), _ = require('lodash'), util = require('util'), utils = require('./utils'), driver = utils.getDriver(), C = driver.constants; function runUser(userId) { driver.config.emit('runnerLoopStage','runUser', userId); //driver.influxAccumulator.resetTime(); return driver.makeRuntime(userId) .then(saveResult, saveResult); function saveResult(runResult) { driver.config.emit('runnerLoopStage','saveResultStart', runResult); //driver.influxAccumulator.mark('endMakeRuntime'); if(runResult.console) { driver.sendConsoleMessages(userId, runResult.console); } if(runResult.error) { driver.sendConsoleError(userId, runResult.error); } //driver.resetUserRoomVisibility(userId); var promises = []; if(runResult.memory) { promises.push(driver.saveUserMemory(userId, runResult.memory)); } if(runResult.memorySegments) { promises.push(driver.saveUserMemorySegments(userId, runResult.memorySegments)); } if(runResult.interShardSegment) { promises.push(driver.saveUserMemoryInterShardSegment(userId, runResult.interShardSegment)); } if(runResult.intents) { promises.push(driver.saveUserIntents(userId, runResult.intents)); } return q.all(promises) .then(() => { driver.config.emit('runnerLoopStage','saveResultFinish', runResult); //driver.influxAccumulator.mark('saveUser'); }) } } driver.connect('runner') .then(() => driver.queue.create('users', 'read')) .catch((error) => { console.error('Error connecting to driver:', error); process.exit(1); }) .then(_usersQueue => { var usersQueue = _usersQueue; driver.startLoop('runner', function() { var userId, fetchedUserId; driver.config.emit('runnerLoopStage','start'); return usersQueue.fetch() .then((_userId) => { userId = fetchedUserId = _userId; return runUser(userId); }) .catch((error) => console.error('Error in runner loop:', _.isObject(error) && error.stack || error)) .then(() => usersQueue.markDone(fetchedUserId)) .finally(() => driver.config.emit('runnerLoopStage','finish', userId)); }); }); if(typeof self == 'undefined') { setInterval(() => { var rejections = q.getUnhandledReasons(); rejections.forEach((i) => console.error('Unhandled rejection:', i)); q.resetUnhandledRejections(); }, 1000); }