internal static void HandleChatMessage(IPacket _packet, IRemoteClient _client, IMultiplayerServer _server) { // TODO: Abstract this to support things like commands // TODO: Sanitize messages var packet = (ChatMessagePacket)_packet; var server = (MultiplayerServer)_server; var args = new ChatMessageEventArgs(_client, packet.Message); server.OnChatMessageReceived(args); }
protected internal void OnChatMessageReceived(ChatMessageEventArgs e) { if (ChatMessageReceived != null) ChatMessageReceived(this, e); }
/// <summary> /// Parse sent message as chat command /// </summary> /// <param name="e"></param> /// <returns>true if the command was successfully executed</returns> private static bool ProcessChatCommand(ChatMessageEventArgs e) { var commandWithoutSlash = e.Message.TrimStart('/'); var messageArray = commandWithoutSlash .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (messageArray.Length <= 0) return false; // command not found var alias = messageArray[0]; var trimmedMessageArray = new string[messageArray.Length - 1]; if (trimmedMessageArray.Length != 0) Array.Copy(messageArray, 1, trimmedMessageArray, 0, messageArray.Length - 1); CommandManager.HandleCommand(e.Client, alias, trimmedMessageArray); return true; }
static void HandleChatMessageReceived(object sender, ChatMessageEventArgs e) { var message = e.Message; if (!message.StartsWith("/") || message.StartsWith("//")) SendChatMessage(e.Client.Username, message); else e.PreventDefault = ProcessChatCommand(e); }