pomelo新建一个服务类型

梦想游戏人
目录:
Node.js

需求:一个购买物品demo

客户端发起请求事例:客户端—->前端(connector)——->后端(game)

服务端

pomelo前端connector:新建connector.entryHandler.js

module.exports = function(app) {
  return new Handler(app);
};

var Handler = function(app) {
  this.app = app;
};

/**
 * New client entry.
 *
 * @param  {Object}   msg     request message
 * @param  {Object}   session current session object
 * @param  {Function} next    next step callback
 * @return {Void}
 */
Handler.prototype.entry = function(msg, session, next) {
//  next(null, {code: 200, msg: 'game server is ok.'});

var uid= msg.name;

session.bind(uid);
session.pushAll();

session.on("closed" , function(){
	console.log("玩家"+ session.uid + "断开了链接");
})

next(null,"链接成功");

};

entry 负责维护客户端的session 包括建立绑定等,玩家进入后返回一个成功字段,并且分配session,uid为客户端名字。

pomelo后端game:负责具体的购买逻辑,该服务不可直接和客户端通讯,也就是客户端pomelo.init 不能连接到后端服务器game,新建文件game/handler/gameHandler.js

module.exports = function(app) {
	return new Handler(app);
};

var Handler = function(app) {
	this.app = app;
};
var handler=Handler.prototype;

handler. getNotify = function(msg, session, next) {
//console.log(msg)
//console.log(session)


	next(null, {msg:"欢迎玩家" + msg.name + "进入游戏"});
	
};



handler.buyGoods=function(msg,session,next){
	var id=msg.id;
	var count = msg.count;
	console.log("购买物品玩家 uid:" + session.uid);

	if(id == "100" &&  count ==1){
		next(null,{msg:"购买物品:#活血丹 成功",code:200}); // 返回客户端
	}else{
				next(null,{msg:"你的金币不足,购买失败",code:200}); // 返回客户端调用
	}

}
//客户端通过pomelo.request("game.gameHandler.buyGoods",{id:"100",count:1},function(data){
//来发起此请求
            		

配置:

servers.json // 配置

{
  "development":{
    "connector": [
    {"id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientHost": "127.0.0.1", "clientPort": 3010, "frontend": true}
    ],


  "game": [
    {"id": "game-server-1", "host": "127.0.0.1", "port": 8000}
    
  ]

  },

  "production":{
    "connector": [
    { "id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientHost": "127.0.0.1", "clientPort": 3010, "frontend": true}],
  "game": [{"id": "game-server-1", "host": "127.0.0.1", "port": 8000}]


  }
}

adminServer.json// 配置

[{
    "type": "connector",
    "token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
}
,


{
    "type": "game",
    "token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
}
]

客户端:

var HelloWorldLayer = cc.Layer.extend({
    sprite:null,
    ctor:function () {
        //////////////////////////////
        // 1. super init first
        this._super();

        /////////////////////////////
        // 2. add a menu item with "X" image, which is clicked to quit the program
        //    you may modify it.
        // ask the window size
        var size = cc.winSize;

        // add a "close" icon to exit the progress. it's an autorelease object
        var closeItem = new cc.MenuItemImage(
            res.CloseNormal_png,
            res.CloseSelected_png,
            function () {

//////////////////////////////////////////////////////////
///购买物品
            	var route= "game.gameHandler.buyGoods";
            	
            	pomelo.request(route,{id:"100",count:1},function(data){
            		
            		cc.log("购买物品:" + JSON.stringify(data));
/////////////////////////////////////////////////////////////////
            	})
            	
            }, this);
        closeItem.attr({
            x: size.width - 20,
            y: 20,
            anchorX: 0.5,
            anchorY: 0.5
        });

        var menu = new cc.Menu(closeItem);
        menu.x = 0;
        menu.y = 0;
        this.addChild(menu, 1);


        ////////////////////////////////////////////////////////////////////////////
         pomelo=window.pomelo;

        

        pomelo.init({/// 连接前端 connector
        	host: "127.0.0.1",
        	port: 3010,
        	log: true
        }, function () {   

        	var route = "connector.entryHandler.entry";
        	//var route = "game.gameHandler.getNotify";
        	
        			pomelo.request(route, {name:"test"}, function (data) {
        				//链接connector成功
        				cc.log("[client.js]:" + JSON.stringify(data));
        		
 
        					var route = "game.gameHandler.getNotify";

        					pomelo.request(route, {name:"test"}, function (data) {
        						//测试后端服务器
        						cc.log("[client.js]:" + JSON.stringify(data));
        					});				
        			});	
        		});
        pomelo.on("disconnect",function(){
        	cc.log("和服务器断开连接");    	
        })
/////////////////////////////////////////////////////////////////////////////////////////////
        return true;
    }
});
Scroll Up