using System; using System.Net; using System.Timers; using System.Reflection; using System.Net.Sockets; using System.Xml; using FiestaBot.Instances.Networking; using FiestaBot.Manager.Handlers; using System.Collections.Generic; using System.Security.Policy; using FiestaBot.Manager.Game; using FiestaBot.Utilities; namespace FiestaBot.Manager.Networking { internal class ManagerClient : Client { public FiestaCrypto Crypto; public bool InCharSelect = false; public byte LastSlot = 0; public List InUseCharSlots; public Character Character; public List AllCharacters; public ushort ZoneKey = 0; public bool InParty = false; public ManagerClient(IPAddress connectIp, int port) : base(connectIp, port) { Program.ManagerClient = this; InUseCharSlots = new List(); AllCharacters = new List(); } public void SendPacket(Packet serverPacket) { if(IsConnected != 0) { return; } serverPacket.ToArray(Crypto, out var packetBuffer); serverPacket.Dispose(); Send(packetBuffer); Logger.Log(LogType.World, $"Sent packet {serverPacket.Header}:{serverPacket.Type}"); } public override void Connected() { Receive(); Logger.Log(LogType.Socket, "Succesfully connected to world"); } public override void ConnectFailed(SocketException exception) { } public override void Received(byte[] buffer) { Packet clientPacket = new Packet(buffer); if (!clientPacket.SetHeaderAndType()) { Logger.Log(LogType.World, "Unable to read packet header/type"); } else if (Program.ManagerHandlers.HasHandler(clientPacket.Header, clientPacket.Type)) { Logger.Log(LogType.World, $"Got packet {clientPacket.Header}:{clientPacket.Type}"); try { MethodInfo packetMethod = Program.ManagerHandlers.GetHandler(clientPacket.Header, clientPacket.Type); Action packetAction = Program.ManagerHandlers.GetAction(packetMethod, this, clientPacket); packetAction(); } catch { Logger.Log(LogType.World, "Unknown packet: {0}:{1}", clientPacket.Header, clientPacket.Type); } } else { Logger.Log(LogType.World, "Unknown packet: {0}:{1}", clientPacket.Header, clientPacket.Type); } } public override void Disconnected() { Logger.Log(LogType.Socket, "Disconnected from world"); } } }