Exemplo n.º 1
0
 /// <summary>
 /// Occurs when a client connected
 /// </summary>
 /// <param name="worker">The worker that handles connection</param>
 protected virtual void OnClientConnected(ServerWorker worker)
 {
     if (ClientConnected != null)
     {
         ClientConnected(this, worker);
     }
 }
Exemplo n.º 2
0
        private void OnClientConnect(IAsyncResult asyn)
        {
            try
            {
                if (_Listener == null)
                {
                    return;
                }
                Socket       socketWorker = _Listener.EndAccept(asyn);
                ServerWorker serverWorker = new ServerWorker(_MessageTranslator, BufferSize, this);
                serverWorker.Name = string.Format("Client{0}", _IdGenerator);
                System.Threading.Interlocked.Increment(ref _IdGenerator);

                // Add the workerSocket reference to our ArrayList
                lock (_WorkerList)
                {
                    _WorkerList.Add(serverWorker);
                }

                // Since the main Socket is now free, it can go back and wait for
                // other clients who are attempting to connect
                _Listener.BeginAccept(OnClientConnect, null);

                serverWorker.Start(socketWorker);
                OnClientConnected(serverWorker);
            }
            catch (ObjectDisposedException)
            {
                System.Diagnostics.Debugger.Log(0, "Errors", "OnClientConnection: Socket has been closed");
            }
            catch (SocketException se)
            {
                Logger.LogError(se);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Notify worker disconnect
 /// </summary>
 /// <param name="serverWorker">The worker that disconnected</param>
 internal void NotifyWorkerDisconnected(ServerWorker serverWorker)
 {
     // Remove the reference to the worker socket of the closed client
     // so that this object will get garbage collected
     lock (_WorkerList)
     {
         _WorkerList.Remove(serverWorker);
     }
     OnClientDisconnected(serverWorker);
 }
Exemplo n.º 4
0
 /// <summary>
 /// Retrieves workers by name
 /// </summary>
 /// <param name="name">name of worker</param>
 /// <returns>ServerWorker</returns>
 public ServerWorker this[string name]
 {
     get
     {
         lock (_WorkerList)
         {
             foreach (var w in _WorkerList)
             {
                 ServerWorker sw = w as ServerWorker;
                 if (sw.Name == name)
                 {
                     return(sw);
                 }
             }
             return(null);
         }
     }
 }
Exemplo n.º 5
0
 /// <summary>
 /// Close server and all workers
 /// </summary>
 public void Close()
 {
     if (_Listener != null)
     {
         _Listener.Close();
     }
     _Listener = null;
     lock (_WorkerList)
     {
         while (_WorkerList.Count > 0)
         {
             ServerWorker serverWorker = _WorkerList[0] as ServerWorker;
             if (serverWorker != null)
             {
                 serverWorker.Close(); // by closing a worker it remove itself
             }
             else
             {
                 _WorkerList.RemoveAt(0);
             }
         }
     }
     IsListening = false;
 }