コード例 #1
0
ファイル: Connection.cs プロジェクト: kadetandrey/Lockalchat
        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;
                    }
                }
            }
        }
コード例 #2
0
ファイル: Connection.cs プロジェクト: DearDiary0802/Chat
        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;
                }
            }
        }