2023-04-13 17:43:34 +08:00

113 lines
2.6 KiB
JavaScript

var logger = require('pomelo-logger').getLogger(__filename);
const userDao = require('../../../dao/userDao');
module.exports = function(app) {
return new Handler(app);
};
var Handler = function(app) {
this.app = app;
};
/**
* @api {post} connector.entryHandler.entry 建立连接-登录-入口 entry
* @apiGroup connector
*
* @apiParam {String} uid 用户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}`);
// 重复登录检查
// if( !! sessionService.getByUid(uid)) {
// console.log(`-------kick ${session.id} : ${uid}`)
// sessionService.kick(uid, ()=>{
// console.log(`-------kicked ${session.id} : ${uid}`)
// bindUser();
// return;
// })
// }
bindUser();
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(null, 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.'});
})
});
}
};
var onUserLeave = function(app, session, reason) {
if (!session || !session.uid) {
return;
}
logger.debug(`onUserLeave ${session.id} : ${session.uid}`);
}
/**
* 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);
};