var logger = require("pomelo-logger").getLogger(__filename); const userDao = require("../../../dao/userDao"); const Code = require("../../../lib/code"); module.exports = function (app) { return new Handler(app); }; var Handler = function (app) { this.app = app; this.channelService = this.app.get("channelService"); }; /** @api {post} connector.entryHandler.entry entry 建立连接-登录-入口 * * @apiGroup connector * * @apiParam {String} uid 用户ID * @apiParam {String} sid Game Session ID * * @apiSuccess {Number} code 状态码 * @apiSuccess {String} msg 消息 * * @apiSuccessExample {json} Success-Response: * { * "code": 200, * "msg": "game server is ok." * } * * @apiErrorExample {json} Error-Response: * { * "code": 500 * "error": true * } * */ Handler.prototype.entry = function (msg, session, next) { const uid = msg.uid; const sessionService = this.app.get("sessionService"); const serverId = this.app.serverId; console.log(`-------entry ${session.id} : ${uid}`); // 重复登录检查 const oldSession = sessionService.getByUid(uid); if (oldSession) { oldSession.forEach(element => { sessionService.kick(element.uid, ()=>{ console.log(`-------kicked ${element.id} : ${element.uid}`) }) }); } (bindUser.bind(this))(); async function bindUser() { const user = await userDao.getUserInfo(msg.uid); console.log(`-------bind ${session.id} : ${uid}`); session.bind(uid, () => { session.set("uid", uid); session.set("userInfo", user); session.set("sid", serverId); session.on("closed", onUserLeave.bind(this, this.app)); session.pushAll((err) => { if (err) { logger.error("error: %j", err.stack); next(null, { code: 500, error: true }); return; } next(null, { code: 200, msg: "game server is ok." }); }); }); } }; /** @api {post} connector.entryHandler.heartbeat heartbeat 心跳 * @apiGroup connector * * @apiSuccessExample {json} Success-Response: * { * } * */ Handler.prototype.heartbeat = function (msg, session, next) { next(null, {}); } var onUserLeave = function (app, session, reason) { if (!session || !session.uid) { return; } logger.debug(`onUserLeave ${session.id} : ${session.uid}`); app.rpc.chat.chatRemote.kick(session, session.uid, session.get('sid'), null); }; /** * Publish route for mqtt connector. * * @param {Object} msg request message * @param {Object} session current session object * @param {Function} next next step callback * @return {Void} */ Handler.prototype.publish = function (msg, session, next) { var result = { topic: "publish", payload: JSON.stringify({ code: 200, msg: "publish message is ok." }), }; next(null, result); }; /** * Subscribe route for mqtt connector. * * @param {Object} msg request message * @param {Object} session current session object * @param {Function} next next step callback * @return {Void} */ Handler.prototype.subscribe = function (msg, session, next) { var result = { topic: "subscribe", payload: JSON.stringify({ code: 200, msg: "subscribe message is ok." }), }; next(null, result); };