コード例 #1
0
        public void Parse(HttpListenerContext httpContext)
        {
            try
            {
                var httpRequest = httpContext.Request;

                using (var reader = new StreamReader(httpRequest.InputStream, Encoding.UTF8))
                {
                    var line       = reader.ReadToEnd();
                    var rpcContext = new HttpServiceContext(this, httpContext);

                    _packetLogger.Verbose("rx: {0}", line.PrettifyJson());

                    var async = new JsonRpcStateAsync(_rpcResultHandler, rpcContext)
                    {
                        JsonRpc = line
                    };
                    JsonRpcProcessor.Process(Pool.Config.Coin.Name, async, rpcContext);
                }
            }
            catch (JsonReaderException e) // if client sent an invalid message
            {
                _logger.Error("Skipping invalid json-rpc request - {0:l}", e.Message);
            }
        }
コード例 #2
0
        /// <summary>
        /// derived class must implement to handle Post request
        /// </summary>
        protected override HttpServiceResponse ProcessPostRequest(HttpServiceContext context)
        {
            BaseServiceNode service = _service as BaseServiceNode;

            if (service == null)
            {
                return(CreateResponseForBadRequest(context, Name, $"PostNotSupported {context.Context.Request.Url.AbsoluteUri}"));
            }

            string dataName = nameof(BaseServiceNode.Status);

            if (context.UnmatchedSegments?.Count > 0 && string.Equals(dataName, context.UnmatchedSegments[0], StringComparison.OrdinalIgnoreCase))
            {
                SensorStatusData data = null;
                string           json = GetFromRequestStream(context.Context.Request);
                try
                {
                    data = JsonConvert.DeserializeObject <SensorStatusData>(json);
                }
                catch (Exception err)
                {
                    return(CreateResponseForBadRequest(context, Name, $"InvalidData {json}"));
                }

                service.SetStatus(data.SensorRate, data.IsOn);
                return(CreateSuccessResponse(context, Name, 200));
            }

            return(CreateResponseForBadRequest(context, Name, $"InvalidPostRequestPath {context.Context.Request.Url.AbsoluteUri}"));
        }
コード例 #3
0
ファイル: ActionRequestHandler.cs プロジェクト: rphuang/riot
        /// <summary>
        /// derived class must implement to handle Post request
        /// </summary>
        protected override HttpServiceResponse ProcessPostRequest(HttpServiceContext context)
        {
            T      data = null;
            string json = GetFromRequestStream(context.Context.Request);

            try
            {
                data = JsonConvert.DeserializeObject <T>(json);
            }
            catch (Exception err)
            {
                return(CreateResponseForBadRequest(context, Name, $"InvalidData: {json}"));
            }

            if (_service.RequireUiThread)
            {
                UiActionBag.Instance.AddAction(_service, data);
                return(CreateSuccessResponse(context, Name, 200, $"{Path} ActionScheduled"));
            }
            if (_service.Act(data))
            {
                return(CreateSuccessResponse(context, Name, 200, $"{Path} ActionProcessed"));
            }

            return(CreateResponseForBadRequest(context, Name, $"{Path} Action Failed"));
        }
コード例 #4
0
        /// <summary>
        /// derived class must implement to handle Post request
        /// </summary>
        protected override HttpServiceResponse ProcessPostRequest(HttpServiceContext context)
        {
            SubscriptionData subscriptionData = null;
            string           json             = GetFromRequestStream(context.Context.Request);

            try
            {
                subscriptionData = JsonConvert.DeserializeObject <SubscriptionData>(json);
            }
            catch (Exception err)
            {
                return(CreateResponseForBadRequest(context, Name, $"InvalidSubscription: {json}"));
            }

            if (!ValidateSubscriptionData(subscriptionData))
            {
                return(CreateResponseForBadRequest(context, Name));
            }

            HttpServiceResponse response = null;
            HttpTargetSite      target   = subscriptionData.Target;
            string invalidList           = string.Empty;
            int    okCount = 0;

            foreach (SubscriptionItem item in subscriptionData.Items)
            {
                bool ok = Subscribe(item, target);
                if (ok)
                {
                    okCount++;
                }
                else
                {
                    if (!string.IsNullOrEmpty(invalidList))
                    {
                        invalidList += ", ";
                    }
                    invalidList += $"{item.Node}.{item.Data}";
                }
            }
            if (string.IsNullOrEmpty(invalidList))
            {
                response = CreateSuccessResponse(context, Name, 200, null);
            }
            else
            {
                string invalidJson = $"{{\"subscriptionError\": \"{invalidList}\"}}";
                if (okCount > 0)
                {
                    response = CreateSuccessResponse(context, Name, 206, invalidJson);
                }
                else
                {
                    CreateResponse(context, Name, false, 400, invalidJson);
                }
            }
            return(response);
        }
コード例 #5
0
        /// <summary>
        /// derived class must implement to handle GET request
        /// </summary>
        protected override HttpServiceResponse ProcessGetRequest(HttpServiceContext context)
        {
            HttpListenerRequest  request  = context.Context.Request;
            HttpListenerResponse response = context.Context.Response;

            // only respond if the request is to the quit path
            if (string.Equals(Path, request.Url.AbsolutePath, StringComparison.OrdinalIgnoreCase))
            {
                _quitRequested = true;
                return(CreateSuccessResponse(context, Name, 200, "{ \"response\": \"Quiting\" }"));
            }
            return(CreateResponseForBadRequest(context, Name, "InvalidRootPath: " + request.Url.AbsolutePath));
        }
コード例 #6
0
        /// <summary>
        /// derived class must implement to handle GET request
        /// </summary>
        protected override HttpServiceResponse ProcessGetRequest(HttpServiceContext context)
        {
            HttpListenerRequest  request  = context.Context.Request;
            HttpListenerResponse response = context.Context.Response;

            string dataName = _defaultDataName;

            if (context.UnmatchedSegments?.Count > 0)
            {
                dataName = context.UnmatchedSegments[0];
            }
            IotData data = _service.GetData <IotData>(dataName);

            if (data != null)
            {
                string responseString = JsonConvert.SerializeObject(data, DefaultJsonSerializerSettings);
                response.ContentType = "application/json";
                return(CreateSuccessResponse(context, Name, 200, responseString));
            }
            return(CreateResponseForBadRequest(context, Name, $"InvalidDataName: {dataName}"));
        }
コード例 #7
0
 /// <summary>
 /// derived class must implement to handle Post request
 /// </summary>
 protected override HttpServiceResponse ProcessPostRequest(HttpServiceContext context)
 {
     return(ProcessGetRequest(context));
 }