using System; using System.Collections; using System.Linq; using System.Net.Sockets; using System.ServiceModel.Channels; using System.Threading; using Chop.Game.Messages; using Chop.Game.Messages.IDs.RELEASE63_201203151102_360144060; using Chop.Game.Messages.Incoming.advertisement; using Chop.Game.Messages.Incoming.avatar; using Chop.Game.Messages.Incoming.catalog; using Chop.Game.Messages.Incoming.facebook; using Chop.Game.Messages.Incoming.friendlist; using Chop.Game.Messages.Incoming.Friendlist; using Chop.Game.Messages.Incoming.handshake; using Chop.Game.Messages.Incoming.Handshake; using Chop.Game.Messages.Incoming.help; using Chop.Game.Messages.Incoming.inventory.achievements; using Chop.Game.Messages.Incoming.inventory.avatareffect; using Chop.Game.Messages.Incoming.inventory.badges; using Chop.Game.Messages.Incoming.inventory.furni; using Chop.Game.Messages.Incoming.inventory.pets; using Game.Messages.Incoming.Inventory.Purse; using Chop.Game.Messages.Incoming.inventory.trading; using Chop.Game.Messages.Incoming.marketplace; using Chop.Game.Messages.Incoming.moderator; using Chop.Game.Messages.Incoming.navigator; using Chop.Game.Messages.Incoming.notifications; using Chop.Game.Messages.Incoming.poll; using Chop.Game.Messages.Incoming.quest; using Chop.Game.Messages.Incoming.recycler; using Chop.Game.Messages.Incoming.register; using Chop.Game.Messages.Incoming.room.action; using Chop.Game.Messages.Incoming.room.avatar; using Chop.Game.Messages.Incoming.room.chat; using Chop.Game.Messages.Incoming.room.engine; using Chop.Game.Messages.Incoming.room.furniture; using Chop.Game.Messages.Incoming.room.pets; using Chop.Game.Messages.Incoming.room.publicroom; using Chop.Game.Messages.Incoming.room.session; using Chop.Game.Messages.Incoming.roomsettings; using Chop.Game.Messages.Incoming.sound; using Chop.Game.Messages.Incoming.tracking; using Chop.Game.Messages.Incoming.userdefinedroomevents; using Chop.Game.Messages.Incoming.users; using Chop.Game.Messages.Incoming.Users; using Game.Messages.Incoming.Handshake; using Game.Messages.Incoming.Inventory.Purse; namespace Chop { public class ClientManager { private int _maxClients; private Hashtable _clients; private Thread _pingPong; internal BufferManager BufferManager; private string _lastConnectionIp; // For anti-ddos internal delegate void requestHandler(); internal IMessageHandler[] RequestHandlers; public void Init(int maxClients) { _clients = new Hashtable(); _maxClients = maxClients; BufferManager = BufferManager.CreateBufferManager(_maxClients + 10, 1024); RequestHandlers = new IMessageHandler[4001]; RegisterGlobal(); //_pingPong = new Thread(Pong); //_pingPong.Start(); } internal void RegisterGlobal() { RequestHandlers[Requests.SayHello] = new SayHelloMessageHandler(); RequestHandlers[206] = new InitCryptoMessageHandler(); RequestHandlers[2002] = new GenerateSecretKeyEvent(); RequestHandlers[1170] = new VersionCheckMessageComposer(); RequestHandlers[813] = new UniqueIDMessageComposer(); RequestHandlers[1817] = new GetSessionParametersMessageComposer(); RequestHandlers[415] = new SSOTicketMessageHandler(); RequestHandlers[756] = new TryLoginMessageComposer(); RequestHandlers[196] = new PongMessageComposer(); RequestHandlers[7] = new InfoRetrieveMessageHandler(); RequestHandlers[512] = new DisconnectMessageComposer(); RequestHandlers[12] = new MessengerInitEvent(); RequestHandlers[15] = new FriendListUpdateEvent(); RequestHandlers[33] = new SendMsgEvent(); RequestHandlers[37] = new AcceptBuddyEvent(); RequestHandlers[38] = new DeclineBuddyEvent(); RequestHandlers[39] = new RequestBuddyEvent(); RequestHandlers[40] = new RemoveBuddyEvent(); RequestHandlers[41] = new HabboSearchEvent(); RequestHandlers[233] = new GetBuddyRequestsEvent(); RequestHandlers[262] = new FollowFriendEvent(); RequestHandlers[34] = new SendRoomInviteEvent(); RequestHandlers[490] = new FindNewFriendsMessageComposer(); RequestHandlers[500] = new GetEventStreamComposer(); RequestHandlers[501] = new SetEventStreamingAllowedComposer(); RequestHandlers[502] = new LikeStreamEventMessageComposer(); RequestHandlers[8] = new GetCreditsInfoEvent(); RequestHandlers[66] = new RequestRoomPropertySet(); RequestHandlers[404] = new RequestFurniInventoryComposer(); RequestHandlers[372] = new AvatarEffectSelectedComposer(); RequestHandlers[373] = new AvatarEffectActivatedComposer(); RequestHandlers[157] = new GetBadgesComposer(); RequestHandlers[158] = new SetActivatedBadgesComposer(); RequestHandlers[3032] = new GetBadgePointLimitsComposer(); RequestHandlers[370] = new GetAchievementsComposer(); RequestHandlers[68] = new UnacceptTradingComposer(); RequestHandlers[69] = new AcceptTradingComposer(); RequestHandlers[70] = new CloseTradingComposer(); RequestHandlers[71] = new OpenTradingComposer(); RequestHandlers[72] = new AddItemToTradeComposer(); RequestHandlers[402] = new ConfirmAcceptTradingComposer(); RequestHandlers[403] = new ConfirmDeclineTradingComposer(); RequestHandlers[405] = new RemoveItemFromTradeComposer(); RequestHandlers[3000] = new GetPetInventoryComposer(); RequestHandlers[3010] = new MakeOfferMessageComposer(); RequestHandlers[3011] = new GetMarketplaceConfigurationMessageComposer(); RequestHandlers[3012] = new GetMarketplaceCanMakeOfferComposer(); RequestHandlers[3013] = new BuyMarketplaceTokensMessageComposer(); RequestHandlers[3014] = new BuyOfferMessageComposer(); RequestHandlers[3015] = new CancelOfferMessageComposer(); RequestHandlers[3016] = new RedeemOfferCreditsMessageComposer(); RequestHandlers[3018] = new GetOffersMessageComposer(); RequestHandlers[3019] = new GetOwnOffersMessageComposer(); RequestHandlers[3020] = new GetMarketplaceItemStatsComposer(); RequestHandlers[20] = new DeleteFavouriteRoomMessageComposer(); RequestHandlers[19] = new AddFavouriteRoomMessageComposer(); RequestHandlers[151] = new GetUserFlatCatsMessageComposer(); RequestHandlers[345] = new CanCreateEventMessageComposer(); RequestHandlers[346] = new CreateEventMessageComposer(); RequestHandlers[347] = new CancelEventMessageComposer(); RequestHandlers[348] = new EditEventMessageComposer(); RequestHandlers[400] = new GetRoomSettingsMessageComposer(); RequestHandlers[401] = new SaveRoomSettingsMessageComposer(); RequestHandlers[23] = new DeleteRoomMessageComposer(); RequestHandlers[380] = new GetOfficialRoomsMessageComposer(); RequestHandlers[382] = new GetPopularRoomTagsMessageComposer(); RequestHandlers[384] = new UpdateNavigatorSettingsMessageComposer(); RequestHandlers[385] = new GetGuestRoomMessageComposer(); RequestHandlers[386] = new UpdateRoomThumbnailMessageComposer(); RequestHandlers[387] = new CanCreateRoomMessageComposer(); RequestHandlers[29] = new CreateFlatMessageComposer(); RequestHandlers[261] = new RateFlatMessageComposer(); RequestHandlers[388] = new GetPublicSpaceCastLibsMessageComposer(); RequestHandlers[430] = new PopularRoomsSearchMessageComposer(); RequestHandlers[431] = new RoomsWithHighestScoreSearchMessageComposer(); RequestHandlers[432] = new MyFriendsRoomsSearchMessageComposer(); RequestHandlers[433] = new RoomsWhereMyFriendsAreSearchMessageComposer(); RequestHandlers[434] = new MyRoomsSearchMessageComposer(); RequestHandlers[435] = new MyFavouriteRoomsSearchMessageComposer(); RequestHandlers[436] = new MyRoomHistorySearchMessageComposer(); RequestHandlers[437] = new RoomTextSearchMessageComposer(); RequestHandlers[438] = new RoomTagSearchMessageComposer(); RequestHandlers[439] = new LatestEventsSearchMessageComposer(); RequestHandlers[483] = new ToggleStaffPickMessageComposer(); RequestHandlers[3004] = new GetPetCommandsMessageComposer(); RequestHandlers[2] = new OpenConnectionMessageComposer(); RequestHandlers[391] = new OpenFlatConnectionMessageComposer(); RequestHandlers[52] = new ChatMessageComposer(); RequestHandlers[55] = new ShoutMessageComposer(); RequestHandlers[56] = new WhisperMessageComposer(); RequestHandlers[317] = new StartTypingMessageComposer(); RequestHandlers[318] = new CancelTypingMessageComposer(); RequestHandlers[104] = new SignMessageComposer(); RequestHandlers[484] = new ChangeMottoMessageComposer(); RequestHandlers[59] = new GoToFlatMessageComposer(); RequestHandlers[390] = new GetRoomEntryDataMessageComposer(); RequestHandlers[392] = new UseFurnitureMessageComposer(); RequestHandlers[67] = new PickupObjectMessageComposer(); RequestHandlers[73] = new MoveObjectMessageComposer(); RequestHandlers[74] = new SetObjectDataMessageComposer(); RequestHandlers[75] = new MoveAvatarMessageComposer(); RequestHandlers[90] = new PlaceObjectMessageComposer(); RequestHandlers[91] = new MoveWallItemMessageComposer(); RequestHandlers[3002] = new PlacePetMessageComposer(); RequestHandlers[3003] = new RemovePetFromFlatMessageComposer(); RequestHandlers[3103] = new ViralTeaserFoundMessageComposer(); RequestHandlers[3110] = new GetMOTDEvent(); RequestHandlers[3105] = new GetUserNotificationsMessageComposer(); RequestHandlers[211] = new ChangeQueueMessageComposer(); RequestHandlers[341] = new RoomDimmerGetPresetsMessageComposer(); RequestHandlers[342] = new RoomDimmerSavePresetMessageComposer(); RequestHandlers[343] = new RoomDimmerChangeStateMessageComposer(); RequestHandlers[393] = new UseWallItemMessageComposer(); RequestHandlers[83] = new GetItemDataMessageComposer(); RequestHandlers[84] = new SetItemDataMessageComposer(); RequestHandlers[85] = new RemoveItemMessageComposer(); RequestHandlers[3104] = new ViralFurniStatusMessageComposer(); RequestHandlers[3001] = new GetPetInfoMessageComposer(); RequestHandlers[215] = new GetFurnitureAliasesMessageComposer(); RequestHandlers[53] = new QuitMessageComposer(); RequestHandlers[3254] = new PlacePostItMessageComposer(); RequestHandlers[3255] = new AddSpamWallPostItMessageComposer(); RequestHandlers[93] = new DanceMessageComposer(); RequestHandlers[94] = new WaveMessageComposer(); RequestHandlers[79] = new LookToMessageComposer(); RequestHandlers[76] = new ThrowDiceMessageComposer(); RequestHandlers[77] = new DiceOffMessageComposer(); RequestHandlers[78] = new PresentOpenMessageComposer(); RequestHandlers[183] = new CreditFurniRedeemMessageComposer(); RequestHandlers[232] = new EnterOneWayDoorMessageComposer(); RequestHandlers[247] = new SpinWheelOfFortuneMessageComposer(); RequestHandlers[314] = new SetRandomStateMessageComposer(); RequestHandlers[480] = new SetClothingChangeDataMessageComposer(); RequestHandlers[3100] = new QuestVendingWallItemMessageComposer(); RequestHandlers[3006] = new OpenPetPackageMessageComposer(); RequestHandlers[3252] = new OpenWelcomeGiftComposer(); RequestHandlers[95] = new KickUserMessageComposer(); RequestHandlers[96] = new AssignRightsMessageComposer(); RequestHandlers[97] = new RemoveRightsMessageComposer(); RequestHandlers[98] = new LetUserInMessageComposer(); RequestHandlers[155] = new RemoveAllRightsMessageComposer(); RequestHandlers[320] = new BanUserMessageComposer(); RequestHandlers[440] = new CallGuideBotMessageComposer(); RequestHandlers[441] = new KickBotMessageComposer(); RequestHandlers[263] = new GetUserTagsMessageComposer(); RequestHandlers[159] = new GetSelectedBadgesMessageComposer(); RequestHandlers[230] = new GetHabboGroupBadgesMessageComposer(); RequestHandlers[231] = new GetHabboGroupDetailsMessageComposer(); RequestHandlers[3257] = new JoinHabboGroupMessageComposer(); RequestHandlers[3258] = new SelectFavouriteHabboGroupMessageComposer(); RequestHandlers[3259] = new DeselectFavouriteHabboGroupMessageComposer(); RequestHandlers[3260] = new GetHabboGroupsWhereMemberMessageComposer(); RequestHandlers[319] = new IgnoreUserMessageComposer(); RequestHandlers[321] = new GetIgnoredUsersMessageComposer(); RequestHandlers[322] = new UnignoreUserMessageComposer(); RequestHandlers[371] = new RespectUserMessageComposer(); RequestHandlers[3005] = new RespectPetMessageComposer(); RequestHandlers[450] = new PickIssuesMessageComposer(); RequestHandlers[451] = new ReleaseIssuesMessageComposer(); RequestHandlers[452] = new CloseIssuesMessageComposer(); RequestHandlers[454] = new GetModeratorUserInfoMessageComposer(); RequestHandlers[455] = new GetUserChatlogMessageComposer(); RequestHandlers[456] = new GetRoomChatlogMessageComposer(); RequestHandlers[457] = new GetCfhChatlogMessageComposer(); RequestHandlers[458] = new GetRoomVisitsMessageComposer(); RequestHandlers[459] = new GetModeratorRoomInfoMessageComposer(); RequestHandlers[460] = new ModerateRoomMessageComposer(); RequestHandlers[461] = new ModAlertMessageComposer(); RequestHandlers[462] = new ModMessageMessageComposer(); RequestHandlers[463] = new ModKickMessageComposer(); RequestHandlers[464] = new ModBanMessageComposer(); RequestHandlers[200] = new ModeratorActionMessageComposer(); RequestHandlers[453] = new CallForHelpMessageComposer(); RequestHandlers[237] = new GetPendingCallsForHelpMessageComposer(); RequestHandlers[238] = new DeletePendingCallsForHelpMessageComposer(); RequestHandlers[416] = new GetClientFaqsMessageComposer(); RequestHandlers[417] = new GetFaqCategoriesMessageComposer(); RequestHandlers[418] = new GetFaqTextMessageComposer(); RequestHandlers[419] = new SearchFaqsMessageComposer(); RequestHandlers[420] = new GetFaqCategoryMessageComposer(); RequestHandlers[3253] = new ChangeEmailComposer(); RequestHandlers[26] = new ScrGetUserInfoEvent(); RequestHandlers[481] = new GetAchievementShareIdComposer(); RequestHandlers[3111] = new ResetUnseenItemsComposer(); RequestHandlers[100] = new PurchaseFromCatalogComposer(); RequestHandlers[472] = new PurchaseFromCatalogAsGiftComposer(); RequestHandlers[473] = new GetGiftWrappingConfigurationEvent(); RequestHandlers[474] = new GetClubGiftInfoEvent(); RequestHandlers[475] = new SelectClubGiftComposer(); RequestHandlers[101] = new GetCatalogIndexEvent(); RequestHandlers[102] = new GetCatalogPageEvent(); RequestHandlers[129] = new RedeemVoucherMessageComposer(); RequestHandlers[3030] = new GetIsOfferGiftableEvent(); RequestHandlers[3031] = new GetClubOffersMessageComposer(); RequestHandlers[3007] = new GetSellablePetBreedsComposer(); RequestHandlers[3034] = new MarkCatalogNewAdditionsPageOpenedComposer(); RequestHandlers[3035] = new GetHabboClubExtendOfferMessageComposer(); RequestHandlers[3036] = new PurchaseVipMembershipExtensionComposer(); RequestHandlers[3037] = new PurchaseBasicMembershipExtensionComposer(); RequestHandlers[3038] = new GetHabboBasicMembershipExtendOfferComposer(); RequestHandlers[412] = new GetRecyclerPrizesMessageComposer(); RequestHandlers[413] = new GetRecyclerStatusMessageComposer(); RequestHandlers[414] = new RecycleItemsMessageComposer(); RequestHandlers[126] = new GetRoomAdMessageComposer(); RequestHandlers[182] = new GetInterstitialMessageComposer(); RequestHandlers[315] = new LatencyPingRequestMessageComposer(); RequestHandlers[316] = new LatencyPingReportMessageComposer(); RequestHandlers[421] = new PerformanceLogMessageComposer(); RequestHandlers[422] = new LagWarningReportMessageComposer(); RequestHandlers[482] = new EventLogMessageComposer(); RequestHandlers[112] = new VoteAnswerMessageComposer(); RequestHandlers[235] = new PollRejectComposer(); RequestHandlers[234] = new PollStartComposer(); RequestHandlers[236] = new PollAnswerComposer(); RequestHandlers[108] = new ExitLockerRoomMessageComposer(); RequestHandlers[111] = new ChangeRoomMessageComposer(); RequestHandlers[113] = new TryBusMessageComposer(); RequestHandlers[42] = new ApproveNameMessageComposer(); RequestHandlers[245] = new GetSoundMachinePlayListMessageComposer(); RequestHandlers[249] = new GetNowPlayingMessageComposer(); RequestHandlers[221] = new GetSongInfoMessageComposer(); RequestHandlers[228] = new GetSoundSettingsComposer(); RequestHandlers[229] = new SetSoundSettingsComposer(); RequestHandlers[255] = new AddJukeboxDiskComposer(); RequestHandlers[256] = new RemoveJukeboxDiskComposer(); RequestHandlers[258] = new GetJukeboxPlayListMessageComposer(); RequestHandlers[259] = new GetUserSongDisksMessageComposer(); RequestHandlers[375] = new GetWardrobeMessageComposer(); RequestHandlers[376] = new SaveWardrobeOutfitMessageComposer(); RequestHandlers[470] = new ChangeUserNameMessageComposer(); RequestHandlers[471] = new CheckUserNameMessageComposer(); RequestHandlers[44] = new UpdateFigureDataMessageComposer(); RequestHandlers[3050] = new UpdateTriggerMessageComposer(); RequestHandlers[3051] = new UpdateActionMessageComposer(); RequestHandlers[3052] = new UpdateConditionMessageComposer(); RequestHandlers[3053] = new OpenMessageComposer(); RequestHandlers[3054] = new ApplySnapshotMessageComposer(); RequestHandlers[3101] = new GetQuestsMessageComposer(); RequestHandlers[3102] = new AcceptQuestMessageComposer(); RequestHandlers[3106] = new RejectQuestMessageComposer(); RequestHandlers[3107] = new OpenQuestTrackerMessageComposer(); RequestHandlers[3108] = new StartCampaignMessageComposer(); RequestHandlers[3210] = new FriendRequestQuestCompleteMessageComposer(); RequestHandlers[3300] = new FaceBookIsLoggedOnMessageComposer(); RequestHandlers[3301] = new FaceBookIsLoggedOffMessageComposer(); RequestHandlers[3311] = new FaceBookInitiateAddFriendsMessageComposer(); //mRequestHandlers[196] = new requestHandler(PONG); //mRequestHandlers[202] = new requestHandler(GENERATEKEY); //mRequestHandlers[49] = new requestHandler(GDATE); //mRequestHandlers[42] = new requestHandler(APPROVENAME); //mRequestHandlers[203] = new requestHandler(APPROVE_PASSWORD); //mRequestHandlers[197] = new requestHandler(APPROVEEMAIL); //mRequestHandlers[46] = new requestHandler(AC); //mRequestHandlers[146] = new requestHandler(PARENT_EMAIL_REQUIRED); //mRequestHandlers[131] = new requestHandler(COPPA_REG_GETREALTIME); //mRequestHandlers[43] = new requestHandler(REGISTER); //mRequestHandlers[4] = new requestHandler(TRY_LOGIN); //mRequestHandlers[204] = new requestHandler(SSO); //mRequestHandlers[7] = new requestHandler(GET_INFO); //mRequestHandlers[8] = new requestHandler(GET_CREDITS); //mRequestHandlers[44] = new requestHandler(HANDLER44); //// console //mRequestHandlers[12] = new requestHandler(FRIENDLIST_INIT); //mRequestHandlers[36] = new requestHandler(MESSENGER_MOTTO); //mRequestHandlers[37] = new requestHandler(MESSENGER_ACCEPTBUDDY); //mRequestHandlers[38] = new requestHandler(MESSENGER_DECLINEBUDDY); //mRequestHandlers[39] = new requestHandler(MESSENGER_REQUESTBUDDY); //mRequestHandlers[40] = new requestHandler(MESSENGER_REMOVEBUDDY); //mRequestHandlers[41] = new requestHandler(FINDUSER); //mRequestHandlers[33] = new requestHandler(MESSENGER_SENDMSG); //mRequestHandlers[32] = new requestHandler(MESSENGER_MARKREAD); //mRequestHandlers[15] = new requestHandler(MESSENGER_UPDATE); //mRequestHandlers[201] = new requestHandler(MESSENGER_REPORTMESSAGE); //mRequestHandlers[157] = new requestHandler(GETAVAILABLEBADGES); //mRequestHandlers[129] = new requestHandler(REDEEM_VOUCHER); //// habbo club //mRequestHandlers[190] = new requestHandler(SCR_BUY); //// navigator //mRequestHandlers[182] = new requestHandler(GETINTERST); //mRequestHandlers[2] = new requestHandler(room_directory); //mRequestHandlers[126] = new requestHandler(GETROOMAD); //mRequestHandlers[60] = new requestHandler(G_HMAP); //mRequestHandlers[151] = new requestHandler(GETUSERFLATCATS); //mRequestHandlers[264] = new requestHandler(GET_RECOMMENDED_ROOMS); //mRequestHandlers[29] = new requestHandler(CREATEFLAT); //mRequestHandlers[153] = new requestHandler(SETFLATCAT); //mRequestHandlers[25] = new requestHandler(SETFLATINFO); //mRequestHandlers[16] = new requestHandler(SUSERF); //mRequestHandlers[21] = new requestHandler(GETFLATINFO); //mRequestHandlers[57] = new requestHandler(TRYFLAT); //mRequestHandlers[59] = new requestHandler(GOTOFLAT); //mRequestHandlers[159] = new requestHandler(HANDLER159); //mRequestHandlers[160] = new requestHandler(HANDLER160); //mRequestHandlers[161] = new requestHandler(HANDLER161); //mRequestHandlers[162] = new requestHandler(HANDLER162); //mRequestHandlers[163] = new requestHandler(HANDLER163); //mRequestHandlers[165] = new requestHandler(HANDLER165); //mRequestHandlers[167] = new requestHandler(HANDLER167); //mRequestHandlers[168] = new requestHandler(HANDLER168); //mRequestHandlers[170] = new requestHandler(HANDLER170); //mRequestHandlers[171] = new requestHandler(HANDLER171); //mRequestHandlers[150] = new requestHandler(NAVIGATE); //// CFH //mRequestHandlers[198] = new requestHandler(CHANGECALLCATEGORY); //mRequestHandlers[199] = new requestHandler(MESSAGETOCALLER); //mRequestHandlers[48] = new requestHandler(PICK_CRYFORHELP); //mRequestHandlers[323] = new requestHandler(FOLLOW_CRYFORHELP); } public void Destroy() { var copy = (Hashtable)_clients.Clone(); foreach (GameClient client in copy.Values) { RemoveClient(client); } } public GameClient GetClient(string IP) { return _clients.Values.Cast().FirstOrDefault(client => client.IP == IP); } public int GetClientAmount(string IP) { return _clients.Values.Cast().Count(client => client.IP == IP); } public GameClient GetClient(uint ID) { return _clients.Values.Cast().FirstOrDefault(client => client.ID == ID); } public GameClient GetClientByHabbo(int ID) { return _clients.Values.Cast().FirstOrDefault(client => client.IsLoggedIn && client.mHabbo.mID == ID); } public GameClient GetClientByHabbo(string pName) { return _clients.Values.Cast().FirstOrDefault(client => client.IsLoggedIn && client.mHabbo.mName == pName); } private uint GenerateClientID() { uint i = 0; while (_clients.Contains(i)) i++; return i; } public void AddClient(Socket socket) { if (_clients.Count >= _maxClients || (_lastConnectionIp == GetIP(socket) && Core.Config.GetBoolean("socket.ddos.block"))) { socket.Shutdown(SocketShutdown.Both); socket.Close(); socket.Dispose(); } else { if (Core.Config.GetBoolean("socket.ddos.block")) _lastConnectionIp = GetIP(socket); //GameClient oldClient = GetClient(GetIP(socket)); //if (oldClient != null) //{ // RemoveClient(oldClient.ID); //} var Client = new GameClient(GenerateClientID(), socket); _clients.Add(Client.ID, Client); Console.WriteLine("Accepted new client [" + Client.ID + "] from " + Client.IP); } } public void RemoveClient(GameClient Client) { try { if (Client != null) { Console.WriteLine("Disconnected client [" + Client.ID + "] from " + Client.IP); Client.Stop(); _clients.Remove(Client.ID); } } catch { } } public string GetIP(Socket socket) { return socket.RemoteEndPoint.ToString().Split(':')[0]; } private void Pong() { int wait = Core.Config.GetInt("managers.client.pong.interval"); while (true) { foreach(GameClient client in ((Hashtable)_clients.Clone()).Values) if (client.Ponged) { client.Ponged = false; var r = new ResponseBuilder(50); // "@r" client.SendMessage(r); } else RemoveClient(client); Thread.Sleep(wait); } } public void SendMessage(ResponseBuilder pResponse) { foreach (GameClient client in _clients.Values) client.SendMessage(pResponse); } public void SendMessage(ResponseBuilder pResponse, string pRightName) { //foreach (GameClient client in _clients.Values) // if (Core.RankManager.RankHasRight(client.mHabbo.mRank, pRightName)) // client.SendMessage(pResponse); } } }