[0]引擎socket类_onMessage bug

引擎socket类_onMessage bug  socket数据类型  ArrayBuffer
引擎代码_onMessage函数内:
/**
     * @private
     * 接收到数据处理方法。
     * @param msg 数据。
     */
    protected _onMessage(msg: any): void {
        if (!msg || !msg.data) return;
        var data: any = msg.data;
        if (this.disableInput && data) {
            this.event(Event.MESSAGE, data);
            return;
        }
        if (this._input.length > 0 && this._input.bytesAvailable < 1) {
            this._input.clear();
            this._addInputPosition = 0;
        }
        var pre: number = this._input.pos;
        !this._addInputPosition && (this._addInputPosition = 0);
        this._input.pos = this._addInputPosition;

        if (data) {
            if (typeof (data) == 'string') {
                this._input.writeUTFBytes(data);
            } else {
                this._input.writeArrayBuffer(data);
            }
            this._addInputPosition = this._input.pos;
            this._input.pos = pre;
        }
        this.event(Event.MESSAGE, data);
    }
 
每次收到消息,解析数据之前都会存储一个var pre: number = this._input.pos; 上一次的位置, 执行完writeArrayBuffer后,this._input.pos = pre; 把上一次的位置赋值给input.pos 这就会导致
if (this._input.length > 0 && this._input.bytesAvailable < 1) {
            this._input.clear();
            this._addInputPosition = 0;
        }
这段代码,永远不会执行,因为每次解析完数据后,都强制把解析前的位置赋值给了input,  所以下一次数据来的时候,bytesAvailable 这个永远大于1,这就会导致input的pos值一直在增长,当达到一定值后(我这边测试的是3250585600)再次解析消息,执行writeArrayBuffer的时候,会执行到byte类的_resizeBuffer函数,触发throw(报错在下面的截图),  麻烦官方看一下这个问题,  有个疑惑的地方,为什么每次都要把解析前的pos值存储下来,解析后赋值给input的pos,,    这个感觉好奇怪

bug.png

 
 
已邀请:

Yan

赞同来自:

我们这里看一下,有结果及时联系您

要回复问题请先

商务合作
商务合作