コード例 #1
0
        public T Get <T>(string requestUri)
        {
            T result = default(T);

            try
            {
                byte[] responseBody = null;
                using (var client = new HttpClient())
                {
                    var response = client.GetAsync(requestUri).GetAwaiter().GetResult();
                    if (response.IsSuccessStatusCode)
                    {
                        responseBody = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();
                    }
                }

                if (responseBody != null && responseBody.Length > 0)
                {
                    result = _decoder.DecodeMessage <T>(responseBody, 0, responseBody.Length);
                }
            }
            catch (Exception ex)
            {
                _log.Error(string.Format("Get, RequestUri[{0}], Error[{1}].", requestUri, ex.Message), ex);
                result = default(T);
            }

            return(result);
        }
        public static MessageEnvelope <T> Instantiate <T>(this MessageEnvelope envelope, IMessageDecoder decoder)
        {
            var message = envelope.ConvertTo <T>();

            message.Message = decoder.DecodeMessage <T>(envelope.Body);
            return(message);
        }
コード例 #3
0
        public static HttpStatusCode Decode <T>(Request request, IBufferManager bufferManager, IMessageDecoder decoder, out T result)
        {
            result = default(T);

            var buffer = bufferManager.BorrowBuffer();
            int count  = request.Body.Read(buffer, 0, buffer.Length);

            if (count == 0)
            {
                bufferManager.ReturnBuffer(buffer);
                return(HttpStatusCode.BadRequest);
            }
            if (count == buffer.Length)
            {
                bufferManager.ReturnBuffer(buffer);
                return(HttpStatusCode.RequestEntityTooLarge);
            }

            result = decoder.DecodeMessage <T>(buffer, 0, count);
            bufferManager.ReturnBuffer(buffer);
            if (result == null)
            {
                return(HttpStatusCode.InternalServerError);
            }

            return(HttpStatusCode.OK);
        }
コード例 #4
0
        public void OnDataReceived(byte[] buffer, long offset, long size)
        {
            lock (messageLocker)
            {
                messageBuffer.WriteBytes(buffer, (int)offset, (int)size);

                if (messageBuffer.Length > 0)
                {
                    byte[][] dataBytesArr = messageBuffer.ReadMessages();
                    if (dataBytesArr != null && dataBytesArr.Length > 0)
                    {
                        foreach (var dataBytes in dataBytesArr)
                        {
                            if (messageDecoder.DecodeMessage(dataBytes, out int msgID, out byte[] msgBytes))
                            {
                                ClientMessageData data = messageDataPool.Get();
                                data.MsgId    = msgID;
                                data.MsgBytes = msgBytes;
                                messageDatas.Add(data);
                            }
                            else
                            {
                                NetLogger.Error(LOG_TAG, "error");
                            }
                        }
                    }
                }
コード例 #5
0
        public T Get <T>(string url, out HttpStatusCode statusCode)
        {
            T result = default(T);

            statusCode = HttpStatusCode.InternalServerError;

            try
            {
                byte[] responseBody = null;
                var    response     = _httpClient.GetAsync(url).GetAwaiter().GetResult();
                statusCode = response.StatusCode;
                if (response.IsSuccessStatusCode) // StatusCode was in the range 200-299;
                {
                    responseBody = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();
                }
                else
                {
                    _log.WarnFormat("Get, Url[{0}], StatusCode[{1}|{2}].",
                                    url, response.StatusCode, response.StatusCode.ToString());

                    // NotFound indicates that the requested resource does not exist on the server.
                    if (response.StatusCode != HttpStatusCode.NotFound)
                    {
                        // otherwise, any other status code within response means unsuccessful
                        throw new UnanticipatedResponseException(
                                  string.Format("HTTP [GET] response with StatusCode[{0}|{1}] was unanticipated.",
                                                response.StatusCode, response.StatusCode.ToString()));
                    }
                }

                if (responseBody != null && responseBody.Length > 0)
                {
                    result = _decoder.DecodeMessage <T>(responseBody, 0, responseBody.Length);
                }
            }
            catch (Exception ex)
            {
                _log.Error(string.Format("Get, Url[{0}], Error[{1}].", url, ex.Message), ex);
                result = default(T);
            }

            return(result);
        }
コード例 #6
0
        public T Get <T>(string url, out HttpStatusCode statusCode)
        {
            T result = default(T);

            statusCode = HttpStatusCode.InternalServerError;

            try
            {
                byte[] responseBody = null;
                var    response     = _httpClient.GetAsync(url).Result;
                statusCode = response.StatusCode;
                if (response.IsSuccessStatusCode) // StatusCode was in the range 200-299;
                {
                    responseBody = response.Content.ReadAsByteArrayAsync().Result;
                }
                else
                {
                    _log.WarnFormat("Get, Url[{0}], StatusCode[{1}|{2}].",
                                    url, (int)response.StatusCode, response.StatusCode.ToString());

                    throw new UnanticipatedResponseException(
                              string.Format("HTTP [{0}] request to Uri[{1}] responses with StatusCode[{2}|{3}] is unanticipated.",
                                            response.RequestMessage.Method, response.RequestMessage.RequestUri, (int)response.StatusCode, response.StatusCode.ToString()));
                }

                if (responseBody != null && responseBody.Length > 0)
                {
                    result = _decoder.DecodeMessage <T>(responseBody, 0, responseBody.Length);
                }
            }
            catch (Exception ex)
            {
                _log.Error(string.Format("Get, Url[{0}], Error[{1}].", url, ex.Message), ex);
                throw new HttpRequestException(ex.Message, ex);
            }

            return(result);
        }
コード例 #7
0
 public T DecodeFrameData <T>(byte[] data, int offset, int count)
 {
     return(_decoder.DecodeMessage <T>(data, offset, count));
 }
コード例 #8
0
 public IActorMessageEnvelope DecodeEnvelope(byte[] data, int offset, int count)
 {
     return(_decoder.DecodeMessage <ActorMessageEnvelope>(data, offset, count));
 }