@screeps/engine
Version:
This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.
80 lines (74 loc) • 2.62 kB
JavaScript
var _ = require('lodash'),
messages = {},
commandResults = {},
visual = {};
exports.makeConsole = function(id, sandboxedFunctionWrapper) {
messages[id] = [];
commandResults[id] = [];
visual[id] = {};
return Object.create(null, {
log: {
writable: true,
configurable: true,
value: sandboxedFunctionWrapper(function() {
if(typeof self != 'undefined' && self.navigator.userAgent) {
self['console']['log'].apply(console, arguments);
}
messages[id].push(
_.map(arguments, (i) => {
if(i && i.toString) return i.toString();
if(typeof i === 'undefined') return 'undefined';
return JSON.stringify(i);
}).join(' '));
})
},
commandResult: {
value: sandboxedFunctionWrapper(function(message) {
if(typeof self != 'undefined' && self.navigator.userAgent) {
self['console']['log'].call(console, message);
}
commandResults[id].push(String(message));
})
},
addVisual: {
value: sandboxedFunctionWrapper(function(roomName, data) {
roomName = roomName || "";
visual[id][roomName] = visual[id][roomName] || "";
if(visual[id][roomName].length > 500*1024) {
throw new Error(`RoomVisual size in room ${roomName} has exceeded 500 KB limit`);
}
visual[id][roomName] += JSON.stringify(data)+"\n";
})
},
getVisualSize: {
value: sandboxedFunctionWrapper(function(roomName) {
roomName = roomName || "";
if(!visual[id][roomName]) {
return 0;
}
return visual[id][roomName].length;
})
},
clearVisual: {
value: sandboxedFunctionWrapper(function(roomName) {
roomName = roomName || "";
visual[id][roomName] = "";
})
}
});
};
exports.getMessages = function(id) {
var result = messages[id];
messages[id] = [];
return result;
};
exports.getCommandResults = function(id) {
var result = commandResults[id];
commandResults[id] = [];
return result;
};
exports.getVisual = function(id) {
var result = visual[id];
visual[id] = [];
return result;
};