目标:在简单的部署基础上,进一步提升需求,新用户注册,在数据表user中添加一条数据。
一、在数据库中新建一个table ,命名为user。
二、公共文件和配置文件,一些会被引用的组件
修改shared里面mysql配置文件,之后再game-server/app/dao下配置好dao-pool.js和mysql.js。
修改servers.json
{
"development":{
"connector":[
{"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "clientPort": 3050, "frontend": true},
{"id":"connector-server-2", "host":"127.0.0.1", "port":4051, "clientPort": 3051, "frontend": true},
{"id":"connector-server-3", "host":"127.0.0.1", "port":4052, "clientPort": 3052, "frontend": true}
],
"area":[
{"id":"area-server-1", "host":"127.0.0.1", "port":3160},
{"id":"area-server-2", "host":"127.0.0.1", "port":3161},
],
"auth":[
{"id":"auth-server-1", "host":"127.0.0.1","port":3170}
],
"gate":[
{"id": "gate-server-1", "host": "127.0.0.1", "clientPort": 3014, "frontend": true}
]
},
"production":{
"connector":[
{"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "clientPort": 3050, "frontend": true},
{"id":"connector-server-2", "host":"127.0.0.1", "port":4051, "clientPort": 3051, "frontend": true},
{"id":"connector-server-3", "host":"127.0.0.1", "port":4052, "clientPort": 3052, "frontend": true}
],
"area":[
{"id":"area-server-1", "host":"127.0.0.1", "port":3160},
{"id":"area-server-2", "host":"127.0.0.1", "port":3161},
],
"auth":[
{"id":"auth-server-1","host":"127.0.0.1","port":3170}
],
"gate":[
{"id": "gate-server-1", "host": "127.0.0.1", "clientPort": 3014, "frontend": true}
]
}
}
修改adminServer.json
[{
"type": "connector",
"token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
}, {
"type": "area",
"token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
},{
"type": "gate",
"token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
},{
"type": "auth",
"token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
}
]
进入shared文件夹,新建code.js
module.exports ={
OK: 200,
FAIL:500,
ENTRY:{
FA_TOKEN_INVALID: 1001,
FA_TOKEN_EXPIRE: 1002,
FA_USER_NOT_EXIST: 1003,
},
GATE:{
FA_NO_SERVER_AVAILABLE: 2001,
},
}
进入game-server/app,新建consts文件夹,新建consts.js
module.exports ={
RES_CODE:{
SUC_OK :1,
ERR_FAIL :-1,
ERR_USER_NOT_LOGINED :-2,
ERR_CHANNEL_DESTROYED :-10,
ERR_SESSION_NOT_EXIST :-11,
ERR_CHANNEL_DUPLICATE :-12,
ERR_CHANNEL_NOT_EXIST :-13
},
MYSQL : {
ERROR_DUP_ENTRY: 1062
},
MESSSAGE:{
RES:200,
ERR:500,
PUSH:600
},
//SYS RETURN
OK: 1,
FAILED: 0,
// YES/NO
YES: 1,
NO: 0,
DEFAULT_NAME: ''
}
进入game-server/app/util,新建utils.js
var utils = module.exports;
// control variable of func "myPrint"
var isPrintFlag = false;
// var isPrintFlag = true;
/**
* Check and invoke callback function
*/
utils.invokeCallback = function(cb) {
if(!!cb && typeof cb === 'function') {
cb.apply(null, Array.prototype.slice.call(arguments, 1));
}
};
/**
* clone an object
*/
utils.clone = function(origin) {
if(!origin) {
return;
}
var obj = {};
for(var f in origin) {
if(origin.hasOwnProperty(f)) {
obj[f] = origin[f];
}
}
return obj;
};
utils.size = function(obj) {
if(!obj) {
return 0;
}
var size = 0;
for(var f in obj) {
if(obj.hasOwnProperty(f)) {
size++;
}
}
return size;
};
// print the file name and the line number ~ begin
function getStack(){
var orig = Error.prepareStackTrace;
Error.prepareStackTrace = function(_, stack) {
return stack;
};
var err = new Error();
Error.captureStackTrace(err, arguments.callee);
var stack = err.stack;
Error.prepareStackTrace = orig;
return stack;
}
function getFileName(stack) {
return stack[1].getFileName();
}
function getLineNumber(stack){
return stack[1].getLineNumber();
}
utils.myPrint = function() {
if (isPrintFlag) {
var len = arguments.length;
if(len <= 0) {
return;
}
var stack = getStack();
var aimStr = '\'' + getFileName(stack) + '\' @' + getLineNumber(stack) + ' :\n';
for(var i = 0; i < len; ++i) {
aimStr += arguments[i] + ' ';
}
console.log('\n' + aimStr);
}
};
// print the file name and the line number ~ end
三、在game-server/app文件夹下新建domain文件夹,用来存放服务器端逻辑代码,逻辑代码主要用来完成具体的业务逻辑。在domain新建user.js 用来创建user对象
/**
*Module dependencies
*/
var util = require('util');
/**
* Initialize a new 'User' with the given 'opts'.
*
* @param {Object} opts 与数据库user的列一样
* @api public
*/
var User = function(opts){
this.id=opts.id;
this.userName=opts.userName;
this.password=opts.password;
this.loginCount=opts.loginCount;
this.lastLoginTime=opts.lastLoginTime;
}
/**
* Expose 'user' constructor
*/
module.exports = User;
User.prototype.toJSON = function(){
return {
id: this.uid,
userName: this.userName,
password: this.password,
loginCount: this.loginCount,
lastLoginTime: this.lastLoginTime
}
}
在domain下新建area.js
var logger = require('pomelo-logger').getLogger(__filename);
var exp = module.exports;
var users={};
exp.addUser= function(user){
loggers.debugger('area.addUser:', user.uid);
users[user.uid]=user;
};
exp.delUser = function(uid){
loggers.debug('area.delUser:', uid);
delete users[uid];
}
exp.getUser = function(uid){
return users[uid];
}
待续。。。