예제 #1
0
        private void AcceptClientConnections()
        {
            System.Threading.Tasks.Task.Factory.StartNew(() =>
                {
                    while (_listening)
                    {
                        try
                        {
                            Client c = new Client(_clientListener.AcceptTcpClient(), _view.WCPresenter);
                            _view.AddedClient = c.IP;
                            _view.Status = "Client " + c.IP + " is now connected";

                            rwl.EnterWriteLock();
                            _clients.Add(c);
                            rwl.ExitWriteLock();

                            c.Disconnected += OnDisconnect;
                            c.WebcamChanged += (source) => _view.Status = source.EventArg;

                            c.Send("hello");
                        }
                        catch (SocketException ex)
                        {
                            _view.Status = ex.Message;
                        }
                    }
                });
        }
예제 #2
0
 public void AddClient(Client client)
 {
     lock (this)
     {
         clients.Add(client);
     }
 }
예제 #3
0
        private void OnDisconnect(Client source)
        {
            rwl.EnterWriteLock();
            if (_clients.Contains(source))
            {
                _clients.Remove(source);
                source.Dispose();
            }
            rwl.ExitWriteLock();

            _view.RemovedClient = source.IP;
            _view.Status = "Client " + source.IP + " has disconnected";
        }
예제 #4
0
 public bool RemoveClient(Client client)
 {
     lock (this)
     {
         if (clients.Contains(client))
         {
             clients.Remove(client);
             return true;
         }
         else
             return false;
     }
 }