Giter VIP home page Giter VIP logo

treasures's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

treasures's Issues

about move

想了解下玩家移动的相关代码,然后。。。
msgHandler.js看到
// Handle move message
pomelo.on('onMove', function(data) {
var path = data.path;
var entity = app.getCurArea().getEntity(data.entityId);
if (!entity) {
console.error('no character exist for move!' + data.entityId);
return;
}

    var sprite = entity.getSprite();
    var sPos = sprite.getPosition();
    sprite.movePath([sPos, data.endPos]);
  });

这只是注册一个onMove,猜测是服务器端广播一个玩家的移动时所调用,所以在服务器端playerHandler中找到代码:
/**

  • Player moves. Player requests move with the given movePath.

  • Handle the request from client, and response result to client
    *

  • @param {Object} msg

  • @param {Object} session

  • @param {Function} next

  • @api public
    */
    handler.move = function(msg, session, next) {
    var endPos = msg.targetPos;
    var playerId = session.get('playerId');
    var player = area.getPlayer(playerId);
    if (!player) {
    logger.error('Move without a valid player ! playerId : %j', playerId);
    next(new Error('invalid player:' + playerId), {
    code: consts.MESSAGE.ERR
    });
    return;
    }

    var target = area.getEntity(msg.target);
    player.target = target ? target.entityId : null;

    if (endPos.x > area.width() || endPos.y > area.height()) {
    logger.warn('The path is illigle!! The path is: %j', msg.path);
    next(new Error('fail to move for illegal path'), {
    code: consts.MESSAGE.ERR
    });

    return;
    }

    var action = new Move({
    entity: player,
    endPos: endPos,
    });

    if (area.timer().addAction(action)) {
    next(null, {
    code: consts.MESSAGE.RES,
    sPos: player.getPos()
    });

    area.getChannel().pushMessage({route: 'onMove', entityId: player.entityId, endPos: endPos});
    }
    };
    其中area.getChannel().pushMessage({route: 'onMove', entityId: player.entityId, endPos: endPos});正是广播移动的代码。既然要触发handler.move,客户端必然会调用这个方法,然后在clientManager.js中找到
    function pick(args) {
    var targetId = args.id;
    var entity = app.getCurArea().getEntity(targetId);

    if (entity.type === EntityType.TREASURE) {
    pomelo.notify('area.playerHandler.move', {targetPos: {x: entity.x, y: entity.y}, target: targetId});
    }
    }

然后exports.pick = pick; pick又被公开出去,然后在componentAdder.js中找到调用pick的
var eventAction = function (event, node) {
if (event.type === 'mouseClicked') {
clientManager.pick({id: node.id});
}
};

调用eventAction的addComponentToEntity
/**
* add mouseClick component to entity
* @param {Object} entity
*/
var addComponentToEntity = function(entity) {
//add mouseButtonEvent to entities
var clickComponentEntity = new MouseButtonEventComponent({
pipe: area.gLevel.sysPipe(),
decider: area.scene.queryDecider('mouseButtonDecider'),
callback: eventAction
});
var node = entity.getSprite().curNode;
node.addComponent('mouseButtonEventComponent', clickComponentEntity);
};

this.addComponentTo = function(entity) {
addComponentToEntity(entity);
};

然后又把ComponentAdder公开出去
module.exports = ComponentAdder;
然后在app.js中看到 var ComponentAdder = require('componentAdder');
但是却没有任何调用,这样一来整个流程的源头就没有了,迷茫。。。

treasures demo question

这个demo想说这个demo对于我这种初学者相当好,文档也比以前的给力,嗯,感谢一下网易。
然后今晚在文档的帮助下对源代码小小的分析了一下,基本都能看的懂,但是还是遇到了一些疑问。我看的时候记录了下来,请高手解答:
• Main.js
o //主动调用main函数 ---------在哪被调用,只是公开main出去啊?
o exports.main = main;
o
• next(null, {code: Code.FAIL}); 对应的next在哪 和node.js的next是否一样,一样的话方法名应该一样

• dispatcher.js
o var index = Math.abs(crc.crc32(uid)) % connectors.length;
o return connectors[index];
o 猜测其功能是根据uid和connectors服务器的个数将其分派到其中一个connectors服务器具体逻辑不懂

• Main.js
o pomelo.disconnect();为什么要中断连接

• entryHandler.js
o session api找不到,请大神不要见笑--!

o area.js中exp.addEntity方法getChannel().add(e.id, e.serverId);将玩家这样加入到channel中后,怎么广播channel中所有的玩家更新,找不到执行channel.pushMessage({route: 'addEntities', entities: added});这句代码的地方。貌似没有执行entityUpdate方法

not support pomelo 0.4.1?

我把package.json 改为 0.4.1 然后运行。。

进入场景以后,尝试移动人物,人物走了几步路就黑屏了,查看日志都是报以下的错误。

[2013-06-05 05:50:22.427] [INFO] [default] - �[33m[2013-06-05 05:50:22.426] [WARN] console - �[39mencode msg failed! key : "rankUpdate", msg : {"route":"rankUpdate","entities":[]}

gate负载均衡代码有错误,作者改完没有测试么?

var crc = require('crc');

module.exports.dispatch = function(uid, connectors) {
var index = Math.abs(crc.crc32(uid)) % connectors.length;
return connectors[index];
};

crc.crc32(uid) 返回的是十六进制的字符串,应该写成parseInt(crc.crc32(uid),16)

app/util/dispatcher.js文件的bug

var index = Math.abs(parseInt(crc.crc32(uid)),16) % connectors.length;这个是不是写错了,有的用户名输进去点开始游戏无反应,应该改为
module.exports.dispatch = function(uid, connectors) {
var index = Math.abs(parseInt(crc.crc32(uid),16)) % connectors.length;
return connectors[index];
};

請問如何針對某個進程調試?

對於master服務器,我用這個方式啟動可以用node.js自帶的debugger調試:
node debug /var/devil/wsp/node/treasures-master/game-server/app.js env=development
但對於在master中啟動的其他服務器,例如connector,可以如何調試呢?
我試過在master啟動完所有服務器進程了,kill其中一個connector進程,然後再用上面的啟動方式手工啟動被kill掉的進程,但啟動完後會拋以下錯誤:
< info: socket.io started
< Caught exception: Error: listen EADDRINUSE
< at errnoException (net.js:769:11)
< at Server._listen2 (net.js:909:14)
< at listen (net.js:936:10)
< at Server.listen (net.js:985:5)
< at Object.exports.listen (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/socket.io/lib/socket.io.js:74:12)
< at pro.listen (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/pomelo-rpc/lib/rpc-server/acceptors/ws-acceptor.js:29:21)
< at pro.start (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/pomelo-rpc/lib/rpc-server/gateway.js:42:17)
< at pro.start (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/lib/components/remote.js:46:15)
< at Application._optComponents (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/lib/application.js:384:19)
< at async.eachSeries.iterate (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/async/lib/async.js:123:13)

Caught exception: TypeError: Cannot read property 'host' of undefined

详细的错误提示如下:
[2014-04-18 14:41:19.767] [INFO] [default] - [2014-04-18 14:41:19.766] [ERROR] console - Caught exception: TypeError: Cannot read property 'host' of undefined
at Handler.queryEntry (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/app/servers/gate/handler/gateHandler.js:29:37)
at Service.handle (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/common/service/handlerService.js:34:30)
at handle (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/server/server.js:219:25)
at next (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/common/service/filterService.js:50:7)
at Service.beforeFilter (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/common/service/filterService.js:65:3)
at beforeFilter (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/server/server.js:116:8)
at doHandle (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/server/server.js:232:3)
at pro.handle (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/server/server.js:71:5)
at Component.handle (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/components/server.js:54:15)
at handleMessage (/home/hongshuai.yuan/nodejs_work/pomelo/treasures/game-server/node_modules/pomelo/lib/components/connector.js:206:15)

launch error for game-server

When i try to start web-server with" pomelo start" command, i have this error :

M:\Tiry\GitHub\treasures\game-server\node_modules\pomelo-logger\node_modules\log
4js\lib\date_format.js:26
.replace(/y{1,4}/g, vYear)
^
RangeError: Maximum call stack size exceeded

这个工程的pomelo版本太低,不能运行

在一个干净的环境,git clone这个工程下来后,发现客户端的消息跟gate和connector都能通信,但是客户端发消息到area服务器的时候就没响应了,后来发现是pomelo的版本太低了,升级到高版本的pomelo后,功能一切正常。

修改文件:game-server/package.json:
pomelo的版本修改成如下,就可以了。
"pomelo": "~0.8.0"

log file name seems not right

the generated logs in the v0.3 treasures:
总计 60
-rw-r--r-- 1 linzy root 0 03-14 17:03 con-log-[serverId].log
-rw-r--r-- 1 linzy root 0 03-14 17:03 crash.log
-rw-r--r-- 1 linzy root 0 03-14 17:03 forward-log-[serverId].log
-rw-r--r-- 1 linzy root 4783 03-14 17:03 node-log-[serverId].log
-rw-r--r-- 1 linzy root 0 03-14 17:03 processInfo.log
-rw-r--r-- 1 linzy root 0 03-14 17:03 rpc-log-[serverId].log
-rw-r--r-- 1 linzy root 0 03-14 17:03 systemInfo.log

look at the file name like "forward-log-[serverId].log", it should be some name like forward-log-area-server-1.log, the config in log4js.json is changed in v0.3, is there something wrong?

啟動失敗:pomelo-admin版本更新有bug

啟動服務器拋錯:
< Caught exception: TypeError: Cannot read property 'id' of undefined
< at Server.start (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/lib/master/master.js:46:68)
< at EventEmitter.emit (events.js:96:17)
< at exportEvent (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/pomelo-admin/lib/consoleService.js:279:14)
< at EventEmitter.emit (events.js:96:17)
< at Socket. (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/pomelo-admin/lib/masterAgent.js:101:16)
< at Socket.EventEmitter.emit as $emit
< at SocketNamespace.handlePacket (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/socket.io/lib/namespace.js:335:22)
< at Manager.onClientMessage (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/socket.io/lib/manager.js:488:38)
< at WebSocket.Transport.onMessage (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/socket.io/lib/transport.js:387:20)
< at Parser. (/var/linzy/wsp/node/treasures-master/game-server/node_modules/pomelo/node_modules/socket.io/lib/transports/websocket/hybi-16.js:39:10)

調試發現:
在lordofpomelo中,lordofpomelo/game-server/node_modules/pomelo/node_modules/pomelo-admin/lib/masterAgent.js 第100行self.emit('register', record); emit的參數是record;
而在treasures同一文件同一行中:self.emit('register', msg.info); 返回的是msg.info,這個msg.info值為空,故拋出上述錯誤。

查了一下lordofpomelo及treasures兩項目依賴的pomelo-admin的package.json,發現原來兩個依賴的pomelo-admin的版本是不同的,前者為0.0.17,後者為0.1.0。

簡言之,treasures 0.0.1版本直接下載回來配置後其實是無法運行的。
希望版本更新時能增加簡要的說明,並修復之。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.