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");});

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

幼麟棋牌登录流程分析相关推荐

  1. cocos creator微信棋牌小游戏 幼麟棋牌服务端分析笔记

    新的项目需要做一个微信棋牌小游戏,网上搜了一圈相关的代码. 单就完整性来说,幼麟棋牌的开源代码比较完整(cocosCreator客户端.nodeJs服务端.数据库脚本) 实现了一款房卡麻将基本功能(热 ...

  2. 幼麟棋牌登录socket服务器分析

    登录socket服务器有两个时机,一个是创建完房间没错误后,连接,另一个是用户自行进入房间请求没错后连接 connectGameServer:function(data){this.dissoveDa ...

  3. 幼麟棋牌游戏进程分析

    1.当用户登录到socket之后,会获取房间里的其他用户信息,返回给当前登录用户作为login_result,同时会在房间内广播new_user_comes_push消息,告知其他用户自己的相关信息, ...

  4. 幼麟棋牌创建房间简短分析

    1.用户创建房间的操作 hall_server->client_service->create_private_room     调用hall_server->room_servic ...

  5. 麒麟子再放大招,据传幼麟棋牌全部版本将开源!

    前段时间有幸被「幼麟棋牌-麒麟子」 邀请加入幼麟游戏研发群,讨论学习游戏开发技术.行业动态等相关内容. 在群中麒麟子透露,出一个重磅消息:"幼麟棋牌全部版本将开源!" 在这里为不了 ...

  6. cocos creator麻将教程系列(九)—— 幼麟棋牌代码讲解

    这篇文章是官方整理的: 技术栈 客户端 引擎:Cocos Creator 2.0.6. 语言:Javasctipt 可用开发平台:MAC,Windows 可发布平台: iOS,Android,Wind ...

  7. 幼麟棋牌技术分享系列:H5棋牌游戏加载速度优化

    转自:http://forum.cocos.com/t/h5/52893 HELLO,大家好. 由于业务繁忙,很久没在论坛发技术相关的贴子了. 今天想和大家一起讨论一下当下最重点的问题.<H5加 ...

  8. 开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌客户端分析笔记

    此文紧接上文的服务端分析来进行客户端的分析 LoadingLogic.js  (与初始化场景绑定 初始化各个组件 获取版本信息 加载资源) 1.onload:显示 splash 界面 初始化各个组件 ...

  9. Ultimate Member插件注册登录流程分析

    Ultimate Member 是一个强大而灵活的WordPress插件,可以让用户在前台注册.登录.编辑个人资料等.该插件可以让你添加漂亮的用户个人资料到你的网站中,快速创建一个先进的社区. 本文我 ...

最新文章

  1. python使用heapq快速查找最大或最小的 N 个元素
  2. Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
  3. 49 岁的红杉资本遭遇黑客攻击
  4. fullcalendar 显示的时间间隔只有四十五分钟_Linux命令行监控程序,还能实时高亮显示差异,我就选它了...
  5. Lintcode: k Sum II
  6. java合并整形_Java:合并InputStreams(Java: merging InputStreams)
  7. luoguSP1805,POJ2559-Largest Rectangle in a Histogram【单调栈】
  8. 前端程序员容易忽视的一些基础知识
  9. Linux系统之TroubleShooting(启动故障排除)
  10. log双线性模型log-bilinear model简单概括
  11. 新模型SkipNet在ImageNet分类任务大放光彩!优化损失函数!
  12. ASP.NET操作Word的IIS权限设置
  13. CS231n——编程作业环境配置
  14. 项目常用工具类整理(二)--ckeditor的引用
  15. 白鹭引擎和layabox哪个好用,哪个技术更成熟 ?
  16. centos nginx php_Centos7下NGINX+PHP的安装及配置
  17. JS Enter键实现Tab键功能,回车键实现tab功能
  18. 正式版苹果雪豹操作系统光盘镜像
  19. python的f是什么意思_Python 字符串前面加u,r,b,f的含义
  20. 【学习体会】Lighttools8.4.0:简单光学系统实例

热门文章

  1. gazebo publish pose
  2. 第X届智能车常见问题汇总:(二)甩尾?智能车甩尾
  3. 零基础系统化学习白帽黑客技术
  4. 苹果cms详细安装方法
  5. QString的toLocal8bit与toLatin1的区别
  6. project-attact of panda virus
  7. 走进CIM,开启智慧城市的全生命周期管理
  8. 手机远程启动汽车,汽车远程启动还是手机控制好!有一种远程手机启动热车系统非常的不错是什么功能知道吗?
  9. Google Common Lisp 风格指南
  10. NP问题,P问题,NPC问题详解—黄宇老师《算法分析》笔记