Пример #1
0
        internal void HandleMessage(Guid clientId, Container container)
        {
            if (!_connections.TryGetValue(clientId, out WsConnection connection))
            {
                return;
            }

            _connections.RefreshLifeClient(clientId);
            switch (container.Identifier)
            {
            case DispatchType.Login:
                if (((JObject)container.Payload).ToObject(typeof(LoginRequestContainer)) is LoginRequestContainer loginRequest)
                {
                    LoginResponseContainer loginResponse;
                    bool         isEnter = true;
                    DispatchType stage;

                    if (UserOnlineList.Contains(loginRequest.Content))
                    {
                        loginResponse = new LoginResponseContainer(
                            new Response(ResponseType.Failure, $"Client with name '{loginRequest.Content}' yet connect."),
                            null,
                            null,
                            null,
                            null);
                        connection.Send(loginResponse.GetContainer());
                        connection.Login = $"pseudo-{loginRequest.Content}";
                        stage            = DispatchType.Connection;
                    }
                    else
                    {
                        isEnter          = UserOfflineList.Contains(loginRequest.Content);
                        loginResponse    = new LoginResponseContainer(new Response(ResponseType.Ok, "Connected"), null, null, null, null);
                        connection.Login = loginRequest.Content;
                        stage            = DispatchType.Login;
                    }

                    var eventLogMessage = new EventLogMessage
                    {
                        IsSuccessfully = loginResponse.Content.Result == ResponseType.Ok == isEnter,
                        SenderName     = _name,
                        Text           = loginResponse.Content.Reason,
                        Time           = DateTime.Now,
                        Type           = stage
                    };

                    ConnectionStateChanged?.Invoke(this, new ConnectionStateChangedEventArgs(connection.Login, true, eventLogMessage));
                }

                break;

            case DispatchType.Message:
                MessageReceivedEventArgs message = MessageSorter.GetSortedMessage((JObject)container.Payload);
                MessageReceived?.Invoke(this, message);
                Send(MessageSorter.GetSortedMessage(message.Author, message.Message, InterfaceType.WebSocket, message.Agenda), message.Agenda);
                break;
            }
        }
Пример #2
0
        private void OnMessage(object sender, MessageEventArgs eventArgs)
        {
            if (!eventArgs.IsText)
            {
                return;
            }

            var container = JsonConvert.DeserializeObject <Container>(eventArgs.Data);

            switch (container.Identifier)
            {
            case DispatchType.Login:
                if (((JObject)container.Payload).ToObject(typeof(LoginResponseContainer)) is LoginResponseContainer loginResponse)
                {
                    var eventLog = new EventLogMessage()
                    {
                        IsSuccessfully = true,
                        SenderName     = _login,
                        Text           = "Login",
                        Time           = DateTime.Now,
                        Type           = DispatchType.Login
                    };
                    if (loginResponse.Content.Result == ResponseType.Failure)
                    {
                        eventLog.IsSuccessfully = false;
                        eventLog.Text           = loginResponse.Content.Reason;
                    }

                    LoginEvent?.Invoke(
                        this,
                        new LoginEventArgs(
                            _login,
                            eventLog.IsSuccessfully,
                            eventLog,
                            loginResponse.General,
                            loginResponse.OnlineList,
                            loginResponse.OfflineList,
                            loginResponse.EventLogMessageList));
                }

                break;

            case DispatchType.Message:
                MessageReceived?.Invoke(this, MessageSorter.GetSortedMessage((JObject)container.Payload));
                break;

            case DispatchType.Channel:
                UpdateChannel?.Invoke(this, MessageSorter.GetSortedChannel((JObject)container.Payload));
                break;

            case DispatchType.EventLog:
                LogEvent?.Invoke(this, MessageSorter.GetSortedEventMessage((JObject)container.Payload));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Пример #3
0
        private void HandlePacket(byte[] packet)
        {
            string serializedMessages = GetStringPacket(packet);
            var    container          = JsonConvert.DeserializeObject <Container>(serializedMessages);

            switch (container.Identifier)
            {
            case DispatchType.Login:
                if (((JObject)container.Payload).ToObject(typeof(LoginResponseContainer)) is LoginResponseContainer loginResponse)
                {
                    var eventLog = new EventLogMessage
                    {
                        IsSuccessfully = loginResponse.Content.Result == ResponseType.Ok,
                        SenderName     = _login,
                        Text           = loginResponse.Content.Reason,
                        Time           = DateTime.Now,
                        Type           = DispatchType.Login
                    };
                    _isLogin = eventLog.IsSuccessfully;
                    LoginEvent?.Invoke(
                        this,
                        new LoginEventArgs(
                            _login,
                            eventLog.IsSuccessfully,
                            eventLog,
                            loginResponse.General,
                            loginResponse.OnlineList,
                            loginResponse.OfflineList,
                            loginResponse.EventLogMessageList));
                }

                break;

            case DispatchType.Message:
                MessageReceived?.Invoke(this, MessageSorter.GetSortedMessage((JObject)container.Payload));
                break;

            case DispatchType.Channel:
                UpdateChannel?.Invoke(this, MessageSorter.GetSortedChannel((JObject)container.Payload));
                break;

            case DispatchType.EventLog:
                LogEvent?.Invoke(this, MessageSorter.GetSortedEventMessage((JObject)container.Payload));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Пример #4
0
        private void HandleMessageReceived(object sender, MessageReceivedEventArgs eventArgs)
        {
            string messageServer   = $"{eventArgs.Agenda.Type}:{eventArgs.Author}:{eventArgs.Message}";
            var    eventLogMessage = new EventLogMessage
            {
                IsSuccessfully = true,
                SenderName     = eventArgs.Author,
                Text           = messageServer,
                Time           = DateTime.Now,
                Type           = DispatchType.Message
            };

            switch (eventArgs.Agenda.Type)
            {
            case ChannelType.General:
                SendCurrentServer(eventArgs.Type, MessageSorter.GetSortedMessage(eventArgs), eventArgs.Agenda);
                User user           = _dataBaseManager.UserList.Find(u => u.Name == eventArgs.Author);
                var  generalMessage = new GeneralMessage
                {
                    Message = eventArgs.Message,
                    Time    = eventArgs.Time,
                    User_Id = user.Id
                };
                _dataBaseManager.CreateGeneralMessageAsync(generalMessage);
                break;

            case ChannelType.Private:
                SendCurrentServer(eventArgs.Type, MessageSorter.GetSortedMessage(eventArgs), eventArgs.Agenda);
                var privateMessage = new PrivateMessage
                {
                    Message  = eventArgs.Message,
                    Time     = eventArgs.Time,
                    SenderId = _dataBaseManager.UserList.Find(u => u.Name == eventArgs.Author).Id,
                    TargetId = _dataBaseManager.UserList.Find(u => u.Name == ((PrivateAgenda)eventArgs.Agenda).Target).Id
                };
                _dataBaseManager.CreatePrivateMessageAsync(privateMessage);
                break;

            case ChannelType.Group:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            EventSaveAsync(new MessageEventLogContainer(eventLogMessage), eventArgs.Agenda);
        }
Пример #5
0
        internal void HandlePacket(IPEndPoint remoteEndpoint, byte[] packet)
        {
            string serializedMessages = GetStringPacket(packet);
            var    container          = JsonConvert.DeserializeObject <Container>(serializedMessages);

            if (!_connections.TryGetValue(remoteEndpoint, out TcpConnection connection))
            {
                return;
            }

            _connections.RefreshLifeClient(remoteEndpoint);
            switch (container.Identifier)
            {
            case DispatchType.Login:
                if (((JObject)container.Payload).ToObject(typeof(LoginRequestContainer)) is LoginRequestContainer loginRequest)
                {
                    LoginResponseContainer loginResponse;
                    bool         isEnter = true;
                    DispatchType stage;

                    if (UserOnlineList.Contains(loginRequest.Content))
                    {
                        loginResponse = new LoginResponseContainer(
                            new Response(ResponseType.Failure, $"Client with name '{loginRequest.Content}' yet connect."),
                            null,
                            null,
                            null,
                            null);
                        connection.Send(ConvertToBytes(loginResponse.GetContainer()));
                        connection.Login = $"pseudo-{loginRequest.Content}";
                        stage            = DispatchType.Connection;
                    }
                    else
                    {
                        isEnter          = UserOfflineList.Contains(loginRequest.Content);
                        loginResponse    = new LoginResponseContainer(new Response(ResponseType.Ok, "Connected"), null, null, null, null);
                        connection.Login = loginRequest.Content;
                        stage            = DispatchType.Login;
                    }

                    var eventLogMessage = new EventLogMessage
                    {
                        IsSuccessfully = loginResponse.Content.Result == ResponseType.Ok == isEnter,
                        SenderName     = _name,
                        Text           = loginResponse.Content.Reason,
                        Time           = DateTime.Now,
                        Type           = stage
                    };

                    ConnectionStateChanged?.Invoke(this, new ConnectionStateChangedEventArgs(connection.Login, true, eventLogMessage));
                }

                break;

            case DispatchType.Message:
                MessageReceivedEventArgs message = MessageSorter.GetSortedMessage((JObject)container.Payload);
                MessageReceived?.Invoke(this, message);
                Send(MessageSorter.GetSortedMessage(message.Author, message.Message, InterfaceType.Tcp, message.Agenda), message.Agenda);
                break;
            }
        }