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