/// <summary> /// Handle messages /// </summary> public virtual void BroadcastMessage(ChatMessagePacket packet) { // Override name to be in a "standard" format (uppercase letters and etc.) packet.Receiver = Name; var msg = Mst.Create.Message((short)MstMessageCodes.ChatMessage, packet); foreach (var user in channelUsers.Values) { user.Peer.SendMessage(msg, DeliveryMethod.Reliable); } }
/// <summary> /// Sends a generic message packet to server /// </summary> public void SendMessage(ChatMessagePacket packet, SuccessCallback callback, IClientSocket connection) { connection.SendMessage((short)MstMessageCodes.ChatMessage, packet, (status, response) => { if (status != ResponseStatus.Success) { callback.Invoke(false, response.AsString("Unknown error")); return; } callback.Invoke(true, null); }); }
/// <summary> /// Sends a generic message packet to server /// </summary> /// <param name="packet"></param> /// <param name="callback"></param> public void SendMessage(ChatMessagePacket packet, SuccessCallback callback) { SendMessage(packet, callback, Connection); }
/// <summary> /// Handles chat message. /// Returns true, if message was handled /// If it returns false, message sender will receive a "Not Handled" response. /// </summary> protected virtual bool TryHandleChatMessage(ChatMessagePacket message, ChatUserPeerExtension sender, IIncomingMessage rawMessage) { // Set a true sender message.Sender = sender.Username; string responseMsg = string.Empty; switch (message.MessageType) { case ChatMessageType.ChannelMessage: if (string.IsNullOrEmpty(message.Receiver)) { // If this is a local chat message (no receiver is provided) if (sender.DefaultChannel == null) { responseMsg = "No channel is set to be your local channel"; logger.Debug(responseMsg); rawMessage.Respond(responseMsg, ResponseStatus.Failed); return(true); } sender.DefaultChannel.BroadcastMessage(message); rawMessage.Respond(ResponseStatus.Success); return(true); } // Find the channel if (!ChatChannels.TryGetValue(message.Receiver.ToLower(), out ChatChannel channel) || !sender.CurrentChannels.Contains(channel)) { responseMsg = $"You're not in the '{message.Receiver}' channel"; logger.Error(responseMsg); // Not in this channel rawMessage.Respond(responseMsg, ResponseStatus.Failed); return(true); } channel.BroadcastMessage(message); rawMessage.Respond(ResponseStatus.Success); return(true); case ChatMessageType.PrivateMessage: if (!ChatUsers.TryGetValue(message.Receiver.ToLower(), out ChatUserPeerExtension receiver)) { responseMsg = $"User '{message.Receiver}' is not online"; logger.Error(responseMsg); rawMessage.Respond(responseMsg, ResponseStatus.Failed); return(true); } receiver.Peer.SendMessage((short)MstMessageCodes.ChatMessage, message); rawMessage.Respond(ResponseStatus.Success); return(true); } return(false); }
/// <summary> /// Handles chat message. /// Returns true, if message was handled /// If it returns false, message sender will receive a "Not Handled" response. /// </summary> protected virtual bool TryHandleChatMessage(ChatMessagePacket message, ChatUserPeerExtension sender, IIncomingMessage rawMessage) { try { // Set a true sender message.Sender = sender.Username; switch (message.MessageType) { case ChatMessageType.ChannelMessage: if (string.IsNullOrEmpty(message.Receiver)) { // If this is a local chat message (no receiver is provided) if (sender.DefaultChannel == null) { throw new MstMessageHandlerException("No channel is set to be your local channel", ResponseStatus.Failed); } sender.DefaultChannel.BroadcastMessage(message); rawMessage.Respond(ResponseStatus.Success); return(true); } // Find the channel if (!ChatChannels.TryGetValue(message.Receiver, out ChatChannel channel) || !sender.CurrentChannels.Contains(channel)) { throw new MstMessageHandlerException($"You're not in the '{message.Receiver}' channel", ResponseStatus.Failed); } channel.BroadcastMessage(message); rawMessage.Respond(ResponseStatus.Success); return(true); case ChatMessageType.PrivateMessage: if (!ChatUsers.TryGetValue(message.Receiver, out ChatUserPeerExtension receiver)) { throw new MstMessageHandlerException($"User '{message.Receiver}' is not online", ResponseStatus.Failed); } receiver.Peer.SendMessage((short)MstMessageCodes.ChatMessage, message); rawMessage.Respond(ResponseStatus.Success); return(true); } return(false); } // If we got system exception catch (MstMessageHandlerException e) { logger.Error(e.Message); rawMessage.Respond(e.Message, e.Status); return(false); } // If we got another exception catch (Exception e) { logger.Error(e.Message); rawMessage.Respond(e.Message, ResponseStatus.Error); return(false); } }