コード例 #1
0
ファイル: ChatSession.cs プロジェクト: Buzzefall/TCP-Chat
        //После авторизации здесь слушаем сервер и обрабатываем сообщения
        private void Listen()
        {
            if (Client == null || Stream == null || !IsConnected())
            {
                CrashAndReport(new Exception("There is no active connection!"));
                return;
            }

            while (IsRunning)
            {
                try
                {
                    if (!Stream.DataAvailable)
                    {
                        continue;
                    }
                    //??? or
                    //if (!Stream?.DataAvailable == null) continue;

                    var message = ReceiveMessage();

                    if (message?.GetType() == typeof(TextMessage))
                    {
                        sessionForm.BeginInvoke(UpdateChat, message as TextMessage);
                    }

                    if (message?.GetType() == typeof(OnlineList))
                    {
                        sessionForm.BeginInvoke(UpdateOnlineList, message as OnlineList);
                    }
                }

                catch (ObjectDisposedException e)
                {
                    if (IsRunning)
                    {
                        CrashAndReport(e);
                    }

                    return;
                }
            }
        }
コード例 #2
0
ファイル: ChatSession.cs プロジェクト: Buzzefall/TCP-Chat
        private void CrashAndReport(Exception exception)
        {
            if (loginForm.Visible)
            {
                loginForm.BeginInvoke(UpdateView, exception.Message, Color.Red);
            }
            else
            {
                sessionForm?.BeginInvoke(UpdateChat,
                                         new TextMessage
                {
                    From      = "System",
                    Text      = exception.Message,
                    TimeStamp = DateTime.Now.ToShortTimeString()
                }
                                         );
            }

            Thread.Sleep(3500);
            sessionForm?.Close();
        }