Example #1
0
        public static void WritePacket(NWriter wtr, Packet pkt, ClientProcessor psr)
        {
            MemoryStream s = new MemoryStream();
            pkt.Write(psr, new NWriter(s));

            byte[] content = s.ToArray();
            content = pkt.Crypt(psr, content);
            wtr.Write(content.Length + 5);
            wtr.Write((byte)pkt.ID);
            wtr.Write(content);
        }
Example #2
0
 public void SendPacket(Packet pkt)
 {
     try
     {
         pending.Enqueue(pkt);
         sendLock.Set();
     }
     catch
     {
         Console.WriteLine("Error sending packet with ID "+pkt.ID.ToString());
     }
 }
        public void SendPacket(Packet pkt)
        {
            pendingPackets.Enqueue(pkt);
            if (CanSendPacket(send, false))
            {
                var dat = (send.UserToken as SendToken).Packet.Write(parent);

                sendState = SendState.Sending;
                send.SetBuffer(dat, 0, dat.Length);
                if (!skt.SendAsync(send))
                    IOCompleted(this, send);
            }
        }
        public void SendPacket(Packet pkt)
        {
            try
            {
                pendingPackets.Enqueue(pkt);
                if (CanSendPacket(send, false))
                {
                    var dat = (send.UserToken as SendToken).Packet.Write(parent);

                    sendState = SendState.Sending;
                    send.SetBuffer(dat, 0, dat.Length);
                    if (!skt.SendAsync(send))
                        IOCompleted(this, send);
                }
            }
            catch
            {
                Console.ForegroundColor = ConsoleColor.DarkBlue;
                Console.WriteLine("Error sending packet with ID " + pkt.ID.ToString());
                Console.ForegroundColor = ConsoleColor.White;
            }
        }
Example #5
0
 void ReceivePacket(Packet pkt)
 {
     if (stage == ProtocalStage.Disconnected) return;
     if (stage == ProtocalStage.Ready && (entity == null || entity != null && entity.Owner == null)) return;
     Packet.BeginReadPacket(skt, this, ReceivePacket, Disconnect);
     try
     {
         if (pkt.ID == PacketID.Hello)
             ProcessHelloPacket(pkt as HelloPacket);
         else if (pkt.ID == PacketID.Create)
             ProcessCreatePacket(pkt as CreatePacket);
         else if (pkt.ID == PacketID.Load)
             ProcessLoadPacket(pkt as LoadPacket);
         else if (pkt.ID == PacketID.Pong)
             entity.Pong(pkt as PongPacket);
         else if (pkt.ID == PacketID.Move)
             RealmManager.AddPendingAction(t => entity.Move(t, pkt as MovePacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.PlayerShoot)
             RealmManager.AddPendingAction(t => entity.PlayerShoot(t, pkt as PlayerShootPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.EnemyHit)
             RealmManager.AddPendingAction(t => entity.EnemyHit(t, pkt as EnemyHitPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.OtherHit)
             RealmManager.AddPendingAction(t => entity.OtherHit(t, pkt as OtherHitPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.SquareHit)
             RealmManager.AddPendingAction(t => entity.SquareHit(t, pkt as SquareHitPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.PlayerHit)
             RealmManager.AddPendingAction(t => entity.PlayerHit(t, pkt as PlayerHitPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.ShootAck)
             RealmManager.AddPendingAction(t => entity.ShootAck(t, pkt as ShootAckPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.InvSwap)
             RealmManager.AddPendingAction(t => entity.InventorySwap(t, pkt as InvSwapPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.InvDrop)
             RealmManager.AddPendingAction(t => entity.InventoryDrop(t, pkt as InvDropPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.UseItem)
             RealmManager.AddPendingAction(t => entity.UseItem(t, pkt as UseItemPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.UsePortal)
             RealmManager.AddPendingAction(t => entity.UsePortal(t, pkt as UsePortalPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.PlayerText)
             RealmManager.AddPendingAction(t => entity.PlayerText(t, pkt as PlayerTextPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.ChooseName)
             RealmManager.AddPendingAction(t => ProcessChooseNamePacket(pkt as ChooseNamePacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.Escape)
             RealmManager.AddPendingAction(t => ProcessEscapePacket(pkt as EscapePacket), PendingPriority.Emergent);
         else if (pkt.ID == PacketID.Teleport)
             RealmManager.AddPendingAction(t => entity.Teleport(t, pkt as TeleportPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.GotoAck)
             RealmManager.AddPendingAction(t => entity.GotoAck(t, pkt as GotoAckPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.EditAccountList)
             RealmManager.AddPendingAction(t => entity.EditAccountList(t, pkt as EditAccountListPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.Buy)
             RealmManager.AddPendingAction(t => entity.Buy(t, pkt as BuyPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.RequestTrade)
             RealmManager.AddPendingAction(t => entity.RequestTrade(t, pkt as RequestTradePacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.ChangeTrade)
             RealmManager.AddPendingAction(t => entity.ChangeTrade(t, pkt as ChangeTradePacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.AcceptTrade)
             RealmManager.AddPendingAction(t => entity.AcceptTrade(t, pkt as AcceptTradePacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.CancelTrade)
             RealmManager.AddPendingAction(t => entity.CancelTrade(t, pkt as CancelTradePacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.AOEAck)
             RealmManager.AddPendingAction(t => entity.AOEAck(t, pkt as AOEAckPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.GroundDamage)
             RealmManager.AddPendingAction(t => entity.GroundDamage(t, pkt as GroundDamagePacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.CheckCredits)
             RealmManager.AddPendingAction(t => entity.CheckCredits(t, pkt as CheckCreditsPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.CreateGuild)
             RealmManager.AddPendingAction(t => entity.CreateGuild(pkt as CreateGuildPacket),PendingPriority.Networking);
         else if (pkt.ID != PacketID.Packet)
         {
             Console.WriteLine("Unhandled packet: " + pkt.ToString());
         }
     }
     catch
     {
         Disconnect();
     }
 }
 internal void ProcessPacket(Packet pkt)
 {
     try
     {
         if (pkt.ID == PacketID.Hello)
             ProcessHelloPacket(pkt as HelloPacket);
         else if (pkt.ID == PacketID.Create)
             ProcessCreatePacket(pkt as CreatePacket);
         else if (pkt.ID == PacketID.Load)
             ProcessLoadPacket(pkt as LoadPacket);
         else if (pkt.ID == PacketID.Broadcast)
             ProcessBroadcastPacket(pkt as BroadcastPacket);
         else if (pkt.ID == PacketID.Pong)
             entity.Pong(pkt as PongPacket);
         else if (pkt.ID == PacketID.Move)
             RealmManager.Logic.AddPendingAction(t => entity.Move(t, pkt as MovePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.PlayerShoot)
             RealmManager.Logic.AddPendingAction(t => entity.PlayerShoot(t, pkt as PlayerShootPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.EnemyHit)
             RealmManager.Logic.AddPendingAction(t => entity.EnemyHit(t, pkt as EnemyHitPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.OtherHit)
             RealmManager.Logic.AddPendingAction(t => entity.OtherHit(t, pkt as OtherHitPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.SquareHit)
             RealmManager.Logic.AddPendingAction(t => entity.SquareHit(t, pkt as SquareHitPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.PlayerHit)
             RealmManager.Logic.AddPendingAction(t => entity.PlayerHit(t, pkt as PlayerHitPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.ShootAck) //Spam
             RealmManager.Logic.AddPendingAction(t => entity.ShootAck(t, pkt as ShootAckPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.InvSwap)
             RealmManager.Logic.AddPendingAction(t => entity.InventorySwap(t, pkt as InvSwapPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.InvDrop)
             RealmManager.Logic.AddPendingAction(t => entity.InventoryDrop(t, pkt as InvDropPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.UseItem)
             RealmManager.Logic.AddPendingAction(t => entity.UseItem(t, pkt as UseItemPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.UsePortal)
             RealmManager.Logic.AddPendingAction(t => entity.UsePortal(t, pkt as UsePortalPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.PlayerText)
             RealmManager.Logic.AddPendingAction(t => entity.PlayerText(t, pkt as PlayerTextPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.ChooseName)
             ProcessChooseNamePacket(pkt as ChooseNamePacket);
         else if (pkt.ID == PacketID.Escape)
             ProcessEscapePacket(pkt as EscapePacket);
         else if (pkt.ID == PacketID.Teleport)
             RealmManager.Logic.AddPendingAction(t => entity.Teleport(t, pkt as TeleportPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.GotoAck)
             RealmManager.Logic.AddPendingAction(t => entity.GotoAck(t, pkt as GotoAckPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.EditAccountList)
             RealmManager.Logic.AddPendingAction(t => entity.EditAccountList(t, pkt as EditAccountListPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.Buy)
             RealmManager.Logic.AddPendingAction(t => entity.Buy(t, pkt as BuyPacket), PendingPriority.Networking);
         else if (pkt.ID == PacketID.RequestTrade)
             RealmManager.Logic.AddPendingAction(t => entity.RequestTrade(t, pkt as RequestTradePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.ChangeTrade)
             RealmManager.Logic.AddPendingAction(t => entity.ChangeTrade(t, pkt as ChangeTradePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.AcceptTrade)
             RealmManager.Logic.AddPendingAction(t => entity.AcceptTrade(t, pkt as AcceptTradePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.CancelTrade)
             RealmManager.Logic.AddPendingAction(t => entity.CancelTrade(t, pkt as CancelTradePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.AOEAck)
             RealmManager.Logic.AddPendingAction(t => entity.AOEAck(t, pkt as AOEAckPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.GroundDamage)
             RealmManager.Logic.AddPendingAction(t => entity.GroundDamage(t, pkt as GroundDamagePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.CheckCredits)
             RealmManager.Logic.AddPendingAction(t => entity.CheckCredits(t, pkt as CheckCreditsPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.GuildRemove)
             RealmManager.Logic.AddPendingAction(t => entity.GuildRemove(t, pkt as GuildRemovePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.CreateGuild)
             RealmManager.Logic.AddPendingAction(t => entity.CreateGuild(t, pkt as CreateGuildPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.JoinGuild)
             RealmManager.Logic.AddPendingAction(t => entity.JoinGuild(t, pkt as JoinGuildPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.GuildInvite)
             RealmManager.Logic.AddPendingAction(t => entity.InviteToGuild(t, pkt as GuildInvitePacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.ChangeGuildRank)
             RealmManager.Logic.AddPendingAction(t => entity.ChangeGuildRank(t, pkt as ChangeGuildRankPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.Visibullet)
             RealmManager.Logic.AddPendingAction(t => entity.VisibulletHit(pkt as VisibulletPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.TextBoxButton)
             RealmManager.Logic.AddPendingAction(t => entity.TextBoxButton(pkt as TextBoxButtonPacket),
                 PendingPriority.Networking);
         else if (pkt.ID == PacketID.UpdateAck)
             RealmManager.Logic.AddPendingAction(t => HandleUpdateAck(), PendingPriority.Networking);
         else
         {
             Console.WriteLine(@"Unhandled packet: " + pkt);
         }
     }
     catch (Exception e)
     {
         Console.Out.WriteLine(pkt.ToString());
         Console.Out.WriteLine(e);
         Disconnect();
     }
 }
 public void SendPacket(Packet pkt)
 {
     handler.SendPacket(pkt);
 }
 private bool OnPacketReceived(Packet pkt)
 {
     //return parent.ProcessPacket(pkt);
     if (parent.IsReady())
     {
         RealmManager.Network.AddPendingPacket(parent, pkt);
         return true;
     }
     return false;
 }
 public void SendPacket(Packet pkt)
 {
     try
     {
     handler.SendPacket(pkt);
     }
     catch (Exception e) { }
 }
 bool OnPacketReceived(Packet pkt)
 {
     return parent.ProcessPacket(pkt);
 }
 internal void ProcessPacket(Packet pkt)
 {
     try
     {
         switch (pkt.ID)
         {
             case PacketID.Hello:
                 ProcessHelloPacket(pkt as HelloPacket);
                 break;
             case PacketID.Create:
                 ProcessCreatePacket(pkt as CreatePacket);
                 break;
             case PacketID.Load:
                 ProcessLoadPacket(pkt as LoadPacket);
                 break;
             case PacketID.Broadcast:
                 ProcessBroadcastPacket(pkt as BroadcastPacket);
                 break;
             case PacketID.Pong:
                 Player.Pong(pkt as PongPacket);
                 break;
             case PacketID.Move:
                 RealmManager.Logic.AddPendingAction(t => Player.Move(t, pkt as MovePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.PlayerShoot:
                 RealmManager.Logic.AddPendingAction(t => Player.PlayerShoot(t, pkt as PlayerShootPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.EnemyHit:
                 RealmManager.Logic.AddPendingAction(t => Player.EnemyHit(t, pkt as EnemyHitPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.OtherHit:
                 RealmManager.Logic.AddPendingAction(t => Player.OtherHit(t, pkt as OtherHitPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.SquareHit:
                 RealmManager.Logic.AddPendingAction(t => Player.SquareHit(t, pkt as SquareHitPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.PlayerHit:
                 RealmManager.Logic.AddPendingAction(t => Player.PlayerHit(t, pkt as PlayerHitPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.ShootAck:
                 RealmManager.Logic.AddPendingAction(t => Player.ShootAck(t, pkt as ShootAckPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.InvSwap:
                 RealmManager.Logic.AddPendingAction(t => Player.InventorySwap(t, pkt as InvSwapPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.InvDrop:
                 RealmManager.Logic.AddPendingAction(t => Player.InventoryDrop(t, pkt as InvDropPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.UseItem:
                 RealmManager.Logic.AddPendingAction(t => Player.UseItem(t, pkt as UseItemPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.UsePortal:
                 RealmManager.Logic.AddPendingAction(t => Player.UsePortal(t, pkt as UsePortalPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.PlayerText:
                 RealmManager.Logic.AddPendingAction(t => Player.PlayerText(t, pkt as PlayerTextPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.ChooseName:
                 ProcessChooseNamePacket(pkt as ChooseNamePacket);
                 break;
             case PacketID.Escape:
                 ProcessEscapePacket(pkt as EscapePacket);
                 break;
             case PacketID.Teleport:
                 RealmManager.Logic.AddPendingAction(t => Player.Teleport(t, pkt as TeleportPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.GotoAck:
                 RealmManager.Logic.AddPendingAction(t => Player.GotoAck(t, pkt as GotoAckPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.EditAccountList:
                 RealmManager.Logic.AddPendingAction(t => Player.EditAccountList(t, pkt as EditAccountListPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.Buy:
                 RealmManager.Logic.AddPendingAction(t => Player.Buy(t, pkt as BuyPacket), PendingPriority.Networking);
                 break;
             case PacketID.RequestTrade:
                 RealmManager.Logic.AddPendingAction(t => Player.RequestTrade(t, pkt as RequestTradePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.ChangeTrade:
                 RealmManager.Logic.AddPendingAction(t => Player.ChangeTrade(t, pkt as ChangeTradePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.AcceptTrade:
                 RealmManager.Logic.AddPendingAction(t => Player.AcceptTrade(t, pkt as AcceptTradePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.CancelTrade:
                 RealmManager.Logic.AddPendingAction(t => Player.CancelTrade(t, pkt as CancelTradePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.AOEAck:
                 RealmManager.Logic.AddPendingAction(t => Player.AOEAck(t, pkt as AOEAckPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.GroundDamage:
                 RealmManager.Logic.AddPendingAction(t => Player.GroundDamage(t, pkt as GroundDamagePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.CheckCredits:
                 RealmManager.Logic.AddPendingAction(t => Player.CheckCredits(t, pkt as CheckCreditsPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.GuildRemove:
                 RealmManager.Logic.AddPendingAction(t => Player.GuildRemove(t, pkt as GuildRemovePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.CreateGuild:
                 RealmManager.Logic.AddPendingAction(t => Player.CreateGuild(t, pkt as CreateGuildPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.JoinGuild:
                 RealmManager.Logic.AddPendingAction(t => Player.JoinGuild(t, pkt as JoinGuildPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.GuildInvite:
                 RealmManager.Logic.AddPendingAction(t => Player.InviteToGuild(t, pkt as GuildInvitePacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.ChangeGuildRank:
                 RealmManager.Logic.AddPendingAction(t => Player.ChangeGuildRank(t, pkt as ChangeGuildRankPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.Visibullet:
                 RealmManager.Logic.AddPendingAction(t => Player.VisibulletHit(pkt as VisibulletPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.TextBoxButton:
                 RealmManager.Logic.AddPendingAction(t => Player.TextBoxButton(pkt as TextBoxButtonPacket),
                     PendingPriority.Networking);
                 break;
             case PacketID.UpdateAck:
                 RealmManager.Logic.AddPendingAction(t => HandleUpdateAck(), PendingPriority.Networking);
                 break;
             default:
                 Logger.Error($"Unhandled packet: {pkt}");
                 break;
         }
     }
     catch (Exception ex)
     {
         Logger.Info(pkt.ToString());
         Logger.Error(ex);
         Disconnect();
     }
 }
 public void SendPacket(Packet pkt)
 {
     pending.Enqueue(pkt);
     sendLock.Set();
 }