Пример #1
0
        private void HandleRakNetPacket(IPEndPoint endPoint, byte[] bytes)
        {
            if (bytes?.Length != 0)
            {
                byte         msgId = bytes[0];
                RakNetPacket pk    = this.GetRakNetPacket(msgId, bytes);
                if (pk != null)
                {
                    RakNetPacketReceiveEventArgs ev = new RakNetPacketReceiveEventArgs(endPoint, pk);
                    Server.Instance.Event.Network.OnRakNetPacketReceive(this, ev);

                    if (ev.IsCancel)
                    {
                        return;
                    }

                    pk = ev.Packet;

                    if (pk is OfflineMessage)
                    {
                        if (this.SessionCreated(endPoint))
                        {
                            Logger.Debug("%server.network.raknet.sessionCreated", endPoint);
                            return;
                        }

                        this.HandleOfflineMessage(endPoint, (OfflineMessage)pk);
                        pk.Dispose();
                        return;
                    }

                    if (!this.SessionCreated(endPoint))
                    {
                        Logger.Debug("%server.network.raknet.sessionNotCreated", endPoint);
                        return;
                    }

                    if (pk is DataPacket)
                    {
                        NetworkSession session = this.GetSession(endPoint);
                        session.HandleDataPacket((DataPacket)pk);
                        pk.Dispose();
                        return;
                    }

                    if (pk is AcknowledgePacket)
                    {
                        NetworkSession session = this.GetSession(endPoint);
                        session.HandleAcknowledgePacket((AcknowledgePacket)pk);
                        pk.Dispose();
                        return;
                    }
                }

                if (Server.Instance.Config.PacketDebug)
                {
                    Logger.Debug("%server.network.raknet.notHandle", msgId.ToString("X"));
                }
            }
        }
Пример #2
0
 public void OnRakNetPacketReceive(object sender, RakNetPacketReceiveEventArgs e)
 {
     this.RakNetPacketReceive?.Invoke(sender, e);
 }