private void HandleClientConnectedChanged(object sender, PropertyEventArgs args) { TCPClient client = (TCPClient)sender; if (args is PropertyChangeEventArgs) { if ((bool)((PropertyChangeEventArgs)args).NewValue == true) { using (Synchronizer.Lock(this.SyncRoot)) this.SetPublishedProperty("ClientConnected", ref m_ClientConnected, true); if (m_Sender == null) { m_Sender = new TCPMessageSender(client, this.m_Model, this.m_Classroom); Trace.WriteLine("Client Connection Handler Started TCPMessageSender.", this.GetType().ToString()); } } else { using (Synchronizer.Lock(this.SyncRoot)) this.SetPublishedProperty("ClientConnected", ref m_ClientConnected, false); } } }
private void StartClient() { if (m_Client != null) { Trace.WriteLine("Attempt to start a TCPClient when a client is already running.", this.GetType().ToString()); return; //throw (new ApplicationException("Attempt to start a TCPClient when a client is already running.")); } m_Client = new TCPClient(m_InstructorAdvertisement.Endpoint, this.m_Model.Participant, this.m_Model.Network, m_InstructorAdvertisement.InstructorID); m_Client.Changed["Connected"].Add(new PropertyEventHandler(HandleClientConnectedChanged)); //Start sender only after we are connected. m_Client.Start(); m_Receiver = new TCPMessageReceiver(m_Client, this.m_Model, this.m_Classroom); }