/// <summary>
        /// Прослушивает поток, на наличие сообщений от сервера
        /// Прежде чем добавить какой-нибудь объект в swich подумай 10 раз!
        /// Т.к. создатель этого метода не шибко умный, тебе придется либо увеличивать switch
        /// Либо писать огромный метод, который будет все это обрабатывать, что тоже не оч. верно
        /// </summary>
        private void TakeMessageOfServer()
        {
            Object ob = null;

            do
            {
                try
                {
                    ob = SendMessageToServer.TakeMessageSerialize();
                }
                catch (Exception)
                {
                    break;
                }

                switch (ob)
                {
                /// Получаем сообщения и отправляем их на текстовые чаты
                case Message message:
                    var text = TextChats.Find(x => x.ID == message.IDTextChat);
                    text.Message.Add(message);

                    //// выполняются полиморфные вызовы
                    EventUpMessage((IEnumerable <Message>)text.Message);
                    break;

                /// Получаем пользователя и меняем его статус на сервере
                case ServerUser user:
                    if (user.StatusObj == StatusObj.Add)
                    {
                        User.ServerUser.Add(user);

                        var server = user.Server;
                        Servers.Add(server);

                        EventUpServer?.Invoke(Servers);

                        EventUpServersFromUser?.Invoke(Servers);

                        break;
                    }
                    else if (user.StatusObj == StatusObj.Delete)
                    {
                        User.ServerUser = User.ServerUser.Where(x => user.ID != x.ID).ToList();

                        var server = user.Server;
                        var asd    = Servers.Where(x => server.ID != x.ID).ToList();
                        Servers.Clear();
                        foreach (var item in asd)
                        {
                            Servers.Add(item);
                        }

                        EventUpServer?.Invoke(Servers);

                        EventUpServersFromUser?.Invoke(Servers);

                        break;
                    }

                    if (Users is null)
                    {
                        break;
                    }

                    var a = Users.FirstOrDefault(x => x.IDUser == user.IDUser);
                    if (a is null)
                    {
                        break;
                    }

                    EventUpUserStatus(Users);
                    break;

                /// Получаем пользователей на сервере запоминаем и отправляем в окно редактирования, если оно открыто
                case (List <ServerUser> SU):
                    if (SU is null)
                    {
                        break;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(SU);
                        return;
                    }
                    if (WFAU is not null)
                    {
                        EventUpFriendsAndUsers?.Invoke(SU);
                        return;
                    }

                    Users = SU;
                    EventUpUserStatus?.Invoke(SU);

                    break;

                /// получаем список серверов у пользователя или в окне поиска (TODO)
                case (List <Server> Servers):
                    if (Servers is null || Servers.Count() == 0)
                    {
                        break;
                    }

                    EventUpServerSearch(Servers);
                    break;

                /// получаем сервер, если он обновился и отправляем в окно редактирования, если оно открыто
                case (Server Server):
                    if (Server is null)
                    {
                        break;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(Server);
                    }

                    break;

                /// получаем текстовые чаты и отправляем их в окно редактирования, если оно открыто
                case List <TextChat> textChat:
                    if (textChat is null)
                    {
                        break;
                    }

                    TextChats = textChat;
                    this.EventUpTextChat?.Invoke(textChat);

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(textChat);
                    }

                    break;

                /// получаем Отзывы о сервере и отправляем их в окно редактирования, если оно открыто
                case List <Opinion> Opinions:
                    if (Opinions is null)
                    {
                        break;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(Opinions);
                    }

                    EventUpOpinion(Opinions);

                    break;

                /// получаем Роли на сервере и отправляем их в окно редактирования, если оно открыто
                case List <Role> Role:
                    if (Role is null)
                    {
                        break;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(Role);
                    }

                    break;

                /// получаем Журнал событий сервера и отправляем его в окно редактирования, если оно открыто
                case List <EventLog> EL:
                    if (EL is null)
                    {
                        break;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(EL);
                    }

                    break;

                /// получаем Журнал событий сервера и отправляем его в окно редактирования, если оно открыто
                case List <Request> RL:
                    if (RL is null)
                    {
                        break;
                    }

                    EventUpFriendsAndUsers.Invoke(RL);
                    break;

                case List <User> UL:
                    if (UL is null)
                    {
                        break;
                    }

                    EventUpFriendsAndUsers.Invoke(UL);
                    break;

                case List <UserLog> UL:
                    if (UL is null)
                    {
                        break;
                    }

                    EventUpFriendsAndUsers.Invoke(UL);
                    break;

                case User user:
                    EventUpFriendsAndUsers.Invoke(user);
                    break;

                case String str:
                    if (str == "closestream")
                    {
                        Environment.Exit(0);
                    }
                    break;

                default:
                    MessageBox
                    .Show("Сервер отправил какой-то странный объект.." + ob.GetType().Name);
                    break;
                }
            } while (true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Прослушивает поток, на наличие сообщений от сервера
        /// Прежде чем добавить какой-нибудь объект в swich подумай 10 раз!
        /// Т.к. создатель этого метода не шибко умный, тебе придется либо увеличивать switch
        /// Либо писать огромный метод, который будет все это обрабатывать, что тоже не оч. верно
        /// </summary>
        private void TakeMessageOfServer()
        {
            Object ob = null;

            do
            {
                try
                {
                    ob = TakeMessageSerialize();
                }
                catch (Exception)
                {
                    break;
                }

                switch (ob)
                {
                /// Получаем сообщения и отправляем их на текстовые чаты
                case Message message:
                    var text = TextChats.Find(x => x.ID == message.IDTextChat);
                    text.Message.Add(message);

                    EventUpMessage(text.Message.ToList());
                    break;

                /// Получаем пользователя и меняем его статус на сервере
                case ServerUser user:
                    if (Users is null)
                    {
                        break;
                    }

                    var a = Users.FirstOrDefault(x => x.IDUser == user.IDUser);
                    if (a is null)
                    {
                        break;
                    }

                    EventUpUserStatus(Users);
                    break;

                /// Получаем пользователей на сервере запоминаем и отправляем в окно редактирования, если оно открыто
                case (List <ServerUser> SU):
                    if (SU is null)
                    {
                        break;
                    }

                    Users = SU;
                    EventUpUserStatus(SU);
                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(SU);
                    }
                    break;

                /// получаем список серверов у пользователя или в окне поиска (TODO)
                case (List <Server> Servers):
                    if (Servers is null || Servers.Count() == 0)
                    {
                        break;
                    }

                    EventUpServer(Servers);
                    break;

                /// получаем сервер, если он обновился и отправляем в окно редактирования, если оно открыто
                case (Server Server):
                    if (Server is null)
                    {
                        break;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(Server);
                    }

                    break;

                /// получаем текстовые чаты и отправляем их в окно редактирования, если оно открыто
                case List <TextChat> textChat:
                    if (textChat is null)
                    {
                        break;
                    }

                    TextChats = textChat;
                    this.EventUpTextChat?.Invoke(textChat);

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(textChat);
                    }

                    break;

                /// получаем Отзывы о сервере и отправляем их в окно редактирования, если оно открыто
                case List <Opinion> Opinions:
                    if (Opinions is null)
                    {
                        return;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(Opinions);
                    }

                    break;

                /// получаем Роли на сервере и отправляем их в окно редактирования, если оно открыто
                case List <Role> Role:
                    if (Role is null)
                    {
                        return;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(Role);
                    }

                    break;

                /// получаем Журнал событий сервера и отправляем его в окно редактирования, если оно открыто
                case List <EventLog> EL:
                    if (EL is null)
                    {
                        return;
                    }

                    if (WEditingServer is not null)
                    {
                        WEditingServer.StartEventOfObject(EL);
                    }

                    break;

                case String str:
                    if (str == "closestream")
                    {
                        Environment.Exit(0);
                    }
                    break;

                default:
                    MessageBox
                    .Show("Сервер отправил какой-то странный объект.." + ob.GetType().Name);
                    break;
                }
            } while (true);
        }