Ejemplo n.º 1
0
        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);
            //}
        }
Ejemplo n.º 2
0
        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);
            //}
        }