public void SendTcpPacket(ClientPacketType clientPacketType, Packet packet) { packet.WriteLength(); tcpConnection.SendPacket(packet); Logger.LogEvent(LoggerSection.Network, $"Sent «{Helpers.GetEnumName(clientPacketType)}» TCP packet to the server"); }
private static NetworkPacket ReadPacketValues(ClientPacketType PacketType, NetworkPacket ReadFrom) { switch (PacketType) { //Account Management case (ClientPacketType.AccountLoginRequest): return(AccountManagementPacketHandler.GetValuesAccountLoginRequest(ReadFrom)); case (ClientPacketType.AccountLogoutAlert): return(AccountManagementPacketHandler.GetValuesAccountLogoutAlert(ReadFrom)); case (ClientPacketType.AccountRegistrationRequest): return(AccountManagementPacketHandler.GetValuesAccountRegisterRequest(ReadFrom)); case (ClientPacketType.CharacterDataRequest): return(AccountManagementPacketHandler.GetValuesCharacterDataRequest(ReadFrom)); case (ClientPacketType.CharacterCreationRequest): return(AccountManagementPacketHandler.GetValuesCreateCharacterRequest(ReadFrom)); //Game World State case (ClientPacketType.EnterWorldRequest): return(GameWorldStatePacketHandler.GetValuesEnterWorldRequest(ReadFrom)); case (ClientPacketType.PlayerReadyAlert): return(GameWorldStatePacketHandler.GetValuesNewPlayerReady(ReadFrom)); //Player Communication case (ClientPacketType.PlayerChatMessage): return(PlayerCommunicationPacketHandler.GetValuesClientChatMessage(ReadFrom)); //Player Management case (ClientPacketType.PlayerPositionUpdate): return(PlayerManagementPacketHandler.GetValuesPlayerPositionUpdate(ReadFrom)); case (ClientPacketType.PlayerRotationUpdate): return(PlayerManagementPacketHandler.GetValuesPlayerRotationUpdate(ReadFrom)); case (ClientPacketType.PlayerCameraUpdate): return(PlayerManagementPacketHandler.GetValuesPlayerCameraUpdate(ReadFrom)); case (ClientPacketType.PlayAnimationAlert): return(PlayerManagementPacketHandler.GetValuesPlayAnimationAlert(ReadFrom)); //System case (ClientPacketType.MissedPacketsRequest): return(SystemPacketHandler.GetValuesMissedPacketsRequest(ReadFrom)); case (ClientPacketType.StillConnectedReply): return(SystemPacketHandler.GetValuesStillConnectedReply(ReadFrom)); //Combat case (ClientPacketType.PlayerAttackAlert): return(CombatPacketHandler.GetValuesPlayerAttackAlert(ReadFrom)); case (ClientPacketType.PlayerRespawnRequest): return(CombatPacketHandler.GetValuesPlayerRespawnRequest(ReadFrom)); } return(new NetworkPacket()); }
public static BinaryWriter CreatePacket(ClientPacketType packetId) { MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); writer.Write((byte)packetId); return(writer); }
//Reads a packet of data sent from one of the clients and passes it onto its registered handler function public static void ReadClientPacket(int ClientID, string PacketData) { //Store the total set of packet data into a new PacketData object for easier reading NetworkPacket TotalPacket = new NetworkPacket(PacketData); //Fetch the client connection who sent this to us, making sure they're still active ClientConnection Client = ConnectionManager.GetClient(ClientID); if (Client == null) { MessageLog.Print("ERROR: Client #" + ClientID + " not found, unable to read network packet from them."); return; } //Iterate over all the packet data until we finished reading and handling all of it while (!TotalPacket.FinishedReading()) { //Read the packets order number and packet type enum values int OrderNumber = TotalPacket.ReadInt(); ClientPacketType PacketType = TotalPacket.ReadType(); //Get the rest of the values for this set based on the packet type, then put the orer number back in the front of it NetworkPacket SectionPacket = ReadPacketValues(PacketType, TotalPacket); //Compared this packets order number to see if its arrived in the order we were expecting int ExpectedOrderNumber = Client.LastPacketRecieved + 1; bool InOrder = OrderNumber == ExpectedOrderNumber; //If the packet arrived in order then it gets processed normally if (InOrder) { //Reset the packets data before we pass it to the handler SectionPacket.ResetRemainingData(); //Read away the packet type value as its not needed when processing packets immediately SectionPacket.ReadType(); //Pass the section packet onto its registered handler function if (PacketHandlers.TryGetValue(PacketType, out Packet Packet)) { Packet.Invoke(ClientID, ref SectionPacket); } //Store this as the last packet that we have processed for this client Client.LastPacketRecieved = OrderNumber; } //If packets arrive out of order we tell the client what number we were expecting to receive next so everything since then gets resent else { SystemPacketSender.SendMissingPacketsRequest(ClientID, ExpectedOrderNumber); return; } } }
//Reads a ServerPacketType enum value from the front of the RemainingPacketData, then removes it from that string public ClientPacketType ReadType() { //Get the packet type value from the RemainingPacketData string PacketTypeString = RemainingPacketData.Substring(0, RemainingPacketData.IndexOf(' ')); ClientPacketType PacketTypeValue = (ClientPacketType)Int32.Parse(PacketTypeString); //Trim the packet type value from the RemainingPacketData RemainingPacketData = RemainingPacketData.Substring(RemainingPacketData.IndexOf(' ') + 1); //Return the final ServerPacketType enum value that was requested return(PacketTypeValue); }
public void SendUdpPacket(ClientPacketType clientPacketType, Packet packet) { if (udpConnection == null) { Logger.LogNotice(LoggerSection.Network, "Unable to send udp packet, because udp connection is down"); return; } packet.WriteLength(); udpConnection.SendPacket(packet); Logger.LogEvent(LoggerSection.Network, $"Sent «{Helpers.GetEnumName(clientPacketType)}» UDP packet to the server"); }
public void SendPlayerInputPacket(PlayerInput playerInput) { Action action = () => { const ClientPacketType clientPacketType = ClientPacketType.PlayerInput; Packet packet = new Packet((int)clientPacketType); packet.Write(playerInput); connectionToServer.SendUdpPacket(clientPacketType, packet); }; networkSimulation.SendThroughNetwork(action); }
public void SendWelcomeReceivedPacket() { Action action = () => { const ClientPacketType clientPacketType = ClientPacketType.WelcomeReceived; Packet packet = new Packet((int)clientPacketType); packet.Write(connectionToServer.myPlayerId); packet.Write(mainMenuGamePhase.mainMenu.userNameField.text); packet.Write(GameConfiguration.ApiVersion); connectionToServer.SendTcpPacket(clientPacketType, packet); }; networkSimulation.SendThroughNetwork(action); }
public ClientPacket(ClientPacketType opcode, IWritable writable = null) { using (var writer = new PacketWriter()) { writer.Write((byte)opcode); if (writable != null) { writable.Write(writer); } var stream = writer.GetStream(); Data = stream.ToArray(); Size = stream.Length; } Opcode = opcode; }
public bool Deserialize(Stream stream, IPacketEncryptor packetEncryption) { byte typeAsByte; stream.PacketReadByte(out typeAsByte); this.Type = (ClientPacketType)typeAsByte; int playerId; stream.PacketReadInt(out playerId); this.PlayerId = new PlayerId(playerId); switch (this.Type) { case ClientPacketType.PlayerInput: return(this.PlayerInputPacket.Deserialize(stream)); case ClientPacketType.ControlPlane: return(this.ControlPacket.Deserialize(stream)); } return(false); }
public static void ReceivePacket(ClientPacketType packet, BinaryReader reader) { switch (packet) { case ClientPacketType.SpawnCharacter: SpawnCharacter(reader); break; case ClientPacketType.DespawnCharacter: DespawnCharacter(reader); break; case ClientPacketType.SetLocalPlayer: SetLocalPlayer(reader); break; case ClientPacketType.SetPlayerState: SetPlayerState(reader); break; case ClientPacketType.ChatMessageReceive: ReceiveChatMessage(reader); break; case ClientPacketType.SyncItems: ReceiveItems(reader); break; case ClientPacketType.DamageInfoReceive: DamageReceive(reader); break; case ClientPacketType.SyncStat: StatReceive(reader); break; } }
//Writes a ClientPacketType enum value onto the end of the current PacketData public void WriteType(ClientPacketType PacketType) { //Just convert the enum to an integer value and write that in WriteInt((int)PacketType); }
private void ParseClientPacket(ClientPacketType type, NetworkMessage message) { switch (type) { case ClientPacketType.Logout: ParseLogout(); break; case ClientPacketType.ItemMove: ParseItemMove(message); break; //case ClientPacketType.ShopBuy: //case ClientPacketType.ShopSell: //case ClientPacketType.ShopClose: case ClientPacketType.ItemUse: ParseItemUse(message); break; case ClientPacketType.ItemUseOn: ParseItemUseOn(message); break; //case ClientPacketType.ItemRotate: case ClientPacketType.LookAt: ParseLookAt(message); break; case ClientPacketType.PlayerSpeech: ParsePlayerSpeech(message); break; case ClientPacketType.ChannelList: SendChannelList(Player); break; case ClientPacketType.ClientChannelOpen: ParseClientChannelOpen(message); break; case ClientPacketType.ChannelClose: ParseChannelClose(message); break; //case ClientPacketType.Attack: //case ClientPacketType.Follow: //case ClientPacketType.CancelMove: case ClientPacketType.ItemUseBattlelist: ParseItemUseBattlelist(message); break; case ClientPacketType.ContainerClose: ParseContainerClose(message); break; case ClientPacketType.ContainerOpenParent: ParseContainerOpenParent(message); break; case ClientPacketType.TurnNorth: ParseTurn(Direction.North); break; case ClientPacketType.TurnWest: ParseTurn(Direction.East); break; case ClientPacketType.TurnSouth: ParseTurn(Direction.South); break; case ClientPacketType.TurnEast: ParseTurn(Direction.West); break; case ClientPacketType.AutoWalk: ParseAutoWalk(message); break; case ClientPacketType.AutoWalkCancel: ParseAutoWalkCancel(); break; case ClientPacketType.VipAdd: ParseVipAdd(message); break; case ClientPacketType.VipRemove: ParseVipRemove(message); break; case ClientPacketType.RequestOutfit: SendOutfitWindow(); break; case ClientPacketType.ChangeOutfit: ParseChangeOutfit(message); break; //case ClientPacketType.Ping: case ClientPacketType.FightModes: ParseFightModes(message); break; //case ClientPacketType.ContainerUpdate: //case ClientPacketType.TileUpdate: case ClientPacketType.PrivateChannelOpen: ParsePrivateChannelOpen(message); break; //case ClientPacketType.NpcChannelClose: // break; case ClientPacketType.MoveNorth: ParseWalk(Direction.North); break; case ClientPacketType.MoveEast: ParseWalk(Direction.East); break; case ClientPacketType.MoveSouth: ParseWalk(Direction.South); break; case ClientPacketType.MoveWest: ParseWalk(Direction.West); break; case ClientPacketType.MoveNorthEast: ParseWalk(Direction.NorthEast); break; case ClientPacketType.MoveSouthEast: ParseWalk(Direction.SouthEast); break; case ClientPacketType.MoveSouthWest: ParseWalk(Direction.SouthWest); break; case ClientPacketType.MoveNorthWest: ParseWalk(Direction.NorthWest); break; default: Server.Log("Unhandled packet from {0}: {1}", Player.ToString(), type); break; } }
public static ClientPacket CreateInstance(Client client, ClientPacketType type) { switch (type) { case ClientPacketType.Invalid: return(new ClientPacket()); case ClientPacketType.Login: return(new ClientPackets.Login(client)); case ClientPacketType.SecondaryLogin: return(new ClientPackets.SecondaryLogin(client)); case ClientPacketType.EnterWorld: return(new ClientPackets.EnterWorld(client)); case ClientPacketType.QuitGame: return(new ClientPackets.QuitGame(client)); case ClientPacketType.ConnectionPingBack: return(new ClientPackets.ConnectionPingBack(client)); case ClientPacketType.Ping: return(new ClientPackets.Ping(client)); case ClientPacketType.PingBack: return(new ClientPackets.PingBack(client)); case ClientPacketType.PerformanceMetrics: return(new ClientPackets.PerformanceMetrics(client)); case ClientPacketType.StashAction: return(new ClientPackets.StashAction(client)); case ClientPacketType.DepotSearchRetrieve: return(new ClientPackets.DepotSearchRetrieve(client)); case ClientPacketType.TrackBestiaryRace: return(new ClientPackets.TrackBestiaryRace(client)); case ClientPacketType.PartyHuntAnalyser: return(new ClientPackets.PartyHuntAnalyser(client)); case ClientPacketType.TeamFinderAssembleTeam: return(new ClientPackets.TeamFinderAssembleTeam(client)); case ClientPacketType.TeamFinderJoinTeam: return(new ClientPackets.TeamFinderJoinTeam(client)); case ClientPacketType.ClientCheck: return(new ClientPackets.ClientCheck(client)); case ClientPacketType.GoPath: return(new ClientPackets.GoPath(client)); case ClientPacketType.GoNorth: return(new ClientPackets.GoNorth(client)); case ClientPacketType.GoEast: return(new ClientPackets.GoEast(client)); case ClientPacketType.GoSouth: return(new ClientPackets.GoSouth(client)); case ClientPacketType.GoWest: return(new ClientPackets.GoWest(client)); case ClientPacketType.Stop: return(new ClientPackets.Stop(client)); case ClientPacketType.GoNorthEast: return(new ClientPackets.GoNorthEast(client)); case ClientPacketType.GoSouthEast: return(new ClientPackets.GoSouthEast(client)); case ClientPacketType.GoSouthWest: return(new ClientPackets.GoSouthWest(client)); case ClientPacketType.GoNorthWest: return(new ClientPackets.GoNorthWest(client)); case ClientPacketType.RotateNorth: return(new ClientPackets.RotateNorth(client)); case ClientPacketType.RotateEast: return(new ClientPackets.RotateEast(client)); case ClientPacketType.RotateSouth: return(new ClientPackets.RotateSouth(client)); case ClientPacketType.RotateWest: return(new ClientPackets.RotateWest(client)); case ClientPacketType.Teleport: return(new ClientPackets.Teleport(client)); case ClientPacketType.EquipObject: return(new ClientPackets.EquipObject(client)); case ClientPacketType.MoveObject: return(new ClientPackets.MoveObject(client)); case ClientPacketType.LookNpcTrade: return(new ClientPackets.LookNpcTrade(client)); case ClientPacketType.BuyObject: return(new ClientPackets.BuyObject(client)); case ClientPacketType.SellObject: return(new ClientPackets.SellObject(client)); case ClientPacketType.CloseNpcTrade: return(new ClientPackets.CloseNpcChannel(client)); case ClientPacketType.TradeObject: return(new ClientPackets.TradeObject(client)); case ClientPacketType.LookTrade: return(new ClientPackets.LookTrade(client)); case ClientPacketType.AcceptTrade: return(new ClientPackets.AcceptTrade(client)); case ClientPacketType.RejectTrade: return(new ClientPackets.RejectTrade(client)); case ClientPacketType.FriendSystemAction: return(new ClientPackets.FriendSystemAction(client)); case ClientPacketType.UseObject: return(new ClientPackets.UseObject(client)); case ClientPacketType.UseTwoObjects: return(new ClientPackets.UseTwoObjects(client)); case ClientPacketType.UseOnCreature: return(new ClientPackets.UseOnCreature(client)); case ClientPacketType.TurnObject: return(new ClientPackets.TurnObject(client)); case ClientPacketType.CloseContainer: return(new ClientPackets.CloseContainer(client)); case ClientPacketType.UpContainer: return(new ClientPackets.UpContainer(client)); case ClientPacketType.EditText: return(new ClientPackets.EditText(client)); case ClientPacketType.EditList: return(new ClientPackets.EditList(client)); case ClientPacketType.ToggleWrapState: return(new ClientPackets.ToggleWrapState(client)); case ClientPacketType.Look: return(new ClientPackets.Look(client)); case ClientPacketType.LookAtCreature: return(new ClientPackets.LookAtCreature(client)); case ClientPacketType.JoinAggression: return(new ClientPackets.JoinAggression(client)); case ClientPacketType.QuickLoot: return(new ClientPackets.QuickLoot(client)); case ClientPacketType.LootContainer: return(new ClientPackets.LootContainer(client)); case ClientPacketType.QuickLootBlackWhitelist: return(new ClientPackets.QuickLootBlackWhitelist(client)); case ClientPacketType.OpenDepotSearch: return(new ClientPackets.OpenDepotSearch(client)); case ClientPacketType.CloseDepotSearch: return(new ClientPackets.CloseDepotSearch(client)); case ClientPacketType.DepotSearchType: return(new ClientPackets.DepotSearchType(client)); case ClientPacketType.OpenParentContainer: return(new ClientPackets.OpenParentContainer(client)); case ClientPacketType.Talk: return(new ClientPackets.Talk(client)); case ClientPacketType.GetChannels: return(new ClientPackets.GetChannels(client)); case ClientPacketType.JoinChannel: return(new ClientPackets.JoinChannel(client)); case ClientPacketType.LeaveChannel: return(new ClientPackets.LeaveChannel(client)); case ClientPacketType.PrivateChannel: return(new ClientPackets.PrivateChannel(client)); case ClientPacketType.GuildMessage: return(new ClientPackets.GuildMessage(client)); case ClientPacketType.EditGuildMessage: return(new ClientPackets.EditGuildMessage(client)); case ClientPacketType.CloseNpcChannel: return(new ClientPackets.CloseNpcChannel(client)); case ClientPacketType.SetTactics: return(new ClientPackets.SetTactics(client)); case ClientPacketType.Attack: return(new ClientPackets.Attack(client)); case ClientPacketType.Follow: return(new ClientPackets.Follow(client)); case ClientPacketType.InviteToParty: return(new ClientPackets.InviteToParty(client)); case ClientPacketType.JoinParty: return(new ClientPackets.JoinParty(client)); case ClientPacketType.RevokeInvitation: return(new ClientPackets.RevokeInvitation(client)); case ClientPacketType.PassLeadership: return(new ClientPackets.PassLeadership(client)); case ClientPacketType.LeaveParty: return(new ClientPackets.LeaveParty(client)); case ClientPacketType.ShareExperience: return(new ClientPackets.ShareExperience(client)); case ClientPacketType.DisbandParty: return(new ClientPackets.DisbandParty(client)); case ClientPacketType.OpenChannel: return(new ClientPackets.OpenChannel(client)); case ClientPacketType.InviteToChannel: return(new ClientPackets.InviteToChannel(client)); case ClientPacketType.ExcludeFromChannel: return(new ClientPackets.ExcludeFromChannel(client)); case ClientPacketType.CyclopediaHouseAction: return(new ClientPackets.CyclopediaHouseAction(client)); case ClientPacketType.Highscores: return(new ClientPackets.Highscores(client)); case ClientPacketType.PreyHuntingTaskAction: return(new ClientPackets.PreyHuntingTaskAction(client)); case ClientPacketType.Cancel: return(new ClientPackets.Cancel(client)); case ClientPacketType.ClaimTournamentReward: return(new ClientPackets.ClaimTournamentReward(client)); case ClientPacketType.TournamentInformation: return(new ClientPackets.TournamentInformation(client)); case ClientPacketType.SubscribeToUpdates: return(new ClientPackets.SubscribeToUpdates(client)); case ClientPacketType.TournamentLeaderboard: return(new ClientPackets.TournamentLeaderboard(client)); case ClientPacketType.TournamentTicketAction: return(new ClientPackets.TournamentTicketAction(client)); case ClientPacketType.GetTransactionDetails: return(new ClientPackets.GetTransactionDetails(client)); case ClientPacketType.UpdateExivaOptions: return(new ClientPackets.UpdateExivaOptions(client)); case ClientPacketType.BrowseField: return(new ClientPackets.BrowseField(client)); case ClientPacketType.SeekInContainer: return(new ClientPackets.SeekInContainer(client)); case ClientPacketType.InspectObject: return(new ClientPackets.InspectObject(client)); case ClientPacketType.InspectPlayer: return(new ClientPackets.InspectPlayer(client)); case ClientPacketType.BlessingsDialog: return(new ClientPackets.BlessingsDialog(client)); case ClientPacketType.TrackQuestflags: return(new ClientPackets.TrackQuestflags(client)); case ClientPacketType.MarketStatistics: return(new ClientPackets.MarketStatistics(client)); case ClientPacketType.GetOutfit: return(new ClientPackets.GetOutfit(client)); case ClientPacketType.SetOutfit: return(new ClientPackets.SetOutfit(client)); case ClientPacketType.Mount: return(new ClientPackets.Mount(client)); case ClientPacketType.ApplyImbuement: return(new ClientPackets.ApplyImbuement(client)); case ClientPacketType.ApplyClearingCharm: return(new ClientPackets.ApplyClearingCharm(client)); case ClientPacketType.ClosedImbuingDialog: return(new ClientPackets.ClosedImbuingDialog(client)); case ClientPacketType.OpenRewardWall: return(new ClientPackets.OpenRewardWall(client)); case ClientPacketType.DailyRewardHistory: return(new ClientPackets.DailyRewardHistory(client)); case ClientPacketType.CollectDailyReward: return(new ClientPackets.CollectDailyReward(client)); case ClientPacketType.CyclopediaMapAction: return(new ClientPackets.CyclopediaMapAction(client)); case ClientPacketType.AddBuddy: return(new ClientPackets.AddBuddy(client)); case ClientPacketType.RemoveBuddy: return(new ClientPackets.RemoveBuddy(client)); case ClientPacketType.EditBuddy: return(new ClientPackets.EditBuddy(client)); case ClientPacketType.BuddyGroup: return(new ClientPackets.BuddyGroup(client)); case ClientPacketType.MarkGameNewsAsRead: return(new ClientPackets.MarkGameNewsAsRead(client)); case ClientPacketType.OpenMonsterCyclopedia: return(new ClientPackets.OpenMonsterCyclopedia(client)); case ClientPacketType.OpenMonsterCyclopediaMonsters: return(new ClientPackets.OpenMonsterCyclopediaMonsters(client)); case ClientPacketType.OpenMonsterCyclopediaRace: return(new ClientPackets.OpenMonsterCyclopediaRace(client)); case ClientPacketType.MonsterBonusEffectAction: return(new ClientPackets.MonsterBonusEffectAction(client)); case ClientPacketType.OpenCyclopediaCharacterInfo: return(new ClientPackets.OpenCyclopediaCharacterInfo(client)); case ClientPacketType.BugReport: return(new ClientPackets.BugReport(client)); case ClientPacketType.ThankYou: return(new ClientPackets.ThankYou(client)); case ClientPacketType.GetOfferDescription: return(new ClientPackets.GetOfferDescription(client)); case ClientPacketType.StoreEvent: return(new ClientPackets.StoreEvent(client)); case ClientPacketType.FeatureEvent: return(new ClientPackets.FeatureEvent(client)); case ClientPacketType.PreyAction: return(new ClientPackets.PreyAction(client)); case ClientPacketType.SetHirelingName: return(new ClientPackets.SetHirelingName(client)); case ClientPacketType.RequestResourceBalance: return(new ClientPackets.RequestResourceBalance(client)); case ClientPacketType.Greet: return(new ClientPackets.Greet(client)); case ClientPacketType.TransferCurrency: return(new ClientPackets.TransferCurrency(client)); case ClientPacketType.GetQuestLog: return(new ClientPackets.GetQuestLog(client)); case ClientPacketType.GetQuestLine: return(new ClientPackets.GetQuestLine(client)); case ClientPacketType.RuleViolationReport: return(new ClientPackets.RuleViolationReport(client)); case ClientPacketType.GetObjectInfo: return(new ClientPackets.GetObjectInfo(client)); case ClientPacketType.MarketLeave: return(new ClientPackets.MarketLeave(client)); case ClientPacketType.MarketBrowse: return(new ClientPackets.MarketBrowse(client)); case ClientPacketType.MarketCreate: return(new ClientPackets.MarketCreate(client)); case ClientPacketType.MarketCancel: return(new ClientPackets.MarketCancel(client)); case ClientPacketType.MarketAccept: return(new ClientPackets.MarketAccept(client)); case ClientPacketType.AnswerModalDialog: return(new ClientPackets.AnswerModalDialog(client)); case ClientPacketType.OpenIngameShop: return(new ClientPackets.OpenIngameShop(client)); case ClientPacketType.RequestShopOffers: return(new ClientPackets.RequestShopOffers(client)); case ClientPacketType.BuyIngameShopOffer: return(new ClientPackets.BuyIngameShopOffer(client)); case ClientPacketType.OpenTransactionHistory: return(new ClientPackets.OpenTransactionHistory(client)); case ClientPacketType.GetTransactionHistory: return(new ClientPackets.GetTransactionHistory(client)); default: throw new Exception($"[ClientPacket.Create] Invalid packet type: {type}"); } }
private void ParseClientPacket(ClientPacketType type, NetworkMessage message) { switch (type) { case ClientPacketType.Logout: ParseLogout(); break; case ClientPacketType.ItemMove: ParseItemMove(message); break; //case ClientPacketType.ShopBuy: //case ClientPacketType.ShopSell: //case ClientPacketType.ShopClose: case ClientPacketType.ItemUse: ParseItemUse(message); break; case ClientPacketType.ItemUseOn: ParseItemUseOn(message); break; //case ClientPacketType.ItemRotate: case ClientPacketType.LookAt: ParseLookAt(message); break; case ClientPacketType.PlayerSpeech: ParsePlayerSpeech(message); break; case ClientPacketType.ChannelList: SendChannelList(Player); break; case ClientPacketType.ClientChannelOpen: ParseClientChannelOpen(message); break; case ClientPacketType.ChannelClose: ParseChannelClose(message); break; //case ClientPacketType.Attack: //case ClientPacketType.Follow: //case ClientPacketType.CancelMove: case ClientPacketType.ItemUseBattlelist: ParseItemUseBattlelist(message); break; case ClientPacketType.ContainerClose: ParseContainerClose(message); break; case ClientPacketType.ContainerOpenParent: ParseContainerOpenParent(message); break; case ClientPacketType.TurnNorth: ParseTurn(Direction.North); break; case ClientPacketType.TurnWest: ParseTurn(Direction.East); break; case ClientPacketType.TurnSouth: ParseTurn(Direction.South); break; case ClientPacketType.TurnEast: ParseTurn(Direction.West); break; case ClientPacketType.AutoWalk: ParseAutoWalk(message); break; case ClientPacketType.AutoWalkCancel: ParseAutoWalkCancel(); break; case ClientPacketType.VipAdd: ParseVipAdd(message); break; case ClientPacketType.VipRemove: ParseVipRemove(message); break; case ClientPacketType.RequestOutfit: SendOutfitWindow(); break; case ClientPacketType.ChangeOutfit: ParseChangeOutfit(message); break; //case ClientPacketType.Ping: case ClientPacketType.FightModes: ParseFightModes(message); break; //case ClientPacketType.ContainerUpdate: //case ClientPacketType.TileUpdate: case ClientPacketType.PrivateChannelOpen: ParsePrivateChannelOpen(message); break; //case ClientPacketType.NpcChannelClose: // break; case ClientPacketType.MoveNorth: ParseWalk(Direction.North); break; case ClientPacketType.MoveEast: ParseWalk(Direction.East); break; case ClientPacketType.MoveSouth: ParseWalk(Direction.South); break; case ClientPacketType.MoveWest: ParseWalk(Direction.West); break; case ClientPacketType.MoveNorthEast: ParseWalk(Direction.NorthEast); break; case ClientPacketType.MoveSouthEast: ParseWalk(Direction.SouthEast); break; case ClientPacketType.MoveSouthWest: ParseWalk(Direction.SouthWest); break; case ClientPacketType.MoveNorthWest: ParseWalk(Direction.NorthWest); break; default: Server.Log("Unhandled packet from {0}: {1}", Player.ToString(), type); break; } }
IEnumerator Start() { Instance = this; using (client = new Host()) { Address address = new Address(); address.SetHost(ip); address.Port = port; client.Create(); peer = client.Connect(address); ENet.Event netEvent; while (true) { bool polled = false; while (!polled) { if (client.CheckEvents(out netEvent) <= 0) { if (client.Service(15, out netEvent) <= 0) { break; } polled = true; } switch (netEvent.Type) { case ENet.EventType.None: break; case ENet.EventType.Connect: Debug.Log("Client connected to server"); break; case ENet.EventType.Disconnect: Debug.Log("Client disconnected from server"); break; case ENet.EventType.Timeout: Debug.Log("Client connection timeout"); break; case ENet.EventType.Receive: Debug.Log("Packet received from server - Channel ID: " + netEvent.ChannelID + ", Data length: " + netEvent.Packet.Length); byte[] buffer = new byte[1024]; netEvent.Packet.CopyTo(buffer); MemoryStream stream = new MemoryStream(buffer); BinaryReader reader = new BinaryReader(stream); while (stream.Position < netEvent.Packet.Length) { byte packetId = reader.ReadByte(); ClientPacketType packetType = (ClientPacketType)packetId; IncomingPackets.ReceivePacket(packetType, reader); } netEvent.Packet.Dispose(); break; } } yield return(0); } client.Flush(); } }