scalra
Version:
node.js framework to prototype and scale rapidly
92 lines (72 loc) • 2.61 kB
JavaScript
//
//
// app.js
//
// App Management
//
// history:
// 2011-05-27 nexttick issue
// 2011-07-20 更換 fifo queue algorithm (http://code.stephenmorley.org/javascript/queues/)
// 2011-08-17 tmdata.socket.recvFunc() 的 emitEvent 拒絕處理 event, 導致 event 在 l_myEventPool 無法刪除
// 2012-04-22 rename to aereGameFrontier from aereGameConnector
// 2012-05-26 rename to aereAppFrontier from aereGameFrontier
//
// 2012-06-25 initial version as app_manager (rename from aereAppFrontier)
// (extracted from aere_app_conn, aere_app_frontier, aere_app_handler)
//
// 2014-04-26 remove global usage of SR.AppHandler
// game server list (server name, game type, no) indexed by serverID
// go to server (by serverID)
// 接收 gameapp data 之後交由 icLobbyFrontier event 處理
// icAppManager eventSender 用於接收 aereLobbyFrontier 之訊息再丟給指定的 aereGame app
//-----------------------------------------
// define local variables
//
//-----------------------------------------
//-----------------------------------------
// define local function
//
//-----------------------------------------
//
// app connections
//
//-----------------------------------------
// frontier object
var l_appManager = undefined;
var l_appManagerHandler = require('./app_manager_handler');
//-----------------------------------------
// NOTE: handler may also contain methods to handle customized procedure at app manager
// when user connect/disconnect to game apps
// TODO: not a clean way to do this
exports.init = function (manager_port, onDone) {
// create Listener object
// NOTE: we do not provide 'path', so there's not dynamic reload for AppManager's handlers
l_appManager = new SR.Listener({
name: 'manager', // to identify event handler set
port: manager_port,
conn_module: SR.AppConn
});
// add default handler for app functions
SR.Handler.add(l_appManagerHandler, 'manager');
// execute all the steps for running a server
l_appManager.init(onDone);
};
// NOTE: all the stop steps will be executed when the dispose() of the frontier is called
// function to shutdown the game frontier externally
exports.dispose = function (onDone) {
if (l_appManager) {
l_appManager.dispose(function () {
l_appManager = undefined;
UTIL.safeCall(onDone);
});
} else
UTIL.safeCall(onDone);
};
// shutdown lobby externally (from monitor server)
exports.stopLobby = function () {
if (SR.Settings.FRONTIER !== undefined) {
SR.Settings.FRONTIER.dispose(function () {
LOG.warn('frontier stopped', 'SR.AppManager');
});
}
};