2023-05-08 20:02:52 +08:00

128 lines
3.2 KiB
JavaScript

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);
};