ACR_ServerCommunicator.ACR_ServerCommunicator.HandleChatEvent C# (CSharp) Method

HandleChatEvent() private method

This method filters module chat events. Its purpose is to check for commands internal to the server-to-server communication system and dispatch these as appropriate.
private HandleChatEvent ( int ChatMode, string ChatText, uint SenderObjectId ) : int
ChatMode int Supplies the chat mode /// (e.g. CHAT_MODE_TALK).
ChatText string Supplies the chat text to send.
SenderObjectId uint Supplies the object id of the sender /// object which originated the chat event.
return int
        private int HandleChatEvent(int ChatMode, string ChatText, uint SenderObjectId)
        {
            string CookedText;
            string Start;
            TELL_TYPE TellType;

            if (GetIsPC(SenderObjectId) != TRUE)
                return FALSE;

            if (ChatText.Length < 1 || (ChatText[0] != '#' && ChatText[0] != '!' && ChatText[0] != '.'))
                return FALSE;

            //
            // Check for a supported internal command.
            //

            CookedText = ChatText.Substring(1);

            if (CookedText.StartsWith("t "))
            {
                Start = CookedText.Substring(2);
                TellType = TELL_TYPE.ToChar;
            }
            else if (CookedText.StartsWith("tp "))
            {
                Start = CookedText.Substring(3);
                TellType = TELL_TYPE.ToPlayer;
            }
            else if (CookedText.StartsWith("o "))
            {
                Start = CookedText.Substring(2);
                TellType = TELL_TYPE.ToCharFirstName;
            }
            else if (CookedText.StartsWith("re "))
            {
                SendTellReply(SenderObjectId, CookedText.Substring(3), false);
                return TRUE;
            }
            else if (CookedText.StartsWith("r "))
            {
                SendTellReply(SenderObjectId, CookedText.Substring(2), false);
                return TRUE;
            }
            else if (CookedText.StartsWith("rt ") || CookedText.StartsWith("rw" ))
            {
                SendTellReply(SenderObjectId, CookedText.Substring(3), true);
                return TRUE;
            }
            else if (CookedText.Equals("users", StringComparison.InvariantCultureIgnoreCase) ||
                CookedText.Equals("who", StringComparison.InvariantCultureIgnoreCase))
            {
                ListOnlineUsers(SenderObjectId);
                return TRUE;
            }
            else if (CookedText.Equals("servers"))
            {
                ListOnlineServers(SenderObjectId);
                return TRUE;
            }
#if DEBUG_MODE
            else if (CookedText.Equals("showstate", StringComparison.InvariantCultureIgnoreCase))
            {
                ShowInternalState(SenderObjectId);
                return TRUE;
            }
#endif
            else if (CookedText.Equals("version"))
            {
                SendMessageToPC(SenderObjectId, "ACR version: " + GetDatabase().ACR_GetVersion());
                SendMessageToPC(SenderObjectId, "IPC subsystem version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString());
                SendMessageToPC(SenderObjectId, "HAK build date: " + GetDatabase().ACR_GetHAKBuildDate());
                SendMessageToPC(SenderObjectId, "Module build date: " + GetDatabase().ACR_GetBuildDate());
                return TRUE;
            }
            else if (CookedText.Equals("notify off"))
            {
                SendMessageToPC(SenderObjectId, "Cross-server event notifications disabled.");
                SetCrossServerNotificationsEnabled(SenderObjectId, false);
                return TRUE;
            }
            else if (CookedText.Equals("notify on"))
            {
                SendMessageToPC(SenderObjectId, "Cross-server event notifications enabled.");
                SetCrossServerNotificationsEnabled(SenderObjectId, true);
                return TRUE;
            }
            else if (CookedText.Equals("hideremoteplayers on"))
            {
                PlayerState Player = TryGetPlayerState(SenderObjectId);

                if (Player == null)
                    return TRUE;

                GetDatabase().ACR_IncrementStatistic("SET_HIDE_REMOTE_PLAYERS");

                SendMessageToPC(SenderObjectId, "Remote players are now hidden in the chat select window (when collapsed).");
                Player.Flags |= PlayerStateFlags.ChatSelectShowLocalPlayersOnlyWhenCollapsed;
                return TRUE;
            }
            else if (CookedText.Equals("hideremoteplayers off"))
            {
                PlayerState Player = TryGetPlayerState(SenderObjectId);

                if (Player == null)
                    return TRUE;

                GetDatabase().ACR_IncrementStatistic("SET_HIDE_REMOTE_PLAYERS");

                SendMessageToPC(SenderObjectId, "Remote players are now shown in the chat select window (when collapsed).");
                Player.Flags &= ~(PlayerStateFlags.ChatSelectShowLocalPlayersOnlyWhenCollapsed);
                return TRUE;
            }
            else if (CookedText.Equals("notify chatlog"))
            {
                SendMessageToPC(SenderObjectId, "Cross-server join/part events are now being delivered to the chat log.");
                GetDatabase().ACR_IncrementStatistic("SET_NOTIFY_TO_CHATLOG");
                GetPlayerState(SenderObjectId).Flags &= ~(PlayerStateFlags.SendCrossServerNotificationsToCombatLog);
                return TRUE;
            }
            else if (CookedText.Equals("notify combatlog"))
            {
                SendMessageToPC(SenderObjectId, "Cross-server join/part events are now being delivered to the combat log.");
                GetDatabase().ACR_IncrementStatistic("SET_NOTIFY_TO_CHATLOG");
                GetPlayerState(SenderObjectId).Flags |= PlayerStateFlags.SendCrossServerNotificationsToCombatLog;
                return TRUE;
            }
            else if (CookedText.Equals("serverlatency") || CookedText.Equals("ping"))
            {
                ShowServerLatency(SenderObjectId);
                return TRUE;
            }
            else if (CookedText.StartsWith("pingsrv "))
            {
                try
                {
                    int ServerId = int.Parse(CookedText.Substring(8).TrimStart());

                    if (!IsServerOnline(ServerId))
                    {
                        SendFeedbackError(SenderObjectId, "Requested server is offline or not present.");
                        return TRUE;
                    }

                    ServerLatencyMeasurer.SendPingToServer(SenderObjectId, ServerId, this);
                    return TRUE;
                }
                catch (Exception e)
                {
                    SendFeedbackError(SenderObjectId, String.Format("Internal error, exception: {0}", e));
                }

                return TRUE;
            }
            else if (CookedText.Equals("uptime"))
            {
                ShowServerUptime(SenderObjectId);
                return TRUE;
            }
            else if (CookedText.StartsWith("seen "))
            {
                ShowLastLoginTime(SenderObjectId, CookedText.Substring(5));
                return TRUE;
            }
            else if (CookedText.StartsWith("recorddata "))
            {
                ShowRecordData(SenderObjectId, CookedText.Substring(11));
                return TRUE;
            }
            else if (CookedText.StartsWith("irc "))
            {
                string Recipient = WorldManager.Configuration.DefaultIrcRecipient;

                if (String.IsNullOrEmpty(Recipient))
                {
                    SendFeedbackError(SenderObjectId, "Default recipient not set in config table in the database.  Contact the tech department.");
                    return TRUE;
                }

                SendIrcMessage(WorldManager.Configuration.DefaultIrcGatewayId,
                    Recipient,
                    SenderObjectId,
                    CookedText.Substring(4));
                return TRUE;
            }
            else if (CookedText.StartsWith("ircmsg "))
            {
                ParseSendIrcMessage(CookedText.Substring(7), SenderObjectId);
                return TRUE;
            }
            else if (CookedText.Equals("help"))
            {
                ShowHelp(SenderObjectId);
                return TRUE;
            }
            else
            {
                return FALSE;
            }

            ProcessTellCommand(Start, SenderObjectId, TellType);
            return TRUE;
        }
ACR_ServerCommunicator