public void push(SocketAsyncEventArgs item) { Log.ASSERT("item is null!", item != null); m_pool.Enqueue(item); }
void process_accept(SocketAsyncEventArgs e) { try { SocketAsyncEventArgs readEventArg = m_receiveEventArgsPool.pop(); Log.ASSERT("There are no more available sockets to allocate.", readEventArg != null); Log.ASSERT("Client form {0} has disconnected!", e.AcceptSocket.Connected, e.AcceptSocket.RemoteEndPoint.ToString()); Interlocked.Increment(ref m_numConnectedSocket); ((AsyncUserToken)readEventArg.UserToken).Socket = e.AcceptSocket; //产生Robot,并返回socketid 到client m_robotSystem.generate_robot(e.AcceptSocket); Log.INFO("Client from {0} connection accepted.There are {1} clients connected to the server", e.AcceptSocket.RemoteEndPoint.ToString(), m_numConnectedSocket); if (!e.AcceptSocket.ReceiveAsync(readEventArg)) { process_receive(readEventArg); } } catch (SocketException ex) { Log.INFO("Error when processing data received from {0}:\r\n{1}", e.AcceptSocket.RemoteEndPoint, ex.ToString()); } catch (Exception ex) { Log.INFO(ex.ToString()); } start_accept(e); }
public void generate_robots(int robotsNum) { Log.ASSERT("robotsNum:{0} exceed the max robot number: {1}", robotsNum <= m_numRobotsMax, robotsNum, m_numRobotsMax); m_numRobots = robotsNum; for (int i = 0; i < m_numRobots; i++) { Robot robot = new Robot(i); m_robots.Add(robot); } }
public void connect() { m_socket.ConnectAsync(m_connectEventArg);//Begins an asynchronous request for a connection to a remote host. m_autoConnectSignal.WaitOne(); Log.ASSERT("connect failed!", m_connectEventArg.SocketError == SocketError.Success); if (!m_socket.ReceiveAsync(m_receiveEventArg)) { process_receive(m_receiveEventArg); } }