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 元编程之-代码修改代码 引言 重构代码是个体力活,特别是在确定重构方案后,剩下就是按方案调整代码,然后进行测试. 如何有好又快的调整到位代码,这是件不容易的事. 简单的代码,可以 ...
随机推荐
- PHP基础教程 php 网络上关于设计模式一些总结
1.单例模式 单例模式顾名思义,就是只有一个实例.作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的要点有三个: 一是某个类只能有一个实例; 二 ...
- JPA学习(六、JPA_JPQL)
框架学习之JPA(六) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...
- select客户端模型封装——回调方式快速建立客户端
SockClient.h #pragma once #include<functional> #define _WINDOWS #ifdef _WINDOWS #define _WINSO ...
- Shoi2017试题泛做
一口气做完六个省的省选(误) Day1 [Shoi2017]期末考试 枚举最大的天数,然后代价贪心地O(1)计算. #include <cstdio> #include <algor ...
- 关于Fibonacci博弈的一些学习
关于Fibonacci博弈的一些学习 一道例题 问题 给定n(n≥2)个石头,游戏双方轮流取至少一个石子,取到最后一个石子的人算赢,但是要满足一下规则: 第一次取不能全部取完所有的石子. 设前一次取的 ...
- Spring Boot教程(六)在springboot中验证表单信息
构建工程 创建一个springboot工程,由于用到了 web .thymeleaf.validator.el,引入相应的起步依赖和依赖,代码清单如下: <dependencies> &l ...
- DVWA--upload
文件上传漏洞 0x01了解文件上传漏洞的用处是用来干什么的 什么是文件上传漏洞? 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执 ...
- 为什么JPA@Modifying需要@Transactional注解
在JPA开发中遇到一个很奇怪的问题,@Modifying需要和@Transactional配合使用才能正常使用.如下面代码所示 @Modifying @Transactional @Query(&qu ...
- mysql数据库表反向生成modes类
一,如果你是windows,打开cmd,切换到desktop目录下 二,需要连接你的数据库,并且执行命令:sqlacodegen --outfile models.py mysql+pymysql: ...
- mysql中查看ef或efcore生成的sql语句
http://www.solves.com.cn/it/sjk/MYSQL/2019-07-01/1336.html 涉及命令 1.开启general log模式 MySQL>set globa ...