Ejemplo n.º 1
0
        public void HandleEncapsulatedPacket(EncapsulatedPacket packet)
        {
            if (packet.MessageIndex != -1)
            {
                if (packet.MessageIndex < this.ReliableWindowStart || packet.MessageIndex > this.ReliableWindowEnd ||
                    this.ReliableWindow.ContainsKey(packet.MessageIndex))
                {
                    return;
                }

                this.ReliableWindow[packet.MessageIndex] = true;

                if (packet.MessageIndex == this.ReliableWindowStart)
                {
                    for (; this.ReliableWindow.ContainsKey(this.ReliableWindowStart); ++this.ReliableWindowStart)
                    {
                        bool v;
                        this.ReliableWindow.TryRemove(this.ReliableWindowStart, out v);

                        ++this.ReliableWindowEnd;
                    }
                }

                if (packet.HasSplit && (packet = this.HandleSplit(packet)) == null)
                {
                    return;
                }

                RakNetEncapsulatedReceiveEventArgs ev = new RakNetEncapsulatedReceiveEventArgs(this, packet);
                Server.Instance.Event.Network.OnRakNetEncapsulatedReceive(this, ev);

                if (ev.IsCancel)
                {
                    return;
                }

                packet = ev.Packet;

                this.HandleEncapsulatedPacketRoute(packet);
            }
            else
            {
                this.HandleEncapsulatedPacketRoute(packet);
            }
        }
Ejemplo n.º 2
0
 public void OnRakNetEncapsulatedReceive(object sender, RakNetEncapsulatedReceiveEventArgs e)
 {
     this.RakNetEncapsulatedReceive?.Invoke(sender, e);
 }