public void send_networkMessage(NetworkMsg msg, System.Net.Sockets.Socket socket) { SocketAsyncEventArgs sendEventArgs = new SocketAsyncEventArgs();// m_sendEventArgsPool.pop(); sendEventArgs.Completed += io_completed; sendEventArgs.UserToken = new AsyncUserToken(); //if (sendEventArgs != null) { ((AsyncUserToken)sendEventArgs.UserToken).Socket = socket; byte[] data = PBSerializer.serialize(msg); byte[] length = new byte[4]; length = BitConverter.GetBytes(data.Length); int dataLength = BitConverter.ToInt32(length); byte[] packedData = new byte[4 + data.Length]; Buffer.BlockCopy(length, 0, packedData, 0, 4); Buffer.BlockCopy(data, 0, packedData, 4, data.Length); sendEventArgs.SetBuffer(packedData, 0, packedData.Length); socket.SendAsync(sendEventArgs); } //else //{ // m_waitSendEvent.WaitOne(); // send_networkMessage(msg, socket); //} }
public void send_queue_data() { try { while (m_sendQueue.Count > 0) { NetworkMsg msg = m_sendQueue.Dequeue(); byte[] data = PBSerializer.serialize(msg); byte[] length = new byte[4]; length = BitConverter.GetBytes(data.Length); byte[] packedData = new byte[4 + data.Length]; Buffer.BlockCopy(length, 0, packedData, 0, 4); Buffer.BlockCopy(data, 0, packedData, 4, data.Length); m_sendEventArg.SetBuffer(packedData, 0, packedData.Length); m_socket.SendAsync(m_sendEventArg); Log.INFO("client socketId {0} send sucess!", m_socketId); } } catch { // close_socket(); Log.INFO("The connection to the server is broken!"); } //bool willRaiseEvent = m_socket.ReceiveAsync(m_receiveEventArg); //if (!willRaiseEvent) //{ // process_receive(m_receiveEventArg); //} //m_autoSendEvent.WaitOne(); //if (!)//投递发送请求,这个函数有可能同步发送出去,这时返回false,并且不会引发SocketAsyncEventArgs.Completed事件 //{ // // 同步发送时处理发送完成事件 // process_send(m_socket, m_sendEventArg); //} }