/// <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); }
/// <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); }