幼麟棋牌登录流程分析

1.默认开机进入的是startScene,加载了AppStart脚本,其中有一个非常重要的方法,初始化了游戏内用到的所有管理器,另外还请求了服务器的版本信息(次要)

function initMgr(){
    cc.vv = {};
    var UserMgr = require("UserMgr");
    cc.vv.userMgr = new UserMgr();
    
    var ReplayMgr = require("ReplayMgr");
    cc.vv.replayMgr = new ReplayMgr();
    
    cc.vv.http = require("HTTP");
    cc.vv.global = require("Global");
    cc.vv.net = require("Net");
    
    var GameNetMgr = require("GameNetMgr");
    cc.vv.gameNetMgr = new GameNetMgr();
    cc.vv.gameNetMgr.initHandlers();
    
    var AnysdkMgr = require("AnysdkMgr");
    cc.vv.anysdkMgr = new AnysdkMgr();
    cc.vv.anysdkMgr.init();
    
    var VoiceMgr = require("VoiceMgr");
    cc.vv.voiceMgr = new VoiceMgr();
    cc.vv.voiceMgr.init();
    
    var AudioMgr = require("AudioMgr");
    cc.vv.audioMgr = new AudioMgr();
    cc.vv.audioMgr.init();
    
    var Utils = require("Utils");
    cc.vv.utils = new Utils();
    
    //var MJUtil = require("MJUtil");
    //cc.vv.mjutil = new MJUtil();
    
    cc.args = urlParse();
}

 2.接下来加载loading场景,进度条看代码是假的

3.接下来加载login场景,在start里面检查了本地是否存在微信账号和签名,如果存在,就自动登录,这儿是我可以借鉴的自动登录的地方,

接下来有两种登录方法,一种是微信,一种是游客,不过不管哪种登录,最后都会调用到UserMgr的onAuth方法

    onAuth:function(ret){
        var self = cc.vv.userMgr;
        if(ret.errcode !== 0){
            console.log(ret.errmsg);
        }
        else{
            self.account = ret.account;
            self.sign = ret.sign;
            cc.vv.http.url = "http://" + cc.vv.SI.hall;
            self.login();
        }   
    },

最后执行login方法,发送http请求到账号服务器/login,{account:this.account,sign:this.sign},然后根据返回的数据判断是否有uid,如果没有,进入创建角色界面,否则直接进入大厅

4.在进入大厅的时候执行了一个很重要的方法cc.vv.userMgr.enterRoom

    enterRoom:function(roomId,callback){
        var self = this;
        var onEnter = function(ret){
            if(ret.errcode !== 0){
                if(ret.errcode == -1){
                    setTimeout(function(){
                        self.enterRoom(roomId,callback);
                    },5000);
                }
                else{
                    cc.vv.wc.hide();
                    if(callback != null){
                        callback(ret);
                    }
                }
            }
            else{
                cc.vv.wc.hide();
                if(callback != null){
                    callback(ret);
                }
                cc.vv.gameNetMgr.connectGameServer(ret);
            }
        };
        
        var data = {
            account:cc.vv.userMgr.account,
            sign:cc.vv.userMgr.sign,
            roomid:roomId
        };
        cc.vv.wc.show("正在进入房间 " + roomId);
        cc.vv.http.sendRequest("/enter_private_room",data,onEnter);
    },

进入房间后,如果没有错误,就实际执行力连接socket服务器的操作 ,

    connectGameServer:function(data){
        this.dissoveData = null;
        cc.vv.net.ip = data.ip + ":" + data.port;
        console.log(cc.vv.net.ip);
        var self = this;

        var onConnectOK = function(){
            console.log("onConnectOK");
            var sd = {
                token:data.token,
                roomid:data.roomid,
                time:data.time,
                sign:data.sign,
            };
            cc.vv.net.send("login",sd);
        };
        
        var onConnectFailed = function(){
            console.log("failed.");
            cc.vv.wc.hide();
        };
        cc.vv.wc.show("正在进入房间");
        cc.vv.net.connect(onConnectOK,onConnectFailed);
    }

里面两个回调函数,如果连接成功,则执行登录操作

        cc.vv.net.addHandler("login_result",function(data){
            console.log(data);
            if(data.errcode === 0){
                var data = data.data;
                self.roomId = data.roomid;
                self.conf = data.conf;
                self.maxNumOfGames = data.conf.maxGames;
                self.numOfGames = data.numofgames;
                self.seats = data.seats;
                self.seatIndex = self.getSeatIndexByID(cc.vv.userMgr.userId);
                self.isOver = false;
            }
            else{
                console.log(data.errmsg);   
            }
            self.dispatchEvent('login_result');
        });
                
        cc.vv.net.addHandler("login_finished",function(data){
            console.log("login_finished");
            cc.director.loadScene("mjgame",function(){
                cc.vv.net.ping();
                cc.vv.wc.hide();
            });
            self.dispatchEvent("login_finished");
        });

登录完成设置一些本地相关的用户参数,隐藏进度对话框,进入游戏界面,在登录完成的时候还设置了断线重连的函数

 

幼麟棋牌社区版,是幼麟棋牌的开源版本,用于提供给大家学习游戏服务器编程和客户端编程。 在此之前,幼麟棋牌早已开源在Cocos社区,造成了不小的影响力。 已有不下百个团队或者个人在使用本套代码开发作品。 使用幼麟棋牌框架开发出来的产品更是无法统计,抛开幼麟科技官方的数十款不算,第三方已上线产品不下百款。 幼麟棋牌框架被业内众多爱好者评为 业界清流。 它打破了早期的C++为主的棋牌格局。开创了新一代的纯Javascript脚本模式。 同时也是目前唯一能够一次开发,同时发布iOS,Android,H5三端的棋牌框架。由于其纯脚本特性,在发布iOS和Android时,天然支持热更新功能。 有了幼麟棋牌的动静,业内也有部分团队开始以棋牌平台为主打,建立开源社区,希望在开源社区找到新的盈利模式。 幼麟棋牌社区版包含功能如下: 完整的服务器客户端源代码,搭建后即可运行 完整的房卡棋牌玩法(加入,创建房间) 完整的四川麻将玩法(血战到底,血流成河两种模式) 房卡战绩记录 微信登陆,微信分享 断线重连 适合人群: 想通过完整案例,快速入手游戏开发 想通过完整源码,快速开发棋牌游戏 想通过完整源码,快速开发麻将游戏 想替换一下美术资源,就拥有一款四川麻将 想直接打个包,就拥有一款四川麻将
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值