此文紧接上文的服务端分析来进行客户端的分析

LoadingLogic.js  (与初始化场景绑定 初始化各个组件 获取版本信息 加载资源)

1.onload:显示 splash 界面

初始化各个组件

2.start:checkVersion

-varURL = "http://127.0.0.1:9000";(http.js中配置的原始值)

-sendRequest("/get_serverinfo")

返回值: 包含版本信息 大厅连接地址 app网页地址

var ret = {

version:config.VERSION,

hall:hallAddr,

appweb:config.APP_WEB,

}

cc.vv.SI = ret;(设置服务器信息)

3.startPreloading加载资源

4.onLoadComplete资源加载完毕后 loadScene("login");

Login.js   (与登陆场景绑定响应相关登陆按键消息)

1.     onload:

cc.vv.http.url = cc.vv.http.master_url;( cc.vv.http.master_url为初始化了的静态变量)

2.     start:

本地存储的账号密码不为空则 cc.vv.userMgr.onAuth(ret);

3.     点击 游客登陆

cc.vv.userMgr.guestAuth();

如果URL参数中不包含账号信息则随机生成账号

cc.vv.http.sendRequest("/guest");

回调onAuth

如果登陆成功

//设置获取版本信息时返回的服务器地址

cc.vv.http.url = "http://" + cc.vv.SI.hall;

login();

-sendRequest("/login");

-登陆成功则loadScene("hall");

Hall.js(绑定大厅场景 获取和更新相关用户信息 响应创建、加入游戏按键事件)

1.onload:

如果oldRoomID 不为空 则作为房间号进入此房间

if( cc.vv.userMgr.oldRoomId!= null){

cc.vv.userMgr.enterRoom(roomId);

}

2.Update:

存在房间数据则自动进入到房间

if(cc.vv &&cc.vv.userMgr.roomData != null){

cc.vv.userMgr.enterRoom(cc.vv.userMgr.roomData);

cc.vv.userMgr.roomData = null;

}

3.界面中绑定了CreateRoom.js 和 JoinGameInput.js组件

CreateRoom.js(处理创建房间面板相关消息事件)

-cc.vv.http.sendRequest("/create_private_room");

创建房间成功

cc.vv.userMgr.enterRoom(roomId);

//返回数据ret中包含游戏房间服务器地址和端口信息

-cc.vv.http.sendRequest("/enter_private_room",data,onEnter);

-cc.vv.gameNetMgr.connectGameServer(ret);

-JoinGameInput.js(处理加入房间面板相关消息事件)

cc.vv.userMgr.enterRoom(roomId);

//返回数据ret中包含游戏房间服务器地址和端口信息

-cc.vv.http.sendRequest("/enter_private_room",data,onEnter);

-cc.vv.gameNetMgr.connectGameServer(ret);

connectGameServer:function(data){

//连接游戏房间之前设置好游戏房间地址和端口信息

cc.vv.net.ip = data.ip +":" + data.port;

//emit“login” 事件 到服务端

cc.vv.net.send("login",sd);

}

客户端监听两个登陆结果事件

cc.vv.net.addHandler("login_result ");(登陆返回结果)

//监听房间服务器返回登陆成功的消息

cc.vv.net.addHandler("login_finished",function(data){

console.log("eventlogin_finished");

cc.director.loadScene("mjgame");

});

MJGame.js     监听服务端关于游戏的消息事件

onLoad:初始化各类游戏需要的组件

-onGameBeign()根据数据 同步客户端画面 用于恢复游戏场景 断线重连

客户端网络地址变化

1.    http.js中配置的原始值 获取游戏版本信息

var URL = "http://127.0.0.1:9000";

-sendRequest("/get_serverinfo")

返回值: 包含版本信息 大厅连接地址 app网页地址

var ret = {

version:config.VERSION,

hall:hallAddr,

appweb:config.APP_WEB,

}

cc.vv.SI = ret;(返回值包含大厅服务器地址信息)

2.   //设置获取版本信息时返回的服务器地址为websocket 连接地址

cc.vv.http.url = "http://" +cc.vv.SI.hall;

-sendRequest("/login");

登陆成功则loadScene("hall");

3. 返回数据ret中包含游戏房间服务器地址和端口信息

cc.vv.userMgr.enterRoom(roomId);

cc.vv.http.sendRequest("/enter_private_room",data,onEnter);

返回数据

var ret = {

roomid:roomId,

ip:enterInfo.ip,

port:enterInfo.port,

token:enterInfo.token,

time:Date.now()

};

cc.vv.gameNetMgr.connectGameServer:function(data){

//设置 socket-io 连接地址信息

cc.vv.net.ip = data.ip + ":" + data.port;

cc.vv.net.connect();

}

服务端 客户端网络通讯方式

Client to Server

1.websocket发送http请求

cc.vv.net.send(event,data);

eg:

cc.vv.net.send("emoji",event.target.name);

2.socket-io

this.sio.emit(event,data);

Server to Client

socket-io 发送事件

socket.emit(event,data);

客户端点击游客登陆

onBtnQuickStartClicked:function(){

cc.vv.userMgr.guestAuth();

},

guestAuth:function(){

//如果没有保存的账号 则随机生成一个游客账户

if(account == null){

account = Date.now();

cc.sys.localStorage.setItem("account",account);

}

cc.vv.http.sendRequest("/guest",{account:account},this.onAuth);

}

onAuth:function(ret){

var self = cc.vv.userMgr;

self.account = ret.account;

self.sign = ret.sign;

//返回版本信息时 返回的服务器地址

cc.vv.http.url = "http://" +cc.vv.SI.hall;

self.login();

}

login:function(){

var self = this;

var onLogin = function(ret){

//account不存在 则创建一个用户

if(!ret.userid){

cc.director.loadScene("createrole");

}

else{

cc.director.loadScene("hall");

}

};

cc.vv.wc.show("正在登录游戏");

cc.vv.http.sendRequest("/login",{account:this.account,sign:this.sign},onLogin);

}

服务端对登陆请求的处理

app.get('/login',function(req,res){

// 查询数据库中的表 t_users是否存在数据

db.get_user_data(account,function(data){

if(data == null){

console.log("如果不存在用户数据则让客户端创建一个用户");

http.send(res,0,"ok");

return;

}

}

开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌客户端分析笔记相关推荐

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

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

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

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

  3. Cocos Creator 微信创意小游戏《蛇它虫》团队专访:玩法画面均是新意

    <蛇它虫>是由杭州电魂网络投资的文艺复兴工作室自主研发的一款益智解谜小游戏,在今年 1 月 9 日的微信公开课上,与其他五款小游戏一起,作为首批微信创意小游戏,在公开课上的小游戏环节亮相. ...

  4. Cocos Creator 微信创意小游戏《甜蜜糖果屋》团队专访:让纸片人活起来

    在 1 月 9 日的 2019 微信公开课 Pro 上,有一款创意十足的互动式游戏出现在小游戏宣讲环节,它便是今日 Cocos 的专访对象<甜蜜糖果屋>. <甜蜜糖果屋之花恋奇妙物语 ...

  5. Cocos Creator 微信创意小游戏《五子大作战》团队专访

    2019 微信公开课 PRO:首批创意小游戏公布 1 月 9 日,以"同行 WITH US"为主题的微信公开课 PRO 在广州召开.公开课上,讲师孙春光发布了微信首批创意小游戏,包 ...

  6. cocos creator 接QQ小游戏 BannerAd 广告sdk

    cocos creator 接QQ小游戏 BannerAd 广告sdk 开发者工具 0.1.26 版本开始支持调试广告组件 首先,你需要初始化广告,判断什么的你自己加,我就不写很详细 //方法外的全局 ...

  7. cocos creator 接QQ小游戏小程序RewardedVideoAd 激励视频广告sdk

    cocos creator 接QQ小游戏小程序RewardedVideoAd 激励视频广告sdk 开发者工具 0.1.26 版本开始支持调试广告组件 话说你们看完为什么不留言点赞? 首先,你需要初始化 ...

  8. 开源H5棋牌 cocos creator微信棋牌小游戏 点球科技服务端分析笔记

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

  9. 微信小程序案例源码-cocos creator跨平台开发小游戏案例

    前言 本人一直想学习游戏开发,以前做过Android游戏开发,但电脑坏了,所有源码都没有了,后面也就没有开发了,近来下班之余又想开发游戏了.开发游戏之前,需要考虑开发平台及语言,以前基于Android ...

最新文章

  1. 使用wmi的snmp类查询计算机网卡信息的源代码,在java中使用SNMP和/或wmi / wmic进行进程到端口的映射...
  2. 十、Sumif 函数
  3. 吴恩达 coursera ML 第十三课总结+作业答案
  4. mariadb中文手册_MariaDB性能调优工具mytop的使用详解
  5. 样式图片_中式门窗花格图片大全样式全面选择多
  6. 无源波分和彩光模块_5G前传WDM解决方案,无源波分和彩光模块
  7. 通过jQuery获取Select选中的值或文本
  8. hashmap扩容机制 jdk1.7
  9. Zabbix篇四:钉钉机器人报警
  10. Word删除表格后的空白页
  11. 高精度三维扫描仪用于运动鞋逆向建模
  12. MATLAB解决常微分方程
  13. Jenkins Xcode打包ipa
  14. 音视频-Video标签整理(属性、方法、事件)
  15. 使用Excel TRIMMEAN忽略异常值
  16. windows批处理批量更改文件名称
  17. php fpm工作原理,phpfpm工作原理是什么?
  18. 4G DTU的特点及应用方法
  19. 系统配置:CentOS8时间同步
  20. Linux|嵌入式硬件初步使用

热门文章

  1. 机器学习老中医:利用学习曲线诊断模型的偏差和方差
  2. CentOS7像外部163邮箱发送邮件
  3. 【Unity】脚本实现动态模型切割
  4. 几款笔记软件的使用感受
  5. 【避坑指“难”】react-dnd引入后,.mjs文件解析错误
  6. STM32使用FreeRTOS CLI
  7. VMware虚拟机安装Ubuntu系统步骤详解
  8. 三赢电商:拼多多店铺一直不发货怎么办?
  9. icp增值电信业务经营许可证怎么办理
  10. 【题解】CF#855 G-Harry Vs Voldemort