private void ListenUser(User user) { while (user.IsOnline) { if (user.Stream.DataAvailable) // доступны ли для чтения данные { byte[] message = user.ReceiveMessage(); Message tcpMessage = new Message(message); switch ((TMessage)tcpMessage.Code) { case TMessage.Connect: user.userName = tcpMessage.Text; GetHistory((int)TMessage.SendHistory, user); break; case TMessage.Message: synchronizationContext.Post(delegate { string messageChat = $"{user.userName} [{user.userIP}] ({DateTime.Now}): {tcpMessage.Text}\n"; AddUserMessage(messageChat); history.Append(messageChat); }, null); break; case TMessage.SendHistory: GetHistory((int)TMessage.ShowHistory, user); break; case TMessage.ShowHistory: synchronizationContext.Post(delegate { ClearUserScreen(); HistoryPreparing(AddUserMessage, tcpMessage.Text); history.Remove(0, history.Length); history.Append(tcpMessage.Text); }, null); break; case TMessage.ExitUser: user.Close(); Users.Remove(user); synchronizationContext.Post(delegate { string messageChat = $"{tcpMessage.Text}"; history.Append(messageChat); AddUserMessage(messageChat); }, null); break; } } } }
private void ListenUser(User user) { while (user.IsOnline) { try { //if (user.Stream.DataAvailable) byte[] message = user.ReceiveMessage(); Message tcpMessage = new Message(message); switch (tcpMessage.Code) { case NAME_TRANSMISSION: user.userName = tcpMessage.Text; GetHistory(SEND_HISTORY, user); break; case MESSAGE: synchronizationContext.Post(delegate { string messageChat = $"{user.userName} [{user.userIP}] ({DateTime.Now}): {tcpMessage.Text}\n"; display(messageChat); history.Append(messageChat); }, null); break; case SEND_HISTORY: Thread.Sleep(200); GetHistory(GET_HISTORY, user); break; case GET_HISTORY: synchronizationContext.Post(delegate { clearScreen(); HistoryPreparing(display, tcpMessage.Text); history.Remove(0, history.Length); history.Append(tcpMessage.Text); }, null); break; case USER_DISCONNECT: user.Close(); Users.Remove(user); synchronizationContext.Post(delegate { string messageChat = $"{tcpMessage.Text}"; history.Append(messageChat); display(messageChat); }, null); break; } } catch (System.IO.IOException) { string messageDisc = $"{user.userName} [{user.userIP}] ({DateTime.Now}) disconnected.\n"; user.Close(); Users.Remove(user); synchronizationContext.Post(delegate { history.Append(messageDisc); display(messageDisc); }, null); break; } catch { continue; } } }