Exemple #1
0
        private void OnKCPRecv(byte[] data, int size)
        {
            if (this.IsPong(data, size))
            {
                return;
            }

            Packet packet = NetworkHelper.DecodePacket(data, 0, size);

            packet.OnReceive();
            this._rpcManager.Invoke(packet);
            this.OnSocketEvent?.Invoke(new SocketEvent(SocketEvent.Type.Receive, packet, null));
        }
Exemple #2
0
        internal void ProcessData(byte[] data, int offset, int size, ProcessDataOutputHandler outputHandler)
        {
            if (!this._active)
            {
                return;
            }

            this._kcpProxy.ProcessData(data, offset, size, (outData, outSize) =>
            {
                Packet packet = NetworkHelper.DecodePacket(outData, 0, outSize);
                packet.OnReceive();
                outputHandler(packet);
            });

            this._activeTime = TimeUtils.utcTime;
        }
Exemple #3
0
        private void ProcessReceiveDatas()
        {
            if (this._cache.length == 0)
            {
                return;
            }

            byte[] data;
            lock (this._cache)
            {
                int len = LengthEncoder.Decode(this._cache.GetBuffer(), 0, this._cache.position, out data);
                if (data == null)
                {
                    return;
                }

                this._cache.Strip(len, ( int )this._cache.length - len);
            }

            Packet packet = NetworkHelper.DecodePacket(data, 0, data.Length);

            packet.OnReceive();

            if (packet.module == NetworkConfig.INTERNAL_MODULE && packet.command == 1)
            {
                this.id     = (( PacketAccept )packet).tokenId;
                this._state = State.Connected;
                this._pingScheduler.Start(NetworkConfig.PING_INTERVAL, this.SendPing);
                this.OnSocketEvent?.Invoke(new SocketEvent(SocketEvent.Type.Connect, string.Empty, SocketError.Success, null));
            }
            else
            {
                this._rpcManager.Invoke(packet);
                this.OnSocketEvent?.Invoke(new SocketEvent(SocketEvent.Type.Receive, packet, null));
            }

            if (this._cache.length > 0)
            {
                this.ProcessReceiveDatas();
            }
        }
Exemple #4
0
        internal void ProcessData(ProcessDataOutputHandler outputHandler)
        {
            lock (this._cache)
            {
                if (this._cache.length == 0)
                {
                    return;
                }
            }

            this._activeDateTime = TimeUtils.utcTime;

            byte[] data;
            long   cacheLength;

            lock (this._cache)
            {
                int len = LengthEncoder.Decode(this._cache.GetBuffer(), 0, this._cache.position, out data);
                if (data == null)
                {
                    return;
                }
                this._cache.Strip(len, ( int )this._cache.length - len);
                cacheLength = this._cache.length;
            }

            Packet packet = NetworkHelper.DecodePacket(data, 0, data.Length);

            packet.OnReceive();
            outputHandler.Invoke(packet);

            if (cacheLength > 0)
            {
                this.ProcessData(outputHandler);
            }
        }