internal void HandleIncomingDataSavely(string data) { if (data != null) { try { object _object = null; string _type = null; string[] packets = data.Split(_nullChar); string packeID = packets[0]; if (OnDataReceived != null) { OnDataReceived(this, new KDF.ClientEventArgs.DataReceivedEventArgs(data)); } switch (packeID) { //------------------------------------------------------- //----------------------Systembezogen-------------------- //------------------------------------------------------- case "(": if (OnConnectionStateChanged != null) { OnConnectionStateChanged(this, new ConnectionStateChangedEventArgs(false, true)); } _object = new ConnectionStateChangedEventArgs(false, true); _type = "ConnectionStateChanged"; UpdateModule(); break; //Wird direkt von der Connection-Klasse verarbeitet case "5": _systemButler = packets[1]; break; case ",": Send("h" + _nullChar + (data.Length == 1 ? "-" : data.Substring(2))); break; //------------------------------------------------------- //-----------------------Nachrichten--------------------- //------------------------------------------------------- case "e": PublicMessage publicMessage = new PublicMessage(packets, _clientUser.SelectedChannel.Name); if (OnPublicMessageReceived != null) { OnPublicMessageReceived(this, new PublicMessageReceivedEventArgs(publicMessage)); } _object = new PublicMessage(packets, _clientUser.SelectedChannel.Name); _type = "PublicMessageReceived"; //if (_guiConnector.Active) // _guiConnector.AddLineToHistory(publicMessage, true); break; case "r": PrivateMessage p = new PrivateMessage(packets, _clientUser.SelectedChannel.Name); if (!_loggedIn && packets[1] == "James") { _loggedIn = true; if (OnConnectionStateChanged != null) { OnConnectionStateChanged(this, new ConnectionStateChangedEventArgs(true, true)); } } if (OnPrivateMessageReceived != null) { OnPrivateMessageReceived(this, new PrivateMessageReceivedEventArgs(p)); } _object = p; _type = "PrivateMessageReceived"; break; case "t": PublicMessage publicMessageF = new PublicMessage(packets, _clientUser.SelectedChannel.Name); if (OnPublicMessageReceived != null) { OnPublicMessageReceived(this, new PublicMessageReceivedEventArgs(publicMessageF)); } _object = new PublicMessage(packets, _clientUser.SelectedChannel.Name); _type = "PublicFunctionReceived"; //if (_guiConnector.Active) // _guiConnector.AddLineToHistory(publicMessageF, true); break; //------------------------------------------------------- //-----------------------Channelbezogen------------------ //------------------------------------------------------- case "b": if (OnGlobalChannelListReceived != null) { OnGlobalChannelListReceived(this, new GlobalChannelListReceivedEventArgs(_parser.ParseGlobalChannelList(data))); } _object = _parser.ParseGlobalChannelList(data); _type = "GlobalChannelListReceived"; break; case "a": System.Diagnostics.Debug.WriteLine(data.Replace("\0", "\\0")); Channel joinedChannel = _parser.ParseChannel(data, false); if (!this._clientUser.OnlineChannels.ContainsKey(joinedChannel.Name)) { this._clientUser.OnlineChannels.Add(joinedChannel.Name, joinedChannel); } else { this._clientUser.OnlineChannels[joinedChannel.Name] = joinedChannel; } if (OnChannelJoined != null) { OnChannelJoined(this, new ChannelJoinedEventArgs(joinedChannel)); } ChangeSelectedChannel(joinedChannel.Name); _object = joinedChannel; _type = "ChannelJoined"; //if (!_guiConnector.Active) // _guiConnector.Activate(joinedChannel); break; case "d": _clientUser.OnlineChannels.Remove(packets[1]); Channel joined = new Channel(packets[2]); _clientUser.OnlineChannels.Add(packets[2], joined); _clientUser.SelectedChannel = joined; _object = packets[1] + "|" + packets[2]; _type = "ChannelSwitched"; //Console.WriteLine(_object.ToString()); //if (_guiConnector.Active) // _guiConnector.DeleteChannel(packets[1]); break; case "1": Channel changedChannel = _parser.ParseChannel(data, true); _clientUser.OnlineChannels[changedChannel.Name] = changedChannel; if (OnChannelChangedLayout != null) { OnChannelChangedLayout(this, new ChannelChangedLayoutEventArgs(changedChannel)); } _object = changedChannel; _type = "ChannelChangedLayout"; break; case "j": if (packets[2] != "pics/-") { _clientUser.OnlineChannels[packets[1]].BackgroundImage = packets[3]; } if (OnChannelBackGroundChanged != null) { OnChannelBackGroundChanged(this, new ChannelBackGroundChangedEventArgs(packets[2], packets[1])); } _object = new ChannelBackGroundChangedEventArgs(packets[2], packets[1]); _type = "ChannelBackgroundChanged"; break; //------------------------------------------------------- //-----------------------Userbezogen--------------------- //------------------------------------------------------- case "u": UserList receivedUserList = _parser.ParseUserList(data); _clientUser.OnlineChannels[receivedUserList.OwnerChannel].UserList = receivedUserList; if (OnUserListReceived != null) { OnUserListReceived(this, new UserListReceivedEventArgs(receivedUserList)); } _object = receivedUserList; _type = "UserListReceived"; //if (_guiConnector.Active) // _guiConnector.AddUserList(_clientUser.OnlineChannels[receivedUserList.OwnerChannel]); break; case ".": _clientUser.ByNames.AddRange(packets); _clientUser.ByNames.RemoveAt(0); _object = _clientUser.ByNames; _type = "ByNamesReceived"; break; case "l": ChannelUser channelUser = _parser.ParseUser(data); if (channelUser.ChannelJoined == null || channelUser.ChannelJoined == "-") { channelUser.ChannelJoined = _clientUser.SelectedChannel.Name; } _clientUser.OnlineChannels[channelUser.ChannelJoined].UserList.ChannelUserList.Add(channelUser); if (OnUserJoinedChannel != null) { OnUserJoinedChannel(this, new UserJoinedChannelEventArgs(channelUser)); } _object = channelUser; _type = "UserJoinedChannel"; //if (_guiConnector.Active) // _guiConnector.AddUserToUserList(channelUser); break; case "w": UserLeftChannel userLeftChannel = _parser.ParseUserLeftChannel(packets); if (userLeftChannel.ChannelLeft == null || userLeftChannel.ChannelLeft == "-") { userLeftChannel.ChannelLeft = _clientUser.SelectedChannel.Name; } _clientUser.OnlineChannels[userLeftChannel.ChannelLeft].UserList.RemoveByName(userLeftChannel.Name); if (OnUserLeftChannel != null) { OnUserLeftChannel(this, new UserLeftChannelEventArgs(userLeftChannel)); } _object = userLeftChannel; _type = "UserLeftChannel"; //if (_guiConnector.Active) // _guiConnector.RemoveUserFromUserList(userLeftChannel); break; case "m": UserListImage userListImageToAdd = _parser.ParseUserListImage(packets); _clientUser.OnlineChannels[userListImageToAdd.Channel].UserList.GetByName(userListImageToAdd.User).UserListImages.Add(userListImageToAdd.Image); if (OnChangeUserListImage != null) { OnChangeUserListImage(this, new ChangeUserListImageEventArgs(userListImageToAdd, true)); } _object = new ChangeUserListImageEventArgs(userListImageToAdd, true); _type = "ChangeUserListImage"; break; case "z": UserListImage userListImageToRemove = _parser.ParseUserListImage(packets); if (OnChangeUserListImage != null) { OnChangeUserListImage(this, new ChangeUserListImageEventArgs(userListImageToRemove, false)); } _object = new ChangeUserListImageEventArgs(userListImageToRemove, false); _type = "ChangeUserListImage"; break; //------------------------------------------------------- //------------------------Sonstiges---------------------- //------------------------------------------------------- case "x": if (OnOpenBrowserWindow != null) { OnOpenBrowserWindow(this, new OpenBrowserWindowEventArgs(packets[1])); } _object = packets[1]; _type = "OpenBrowserWindow"; break; case "k": if (!_loggedIn && (packets.Length >= 34 || data.Contains("Applet"))) { LoginFailedEventArgs lfe = new LoginFailedEventArgs(LoginFailReason.Unknown); if (data.Contains("Channellogin nicht möglich")) { if (data.Contains("_Unsichtbare Channels_")) { lfe = new LoginFailedEventArgs(LoginFailReason.ChannelDoesntExist); } else { lfe = new LoginFailedEventArgs(LoginFailReason.UserDoesntMeetChannelRestrictions); } } else if (data.Contains("Der Channel")) { lfe = new LoginFailedEventArgs(LoginFailReason.ChannelDoesntExist); } else if (data.Contains("Falsches Passwort")) { lfe = new LoginFailedEventArgs(LoginFailReason.WrongUsernameOrPassword); } else if (data.Contains("Nick Gesperrt")) { //Admin string admin = data.Substring(data.IndexOf("den Admin ") + 10); admin = admin.Substring(0, admin.IndexOf(" als Ansprechpartner per /m")); //Grund string reason = data.Substring(data.IndexOf("_:#") + 3); reason = reason.Substring(0, reason.IndexOf("##Bei Rückfragen")); //Sperrzeit string duration = "Unknown"; if (data.Contains("_permanent gesperrt_")) { duration = "Permanent"; } lfe = new LoginFailedEventArgs(LoginFailReason.UserLocked, reason, admin, duration); } else if (data.Contains("Applet")) { lfe = new LoginFailedEventArgs(LoginFailReason.AppletTooOld); } else if (data.Contains("maximal")) { lfe = new LoginFailedEventArgs(LoginFailReason.ChannelIsFull); } else if (data.Contains("Internetzugang") || data.Contains("Zugang gesperrt")) { lfe = new LoginFailedEventArgs(LoginFailReason.IPLock); } if (OnLoginFailed != null) { OnLoginFailed(this, lfe); } _object = lfe; _type = "LoginFailed"; } _object = new WindowOpenedEventArgs(packets[1].Replace("õf", ""), data, new HelperClasses.Parser.Popup.PopupParser(data)); if (OnWindowOpened != null) { OnWindowOpened(this, (WindowOpenedEventArgs)_object); } _type = "WindowOpened"; break; case ":": if (packets.Length > 2 && packets[2].Contains("PROTOCOL_HASH")) { Console.WriteLine("Empfange aktuelles Protokoll"); SetupModule(packets[2]); } if (_parentModule != null) { KnModule receivedModule = _parentModule.Parse(data); if (OnChatComponentCommandReceived != null) { OnChatComponentCommandReceived(this, new ChatComponentReceivedEventArgs(receivedModule)); } switch (receivedModule.Name) { case "MODULE_INIT": if (receivedModule.GetKeyValue().ContainsKey("serverPort")) { if (OnCardServerConnectionEstablished != null) { OnCardServerConnectionEstablished(this, new GameServerConnectionEventArgs(GameServer.GSClient.FromModule(receivedModule, this))); } } break; } _object = receivedModule; _type = "ChatComponentReceived"; } break; //Noch nicht implementiert case "q": _object = data; _type = "NotImplemented"; break; case "+": _object = data; _type = "NotImplemented"; break; case ";": _object = data; _type = "NotImplemented"; break; case "6": _object = data; _type = "NotImplemented"; break; case "!": _clientUser.OnlineChannels.Remove(packets[1]); if (_clientUser.SelectedChannel.Name == packets[1]) { _clientUser.SelectedChannel = null; } if (_clientUser.OnlineChannels.Count < 1) { _loggedIn = false; } else { _clientUser.SelectedChannel = _clientUser.OnlineChannels.Last().Value; } break; default: Console.WriteLine(data); break; } if (OnObjectFormed != null) { OnObjectFormed(this, new ObjectFormedEventArgs(_type, _object)); } } catch (WrongTokenException ex) { if (OnGlobalException != null) { OnGlobalException(this, new GlobalExceptionEventArgs(ex, KDFModule.Parsing)); } } }
void _client_OnChannelBackGroundChanged(object sender, ChannelBackGroundChangedEventArgs e) { tbxLog.AppendText(string.Format("The channel '{0}' got a new background\r\n", e.ChannelName)); }