예제 #1
0
        private void AsyncWriteRequestStream(IAsyncResult ar)
        {
            // 取出回调前的状态参数
            MyCallbackParam       cp = (MyCallbackParam)ar.AsyncState;
            RequestMessageWrapper sendMessageWrapper = cp.State;

            byte[] requestData = sendMessageWrapper.MessageBody.ToByteArray();

            try
            {
                // 结束写入数据的操作
                using (Stream bw = cp.Request.EndGetRequestStream(ar))
                {
                    bw.Write(requestData, 0, requestData.Length);
                }

                // 开始异步向服务器发起请求
                cp.Request.BeginGetResponse(GetResponseCallback, cp);
            }
            catch (Exception e)
            {
                //Debug.LogError(string.Format("rsping msg id :{0} - {1}", sendMessageWrapper.MessageId, e.ToString()));

                this.m_context.Post(WorkQueueCallback, new SendMessageCallback()
                {
                    MessageId = sendMessageWrapper.MessageId,
                    Status    = NetworkModule.NetworkStatus.LOG_ERROR
                });
            }
        }
예제 #2
0
        private void T_DoASyncSend(RequestMessageWrapper sendMessageWrapper, HttpWebRequest request)
        {
            MyCallbackParam cp = new MyCallbackParam()
            {
                State   = sendMessageWrapper,
                Request = request,
            };

            request.BeginGetRequestStream(AsyncWriteRequestStream, cp);
        }
예제 #3
0
        private void GetResponseCallback(IAsyncResult ar)
        {
            // 取出回调前的状态参数
            MyCallbackParam       cp = (MyCallbackParam)ar.AsyncState;
            RequestMessageWrapper sendMessageWrapper = cp.State as RequestMessageWrapper;

            long start_time = m_sending_times[sendMessageWrapper.m_unique_identifier];

            m_sending_times.Remove(sendMessageWrapper.m_unique_identifier);

            try
            {
                // 读取服务器的响应
                using (HttpWebResponse response = (HttpWebResponse)cp.Request.EndGetResponse(ar))
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        int responseBufferLength = (int)response.ContentLength;

                        if (response.Headers["msgId"] == null)
                        {
                            Debug.Log("error message no message id on response header");
                            return;
                        }
                        else
                        {
                            int messageId = int.Parse(response.Headers["msgId"]);
                            if (messageId == 400)
                            {
                                GOEngine.DebugUtil.Log($"server error == 400  ,server ip:{this.m_serverIp}");
                            }

                            else if (messageId == 1)
                            {
                                GOEngine.DebugUtil.Log($"server error == 1  ,remote login");
                            }

                            byte[] buffer = new byte[responseBufferLength];
                            responseStream.Read(buffer, 0, responseBufferLength);

                            if (!string.IsNullOrEmpty(response.Headers["errorCode"]))
                            {
                                int    errorCode    = int.Parse(response.Headers["errorCode"]);
                                string errorContent = Encoding.UTF8.GetString(buffer);

                                EngineCoreEvents.SystemEvents.NetWorkError.SafeInvoke(errorCode, errorContent);
                            }
                            else
                            {
                                long delta_time = CommonUtils.GetCurTimeMillSenconds() - start_time;

                                Debug.LogWarning($"C# HTTP ASYNC : cur msg {sendMessageWrapper.MessageId} total cost {delta_time} ms");

                                IMessage message = EngineCore.MessageParser.Parse(messageId, buffer);

                                this.m_messageQueue.Enqueue(new ResponseMessageWrapper(messageId, message));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                //Debug.LogError(string.Format("rsping msg id :{0} - {1}", sendMessageWrapper.MessageId, e.ToString()));

                this.m_context.Post(WorkQueueCallback, new SendMessageCallback()
                {
                    MessageId = sendMessageWrapper.MessageId,
                    Status    = NetworkModule.NetworkStatus.LOG_ERROR
                });
            }
        }