Avalon.Network.SocketServer.OnNewConnection C# (CSharp) Метод

OnNewConnection() публичный Метод

Invoked when listener recieved a new connection.
public OnNewConnection ( IAsyncResult async ) : void
async IAsyncResult
Результат void
        public void OnNewConnection(IAsyncResult async)
        {
            SocketServer clientSock = new SocketServer(m_MainSock.EndAccept(async));

            try
            {
                // finished processing socket, go back to listening state.
                ((Socket)async.AsyncState).BeginAccept(new AsyncCallback(OnNewConnection), async.AsyncState);

                // initiate socket state object.
                SocketClient clientState = new SocketClient(clientSock);
                lock ( this.ClientList )
                {
                    ClientList.Add(clientState);
                }

                // do further processing for recently connected socket.
                clientSock.Socket.BeginReceive(clientSock.m_bRecvBuffer, 0, 0x1000, SocketFlags.None, clientSock.OnDataReceive, clientState);

                Logger.Log(Logger.LogLevel.Access, "Server", "[{0}] Client Connected : {1}", ClientList.Count, ((IPEndPoint)clientSock.Socket.RemoteEndPoint).Address.ToString());

                // send encryption key
                Random rand = new Random();
                SMSG_ENCRYPTION_KEY spkt = new SMSG_ENCRYPTION_KEY(rand.Next());
                Console.WriteLine("[Server->Client] Encryption");
                Console.WriteLine(Misc.HexBytes(spkt.Stream));
                clientState.Client.Socket.Send(spkt.Stream);
            }
            catch (ObjectDisposedException)
            {
                Logger.Log(Logger.LogLevel.Access, "Server", "[{0}] Socket has been closed.", ClientList.Count);
                ((Socket)async.AsyncState).BeginAccept(new AsyncCallback(OnNewConnection), async.AsyncState);
            }
            catch (SocketException se)
            {
                Logger.Log(Logger.LogLevel.Error, "Server", "OnNewConnection: {0}", se.Message);
                ((Socket)async.AsyncState).BeginAccept(new AsyncCallback(OnNewConnection), async.AsyncState);
            }
        }