Cocos2d-x-javaScript 的webSocket的代码
var WebSocket = WebSocket || window.WebSocket || window.MozWebSocket;
var WebSocketManager = cc.Class.extend({
_wsObj:null,
_wsReConnectTimes:,
_reConnectMax:,
_connectTimeout:,
_reConnectFlag:false,
_msg:null,
_msgKey:null,
_msgSendStatus:'nothing',
_msgTimeout:,
_msgTimeoutTimes:,
_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._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);
};
},
//连接超时推断
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();
}
},
//超时后又一次连接
connectTimeoutHandle:function(){
//又一次打开连接
this.closeConnect();
},
//关闭连接
closeConnect:function () {
cc.log("WS CLOSING.");
if(this._wsObj){
this._wsObj.close();
}
},
//连接后处理
openGet:function (evt) {
cc.log("WS was opened.");
//获得连接的消息后,去掉超时推断
director.getScheduler().unscheduleCallbackForTarget(this,this.connectTimeoutCheck);
//清除重连次数
this._wsReConnectTimes =
;
//是否有未发送的消息又一次发送
if (this._msgSendStatus =='msgReady' &&
this._msg) {
this.sendRequest();
}
},
//获得消息
messageGet:function (evt) {
this._msgGet = evt.data;
try{
)
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 ==
) {
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'));
}
},
//获取错误
errorGet:function (evt) {
cc.log("WS Error");
this.closeConnect();
},
//连接关闭处理
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, params, callback, target);
//推断当前连接
if (this.isOpen()) {
this.sendRequest();
}
else {
this.openConnect();
}
},
//准备消息
beforeRequestSend:function (act, params, callback, 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';
},
//发送消息
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._msgTimeout);
},
//消息被响应了
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');
}
},
//超时后又一次获取玩家信息
并刷新当前页面
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);
},
//超时消息处理
callbackTimeoutHandle:function(resObj){
if (resObj.st_code ==
) {
if (G.js_jiao_se.zt_jiao_se ==
) {
SM.goto_page('DL_chuang_ming_page');
}else
) {
SM.goto_page('YD_yin_dao_' + G.js_jiao_se.xin_shou_jin_du +'_page');
}else
) {
//SM.goto_page('SY_shou_ye_page');
//试试看直接刷新页面的效果吧
SM.flush_page();
}
}
},
//推断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;
};
Cocos2d-x-javaScript 的webSocket的代码的更多相关文章
- Java 与 JavaScript 对websocket的使用
ebsocket,HTML5中新一代全双工通信协议.其底层仍然是http协议. 传统 HTTP 请求响应客户端服务器交互图 WebSocket 请求响应客户端服务器交互图 WebSocket 客户端支 ...
- 如何实现 javascript “同步”调用 app 代码
在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些 ...
- 在线运行Javascript,Jquery,HTML,CSS代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xht ...
- 《Secrets of the JavaScript Ninja》:JavaScript 之运行时代码
最近,在阅读 jQuery 之父 John Resig 力作:Secrets of the JavaScript Ninja(JavaScript忍者秘籍).关于第九章提及的 JavaScript 之 ...
- javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数
javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...
- JavaScript创建读取cookie代码示例【附:跨域cookie解决办法】
使用JavaScript 原生存取cookie代码示例: var cookie = { set : function(name, value, expires, path, domain, secur ...
- JavaScript之WebSocket技术详解
概述 HTTP协议是一种无状态协议,服务器端本身不具有识别客户端的能力,必须借助外部机制,比如session和cookie,才能与特定客户端保持对话.这多多少少带来一些不便,尤其在服务器端与客户端需要 ...
- JavaScript调用App原生代码(iOS、Android)通用解决方案
实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ...
- Javascript时间差计算函数代码实例
Javascript时间差计算函数代码实例 <script language="javascript"> Date.prototype.dateDiff = funct ...
- javascript 元编程之-代码修改代码
javascript 元编程之-代码修改代码 引言 重构代码是个体力活,特别是在确定重构方案后,剩下就是按方案调整代码,然后进行测试. 如何有好又快的调整到位代码,这是件不容易的事. 简单的代码,可以 ...
随机推荐
- Linux下cs简单通讯(socket)
Server: #include<iostream> #include<sys/types.h> #include<sys/socket.h> #include&l ...
- http response压缩
http response压缩 一.Spring boot启用Gzip压缩 application.xml新增配置: 未启用压缩时试验接口传输大小不变为61.88M,耗时1分多钟 启动压缩时试验接口传 ...
- 苹果cms开启防红跳转后,提示模板文件不存在解决方法
1,苹果cms开启防红跳转后,提示模板文件不存在(如下图)这是因为你使用的模板里面缺少苹果cms自带的防红跳转模板导致,遇到这种状况后需要把苹果cms默认自带的( template/default_p ...
- https: could not reliably determine the server's fully qualified domain name, using localhost.localdomain.
1. 用记事本打开 将里面的 #ServerName localhost:80 注释去掉即可. 再执行 然后可以通过浏览器访问 http://localhost:80 ,如果页面显示 “It work ...
- SettingBar的点击事件拦截
接下来我们再来看另外一个案例,正如上面界面上显示的两个条目,车辆选择和始发地点选择,他们都有一个共同的特点就是都有共同的标题,内容和右剪头按钮,这种情况下我们都会把它封装成一个组合的自定义View来显 ...
- 【Spark机器学习速成宝典】基础篇03数据读取与保存(Python版)
目录 保存为文本文件:saveAsTextFile 保存为json:saveAsTextFile 保存为SequenceFile:saveAsSequenceFile 读取hive 保存为文本文件:s ...
- legend3---PHP使用阿里云短信服务
legend3---PHP使用阿里云短信服务 一.总结 一句话总结: 使用步骤照官方文档,代码拷贝即可 1.php使用阿里云短信服务的步骤? 入驻阿里云->开通短信服务->获取Access ...
- SpringMvc中ModelAndView模型的应用
/** * 目标方法的返回值可以是 ModelAndView 类型. * 其中可以包含视图和模型信息 * SpringMVC 会把 ModelAndView 的 model 中数据放入到 reques ...
- python3 以utf-8编码写文件
原来的 save = open('1.txt', 'w', 'utf8') 用下面的 save = codecs.open('1.txt', 'w', 'utf8')
- NIO组件之buffer
Java NIO指的是new IO ,相对OIO,也称non-blocking IO,对应四种基本IO类型中的IO多路复用,主要有有三大核心组件,Channel(管道),Buffer(缓冲区),sel ...