Пример #1
0
        /// <summary>
        /// An internal callback triggered when a client connects to the server.
        /// </summary>
        /// <param name="asyn"></param>
        private void OnReceiveConnection(IAsyncResult asyn)
        {
            try
            {
                lock (workerSockets)
                {
                    Interlocked.Increment(ref _currentClientNumber); // Thread Safe
                    UserSock us = new UserSock(_currentClientNumber, _mainSocket.EndAccept(asyn));
                    workerSockets.Add(_currentClientNumber, us);
                }

                OnClientConnect?.Invoke(_currentClientNumber);

                /*
                 * if (_clientConnect != null)
                 *  _clientConnect(_currentClientNumber);
                 */
                WaitForData(_currentClientNumber);
                _mainSocket.BeginAccept(new AsyncCallback(OnReceiveConnection), null);
            }
            catch (ObjectDisposedException)
            {
                System.Console.WriteLine("OnClientConnection: Socket has been closed");
            }
            catch (SocketException se)
            {
                //Console.WriteLine("SERVER EXCEPTION in OnReceiveConnection: " + se.Message);
                System.Diagnostics.Debug.WriteLine("SERVER EXCEPTION in OnReceiveConnection: " + se.Message);//pe 4-22-2015

                if (workerSockets.ContainsKey(_currentClientNumber))
                {
                    Console.WriteLine("RemoteEndPoint: " + workerSockets[_currentClientNumber].UserSocket.RemoteEndPoint.ToString());
                    Console.WriteLine("LocalEndPoint: " + workerSockets[_currentClientNumber].UserSocket.LocalEndPoint.ToString());

                    Console.WriteLine("Closing socket from OnReceiveConnection");
                }

                //Socket gets closed and removed from OnClientDisconnect
                if (OnClientDisconnect != null)
                {
                    OnClientDisconnect(_currentClientNumber);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// An internal callback triggered when a client connects to the server.
        /// </summary>
        /// <param name="async"></param>
        private void OnReceiveConnection(IAsyncResult async)
        {
            try
            {
                lock (WorkerSockets)
                {
                    Interlocked.Increment(ref _currentClientNumber); // Thread Safe
                    var us = new UserSock(_currentClientNumber, _mainSocket.EndAccept(async));
                    WorkerSockets.Add(_currentClientNumber, us);
                }

                OnClientConnect?.Invoke(_currentClientNumber);

                WaitForData(_currentClientNumber);
                _mainSocket.BeginAccept(OnReceiveConnection, null);
            }
            catch (ObjectDisposedException)
            {
                Console.WriteLine(@"OnClientConnection: Socket has been closed");
            }
            catch (SocketException se)
            {
                //Console.WriteLine("SERVER EXCEPTION in OnReceiveConnection: " + se.Message);
                Debug.WriteLine("SERVER EXCEPTION in OnReceiveConnection: " +
                                se.Message);                    //pe 4-22-2015

                if (WorkerSockets.ContainsKey(_currentClientNumber))
                {
                    Console.WriteLine(@"RemoteEndPoint: " +
                                      WorkerSockets[_currentClientNumber].UserSocket.RemoteEndPoint);
                    Console.WriteLine(@"LocalEndPoint: " +
                                      WorkerSockets[_currentClientNumber].UserSocket.LocalEndPoint);

                    Console.WriteLine(@"Closing socket from OnReceiveConnection");
                }

                //Socket gets closed and removed from OnClientDisconnect
                OnClientDisconnect?.Invoke(_currentClientNumber);
            }
        }