コード例 #1
0
ファイル: ChatChannel.cs プロジェクト: jraicr/MST
        /// <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);
            }
        }
コード例 #2
0
        /// <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);
            });
        }
コード例 #3
0
 /// <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);
 }
コード例 #4
0
ファイル: ChatModule.cs プロジェクト: jraicr/MST
        /// <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);
        }
コード例 #5
0
        /// <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);
            }
        }