예제 #1
0
        public void ReceiveMessage(Message message)
        {
            switch (message.Type)
            {
            case MessageType.TextMessage:
                MessageIncomeEvent?.Invoke(message);
                break;

            case MessageType.ImageMessage:
                ImageMessageIncomeEvent?.Invoke(message);
                break;

            case MessageType.ConnectMessage:
                NewUserJoinedEvent?.Invoke(message.SenderUserName);
                if (message.SenderUserName != Name)
                {
                    _channel.SendMessageToUser(message.SenderUserName,
                                               new Message()
                    {
                        SenderUserName = Name, Type = MessageType.IsOnlineMessage
                    });
                }
                break;

            case MessageType.DisconnectMessage:
                UserDisconnectEvent?.Invoke(message.SenderUserName);
                break;

            case MessageType.IsOnlineMessage:
                UserIsOnlineEvent?.Invoke(message.SenderUserName);
                break;
            }
        }
예제 #2
0
        public void SendMessage(string message, string userName, byte[] image = null)
        {
            var msg = new Message()
            {
                Type             = image == null ? MessageType.TextMessage : MessageType.ImageMessage,
                SenderUserName   = Name,
                Content          = message,
                ReceiverUserName = userName,
                ImageData        = image,
            };

            if (userName == null)
            {
                _channel.BroadcastMessageToAll(msg);
            }
            else
            {
                _channel.SendMessageToUser(userName, msg);

                if (image == null)
                {
                    MessageIncomeEvent?.Invoke(msg);
                }
                else
                {
                    ImageMessageIncomeEvent?.Invoke(msg);
                }
            }
        }
예제 #3
0
        public void SendMessage(string cryptedMessage)
        {
            Message msg = null;

            try
            {
                var textMsg = Cipher.Decrypt(cryptedMessage, PassPhrase);
                msg = Message.Deserialize(textMsg);
            }
            catch (Exception e)
            {
                //any error while decrypting or deserializating is considered as fail
                return;
            }

            if (msg == null)
            {
                return;
            }

            switch (msg.Type)
            {
            case MessageType.TextMessage:
                MessageIncomeEvent?.Invoke(msg.SenderUserId, msg.SenderUserName, msg.Content);
                break;

            case MessageType.HelloMessage:
                if (msg.SenderUserId == _id)
                {
                    return;
                }
                NewUserJoinedEvent?.Invoke(msg.SenderUserId);
                MessageIncomeEvent?.Invoke(msg.SenderUserId, msg.SenderUserName, "connected");
                SendJoinMessage(msg.SenderUserId);
                _channel.ConnectWithUser(msg.SenderUserId);
                break;

            case MessageType.UnconnectMessage:
                MessageIncomeEvent?.Invoke(msg.SenderUserId, msg.SenderUserName, "disconnected");
                break;

            case MessageType.JoinMessage:
                NewUserJoinedEvent?.Invoke(msg.SenderUserId);
                MessageIncomeEvent?.Invoke(msg.SenderUserId, msg.SenderUserName, "is online");
                _channel.ConnectWithUser(msg.SenderUserId);
                break;

            case MessageType.FileMessage:
                FileIncomeEvent?.Invoke(msg.SenderUserId, msg.SenderUserName, msg.Content, msg.AdditionalData);
                break;

            default:
                break;
            }
        }
예제 #4
0
        public void SendMessageToConnected(string text)
        {
            var jsonMsg = Message.Serialize(new Message()
            {
                SenderUserName = Name,
                SenderUserId   = _id,
                Type           = MessageType.TextMessage,
                Content        = text
            });

            _channel.BroadcastMessageToConnectedUsers(Cipher.Encrypt(jsonMsg, PassPhrase));
            MessageIncomeEvent?.Invoke(_id, Name, text);
        }
예제 #5
0
        public void SendFileToConnected(string originalFileName, string cryptedFileName)
        {
            var jsonMsg = Message.Serialize(new Message()
            {
                SenderUserName = Name,
                SenderUserId   = _id,
                Type           = MessageType.FileMessage,
                Content        = originalFileName,
                AdditionalData = cryptedFileName,
            });

            _channel.BroadcastMessageToConnectedUsers(Cipher.Encrypt(jsonMsg, PassPhrase));
            MessageIncomeEvent?.Invoke(_id, Name, $"You sent file: {originalFileName}");
        }