예제 #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 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;
            }
        }