コード例 #1
0
        /// <summary>
        /// 处理网络操作线程
        /// </summary>
        private void WebThreadHandle()
        {
            while (m_threadRunFlag)
            {
                if (!m_netRunFlag)
                {
                    continue;
                }

                HttpPacket sendPacket = null;
                lock (m_sendQueue)
                {
                    if (m_sendQueue.Count > 0)
                    {
                        sendPacket = m_sendQueue.Dequeue();
                    }
                }

                if (null == sendPacket)
                {
                    Thread.Sleep(c_ThreadSleepTime);
                    continue;
                }

                try
                {
                    byte[] bytes   = NetEnCoder.Encode(sendPacket);
                    byte[] byteRes = m_webClient.UploadData(NetHttpManager.Instance.GetUrl(), c_httpMethod, bytes);

                    if (null != byteRes)
                    {
                        //解析http返回包
                        //目前解析 太浪费内存、使用缓冲区
                        int resLength = byteRes.Length;
                        int offset    = 0;
                        int nLength   = NetEnCoder.DecodeInt(byteRes, ref offset);
                        resLength -= offset;

                        if (resLength >= nLength)
                        {
                            uint uCode = NetEnCoder.DecodeUInt(byteRes, ref offset);

                            int        nCount     = nLength - NetEnCoder.GetIntLength();
                            object     msg        = PBEnCoder.Decode(uCode, byteRes, offset, nCount);
                            HttpPacket recvPacket = new HttpPacket(uCode, nCount);
                            recvPacket.handler = sendPacket.handler;

                            lock (m_recvQueueLocker)
                            {
                                m_recvQueue.Enqueue(recvPacket);
                            }
                        }
                    }
                }
                catch (WebException e)
                {
                    LoggerHelper.Except(e);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// HttpPacket -> bytes
        /// </summary>
        /// <param name="packet"></param>
        /// <returns></returns>
        public static byte[] Encode(HttpPacket packet)
        {
            int len = 0;

            byte[] codeBytes = GetBytes(packet.uCode);
            len += codeBytes.Length;

            byte[] bodyBytes = GetBytes(packet.msgBody);
            len += bodyBytes.Length;

            byte[] lengthBytes = GetBytes(len);

            byte[] result = null;
            using (MemoryStream ms = new MemoryStream())
            {
                BinaryWriter br = new BinaryWriter(ms);

                ///备注:发送内容=长度(Code和body所占字节长度) + nCode + body
                br.Write(lengthBytes);
                br.Write(codeBytes);
                br.Write(bodyBytes);

                result = ms.ToArray();
            }

            return(result);
        }
コード例 #3
0
 /// <summary>
 /// 发送http请求
 /// </summary>
 /// <param name="p"></param>
 public void SendHttp(HttpPacket p)
 {
     lock (m_sendQueue)
     {
         m_sendQueue.Enqueue(p);
     }
 }