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");
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
    public static BinaryWriter CreatePacket(ClientPacketType packetId)
    {
        MemoryStream stream = new MemoryStream();
        BinaryWriter writer = new BinaryWriter(stream);

        writer.Write((byte)packetId);

        return(writer);
    }
Exemplo n.º 4
0
        //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;
                }
            }
        }
Exemplo n.º 5
0
        //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");
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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;
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
    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;
        }
    }
Exemplo n.º 12
0
 //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);
 }
Exemplo n.º 13
0
        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;
            }
        }
Exemplo n.º 14
0
        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}");
            }
        }
Exemplo n.º 15
0
 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;
     }
 }
Exemplo n.º 16
0
    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();
        }
    }