Esempio n. 1
0
            private async void ReadStreamAsync() //odczytuje strumień i przekazuje do innych podłączonych klientów
            {
                while (!isDisconected)
                {
                    try
                    {
                        object obj = await service.ReadObjAsync(clientStream);

                        MessageFrame mf = new MessageFrame();
                        mf = (MessageFrame)obj;
                        if (mf.Destination == null && mf.Command == null)
                        {
                            service.BroadCast(obj);
                            service.UpdateUI(service.FormatMsg(mf.Sender, mf.Data));
                        }
                        if (mf.Destination != null)
                        {
                            service.BroadCast(obj, mf.Destination);
                        }
                        if (mf.Command == "list")
                        {
                            MessageFrame listmf = new MessageFrame();
                            listmf.ConnectedUsers = service.GetUsersList();
                            service.BroadCast(listmf, mf.Sender);
                        }
                        if (mf.Command == "join")
                        {
                            ChatRoom romm = new ChatRoom(mf.Param);
                            romm.AddClient(clientStream);
                        }
                    }

                    catch (System.IO.IOException) // przerwij kiedy połączenie z klientem zerwane
                    {
                        service.clientsTaskList.Remove(this);
                        break;
                    }

                    catch (ObjectDisposedException) when(service.serverIsClosed)  //przerwij kiedy serwer rozłączony
                    {
                        break;
                    }
                    catch (SerializationException) when(service.serverIsClosed)
                    {
                        break;
                    }
                }
                service.clientsTaskList.Remove(this);
                clientStream.Close();
            }