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