实现网络消息收发机制

function InternalSocket (url) {
    this.url = url;
    this._socket = null;
    this.handlers = {};
    this._heartBeatTimer = null;
    this._timeout = null;
    this._first = 1;
    this._retryTimes = 0;
    this._retry = 1;
};

InternalSocket.prototype.setRetry = function(isRetry){
    this._retry = isRetry;
};

InternalSocket.prototype.getRetry = function(){
    return this._retry;
};

InternalSocket.prototype.connect = function () {
    var self = this;
    cc.vv.log(self.url);
    self._socket = new WebSocket(self.url);
    self._socket.binaryType = "arraybuffer"; //blob
    self._socket.onopen = self.onopen.bind(this);
    self._socket.onmessage = self.onmessage.bind(this);
    self._socket.onerror = self.onerror.bind(this);
    self._socket.onclose = self.onclose.bind(this);
};

InternalSocket.prototype.onopen = function (event) {
    cc.vv.log("client connection establish.");
    var self = this;
    self.clearHBTimer();
    self.heartBeat();
    if (this._first) {
        this._first = 0;
        self._handle(cc.vv.SYS_MSG.CONNECT, {});
    }
    else {
        self._handle(cc.vv.SYS_MSG.RECONNECT, {});
    }
    this._retryTimes = 0;
};

InternalSocket.prototype.onmessage = function (event) {
    //cc.vv.log("recv data " + event.type);
    var self = this;
    var orig_buf = event.data;
    if (cc.sys.isNative) {
        self.onmessageNative(orig_buf);
    } 
    else {
        self.onmessageOther(orig_buf);
    }
};

InternalSocket.prototype.onerror = function (event) {
    var self = this;
    cc.vv.log("websocket error . State : " + self.readyState());
    cc.vv.log(JSON.stringify(event));
    //if (event.type == "error") {};
    self.clearHBTimer();
    if (!!self._socket)
        self._handle(cc.vv.SYS_MSG.ERROR, { readyState: self._socket.readyState });
};

InternalSocket.prototype.onclose = function (event) {
    var self = this;
    cc.vv.log("websocket close . State : " + self.readyState());
    cc.vv.log(JSON.stringify(event));
    self.clearHBTimer();
    self._handle(cc.vv.SYS_MSG.CLOSE, {});
    self._socket = null;

    if (self._retry && self._retryTimes < cc.vv.MAX_RECONNECT_TIMES) {
        self._retryTimes++;
        setTimeout(function ()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值