Cocos2d-x-javaScript 的webSocket的代码



var WebSocket = WebSocket || window.WebSocket || window.MozWebSocket;

var WebSocketManager = cc.Class.extend({


? ? _wsObj:null,

? ? _wsReConnectTimes:0,

? ? _reConnectMax:3,

? ? _connectTimeout:5,

? ? _reConnectFlag:false,


? ? _msg:null,

? ? _msgKey:null,

? ? _msgSendStatus:‘nothing‘,

? ? _msgTimeout:5,

? ? _msgTimeoutTimes:0,


? ? _msgGet:‘‘,


? ? _target:null,

? ? _callback:null,


? ? ctor:function () {

? ? ? ? NC.addObserver(this,this.connectTimeoutHandle,‘ws_connect_timeout‘);

? ? ? ? NC.addObserver(this,this.sendTimeoutHandle,‘ws_timeout‘);

? ? },


? ? //打开连接

? ? openConnect:function () {


? ? ? ?if(this._wsObj){

? ? ? ? ? ?this._wsObj.close();

? ? ? ? ? ?return;

? ? ? ? }


? ? ? ?this._wsObj = null;

? ? ? ?var self = this;


? ? ? ?this._wsObj = new WebSocket(CFG_SER.ws_ser);


? ? ? ? cc.log("WS CONNECTING." + CFG_SER.ws_ser);


? ? ? ?//连接超时推断

? ? ? ? director.getScheduler().scheduleCallbackForTarget(this,this.connectTimeoutCheck,0,this._connectTimeout);


? ? ? ?this._wsObj.onopen = function (evt) {

? ? ? ? ? ? self.openGet(evt);

? ? ? ? };


? ? ? ?this._wsObj.onmessage = function (evt) {

? ? ? ? ? ? self.messageGet(evt);

? ? ? ? };


? ? ? ?this._wsObj.onerror = function (evt) {

? ? ? ? ? ? self.errorGet(evt);

? ? ? ? };


? ? ? ?this._wsObj.onclose = function (evt) {

? ? ? ? ? ? self.closeGet(evt);

? ? ? ? };

? ? },0);"> ? ? //连接超时推断

? ? connectTimeoutCheck:function(){


? ? ? ?if(CFG_SER.is_websock && this._wsObj && this._wsObj.readyState == WebSocket.CONNECTING){

? ? ? ? ? ?//重连次数

? ? ? ? ? ?if(this._wsReConnectTimes >this._reConnectMax){

? ? ? ? ? ? ? ? //重试过多后。应该提示玩家眼下网络不稳定

? ? ? ? ? ? ? ? GY_ti_shi_popup.getInstance().show(L(‘gy:ws_wang_luo_bu_wen‘));

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ?this._wsReConnectTimes++;

? ? ? ? ? ? ? ? GY_ti_shi_popup.getInstance().show(L(‘gy:ws_timeout‘),‘ws_connect_timeout‘);

? ? ? ? ? ? }

? ? ? ? }else{

? ? ? ? ? ?this.connectTimeoutHandle();

? ? ? ? }


? ? },0);"> ? ? //超时后又一次连接

? ? connectTimeoutHandle:function(){

? ? ? ?//又一次打开连接

? ? ? ?this.closeConnect();

? ? },0);"> ? ? //关闭连接

? ? closeConnect:function () {

? ? ? ? cc.log("WS CLOSING.");

? ? ? ?if(this._wsObj){

? ? ? ? ? ?this._wsObj.close();

? ? ? ? }

? ? },0);"> ? ? //连接后处理

? ? openGet:function (evt) {

? ? ? ? cc.log("WS was opened.");


? ? ? ? //获得连接的消息后,去掉超时推断

? ? ? ? director.getScheduler().unscheduleCallbackForTarget(this,this.connectTimeoutCheck);


? ? ? ?//清除重连次数

? ? ? ?this._wsReConnectTimes = 0;


? ? ? ? //是否有未发送的消息又一次发送

? ? ? ?if (this._msgSendStatus ==‘msgReady‘ && this._msg) {

? ? ? ? ? ?this.sendRequest();

? ? ? ? }

? ? },0);"> ? ? //获得消息

? ? messageGet:function (evt) {

? ? ? ?this._msgGet = evt.data;

? ? ? ?try{

? ? ? ? ? ?if (this._msgGet.length <10000)

? ? ? ? ? ? ? ? cc.log(‘response:‘ +this._msgGet);

? ? ? ? ? ?else

? ? ? ? ? ? ? ? cc.log(‘content too long to display.‘);

? ? ? ? }catch(e){

? ? ? ? ? ? cc.log(‘too large‘);

? ? ? ? }


? ? ? ?try{

? ? ? ? ? ?var resObj = JSON.parse(this._msgGet);

? ? ? ? }catch (e){

? ? ? ? ? ? GY_msg_popup.getInstance().show(L(‘gy:request_err‘));

? ? ? ? }


? ? ? ?if (resObj._st == 1) {

? ? ? ? ? ? GY_tools.fan_yi_http_body(resObj._body);


? ? ? ? ? ?//推断是什么消息

? ? ? ? ? ?if(this._msgSendStatus ==‘msgSend‘ && resObj._body.func == this._msgKey){

? ? ? ? ? ? ? ?this.requestResponse(resObj);

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ?switch (resObj._body.func){

? ? ? ? ? ? ? ? ? ?case ‘chong_zhi‘://这里做一些自己的处理逻辑

? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }else{

? ? ? ? ? ? cc.log(‘request data err‘);

? ? ? ? ? ? GY_msg_popup.getInstance().show(L(‘gy:request_data_err‘));

? ? ? ? }

? ? },0);"> ? ? //获取错误

? ? errorGet:function (evt) {

? ? ? ? cc.log("WS Error");

? ? ? ?this.closeConnect();

? ? },0);"> ? ? //连接关闭处理

? ? closeGet:function (evt) {

? ? ? ? cc.log("websocket instance closed.");

? ? ? ?this._wsObj = null;

? ? ? ? //连接关闭立即进行重试

? ? ? ?this.openConnect();

? ? },


? ?/**

?? ? * 给服务器发送消息

?? ? * @param act

?? ? * @param params

?? ? * @param callback

?? ? * @param target

?? ? */

? ? sendGetRequest:function (act,params,callback,target) {


? ? ? ?this.beforeRequestSend(act,target);

? ? ? ?//推断当前连接

? ? ? ?if (this.isOpen()) {

? ? ? ? ? ?this.sendRequest();

? ? ? ? }

? ? ? ?else {

? ? ? ? ? ?this.openConnect();

? ? ? ? }

? ? },0);"> ? ? //准备消息

? ? beforeRequestSend:function (act,target) {

? ? ? ? //弹出loading

? ? ? ? GY_loading_popup.getInstance().show();


? ? ? ?//消息拼接

? ? ? ?this._msg = {‘pathname‘:‘‘,‘query‘:‘‘};

? ? ? ?this._msg.pathname = ‘/‘ + act;

? ? ? ? G.js_jiao_se ? params.id_jiao_se = G.js_jiao_se.id_jiao_se :null;


? ? ? ? //由于之前是HTTP的请求,须要将參数变成字符串的

? ? ? ?var p = {};

? ? ? ?for (key in params) {

? ? ? ? ? ? p[key] =‘‘ + params[key];

? ? ? ? }


? ? ? ?this._msg.query = p;


? ? ? ? //注冊消息,回调

? ? ? ?this._msgKey = this._msg.pathname;

? ? ? ?this._target = target;

? ? ? ?this._callback = callback;


? ? ? ?this._msgSendStatus = ‘msgReady‘;

? ? },0);"> ? ? //发送消息

? ? sendRequest:function () {

? ? ? ? cc.log(‘send request :‘);

? ? ? ? cc.log(JSON.stringify(this._msg));

? ? ? ?this._wsObj.send(JSON.stringify(this._msg));

? ? ? ?this._msgSendStatus = ‘msgSend‘;


? ? ? ?//设置超时时间

? ? ? ? director.getScheduler().scheduleCallbackForTarget(this,this.sendTimeoutCheck,this._msgTimeout);

? ? },0);"> ? ? //消息被响应了

? ? requestResponse:function (resObj) {


? ? ? ? //获得响应的消息后,去掉loading遮罩

? ? ? ? director.getScheduler().unscheduleCallbackForTarget(this,this.sendTimeoutCheck);

? ? ? ?this._msg = null;

? ? ? ?this._msgSendStatus = ‘nothing‘;

? ? ? ? GY_loading_popup.getInstance().hide();


? ? ? ?this._callback.call(this._target,resObj._body);

? ? },


? ? //发送消息超时推断

? ? sendTimeoutCheck:function(){

? ? ? ?if(this._msgSendStatus ==‘msgSend‘){

? ? ? ? ? ? //消息没有被响应。去掉loading遮罩

? ? ? ? ? ? GY_loading_popup.getInstance().hide();

? ? ? ? ? ? GY_ti_shi_popup.getInstance().show(L(‘gy:ws_timeout‘),‘ws_timeout‘);

? ? ? ? }

? ? },0);">? ? //超时后又一次获取玩家信息 并刷新当前页面

? ? sendTimeoutHandle:function(){

? ? ? ? var act =‘gc/jiao_se/deng_lu‘;

? ? ? ?var param = {};

? ? ? ? param.gc_token = LS.getItem(‘gc_token‘);

? ? ? ? param.id_yong_hu = LS.getItem(‘id_yong_hu‘);

? ? ? ? param.zhouqi = LS.getItem(‘uc_zhouqi‘);

? ? ? ? HttpManager.create().sendGetRequest(act,param,this.callbackTimeoutHandle,this);

? ? },0);"> ? ? //超时消息处理

? ? callbackTimeoutHandle:function(resObj){

? ? ? ?if (resObj.st_code == 1) {

? ? ? ? ? ?if (G.js_jiao_se.zt_jiao_se == 1) {

? ? ? ? ? ? ? ? SM.goto_page(‘DL_chuang_ming_page‘);

? ? ? ? ? ? }else if (G.js_jiao_se.zt_jiao_se ==2) {

? ? ? ? ? ? ? ? SM.goto_page(‘YD_yin_dao_‘ + G.js_jiao_se.xin_shou_jin_du +‘_page‘);

? ? ? ? ? ? }else if (G.js_jiao_se.zt_jiao_se ==3) {

? ? ? ? ? ? ? ? //SM.goto_page(‘SY_shou_ye_page‘);

? ? ? ? ? ? ? ?//试试看直接刷新页面的效果吧

? ? ? ? ? ? ? ? SM.flush_page();

? ? ? ? ? ? }

? ? ? ? }

? ? },0);"> ? ? //推断ws是否已经连接

? ? isOpen:function(){

? ? ?return (this._wsObj &&this._wsObj.readyState == WebSocket.OPEN);

? ? },


? ? purge:function () {

? ? ? ? NC.removeObserver(this,‘ws_timeout‘);

? ? ? ? NC.removeObserver(this,‘ws_connect_timeout‘);

? ? ? ?this.closeConnect();

? ? ? ?this._instance = null;

? ? }

});


WebSocketManager._instance =null;

WebSocketManager.getInstance =function () {

? ?if (!this._instance) {

? ? ? ?this._instance = new WebSocketManager();

? ? }

? ?return this._instance;

};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是