private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e) { lock (_syncRoot) { e.ApiContext.Result["Notifications"] = JArray.FromObject(_notifications); } }
private void HandleGetStatusRequest(IApiCall apiCall) { var eventArgs = new ApiRequestReceivedEventArgs(apiCall); StatusRequested?.Invoke(this, eventArgs); StatusRequestCompleted?.Invoke(this, eventArgs); }
private void RouteRequest(object sender, ApiRequestReceivedEventArgs e) { Action <IApiCall> handler; lock (_actions) { if (!_actions.TryGetValue(e.ApiContext.Action, out handler)) { e.ApiContext.ResultCode = ApiResultCode.ActionNotSupported; return; } } try { handler(e.ApiContext); } catch (Exception exception) { e.ApiContext.ResultCode = ApiResultCode.UnhandledException; e.ApiContext.Result = ExceptionSerializer.SerializeException(exception); } finally { e.IsHandled = true; } }
private void OnWebSocketMessageReceived(object sender, WebSocketMessageReceivedEventArgs e) { var requestMessage = JObject.Parse(((WebSocketTextMessage)e.Message).Text); var apiRequest = requestMessage.ToObject <ApiRequest>(); var context = new ApiCall(apiRequest.Action, apiRequest.Parameter, apiRequest.ResultHash); var eventArgs = new ApiRequestReceivedEventArgs(context); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { context.ResultCode = ApiResultCode.ActionNotSupported; } var apiResponse = new ApiResponse { ResultCode = context.ResultCode, Result = context.Result, ResultHash = context.ResultHash }; var jsonResponse = JObject.FromObject(apiResponse); jsonResponse["CorrelationId"] = requestMessage["CorrelationId"]; e.WebSocketClientSession.SendAsync(jsonResponse.ToString()).Wait(); }
private void DispatchWebSocketMessage(object sender, WebSocketMessageReceivedEventArgs e) { var requestMessage = JObject.Parse(((WebSocketTextMessage)e.Message).Text); var correlationId = (string)requestMessage["CorrelationId"]; var uri = (string)requestMessage["Uri"]; var request = (JObject)requestMessage["Content"] ?? new JObject(); var context = new ApiContext(uri, request, new JObject()); var eventArgs = new ApiRequestReceivedEventArgs(context); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { context.ResultCode = ApiResultCode.UnknownUri; } var responseMessage = new JObject { ["CorrelationId"] = correlationId, ["ResultCode"] = context.ResultCode.ToString(), ["Content"] = context.Response }; e.WebSocketClientSession.SendAsync(responseMessage.ToString()).Wait(); }
private void HandleGetConfigurationRequest(IApiCall apiCall) { var eventArgs = new ApiRequestReceivedEventArgs(apiCall); ConfigurationRequested?.Invoke(this, eventArgs); ConfigurationRequestCompleted?.Invoke(this, eventArgs); }
private void HandleStatusRequest(IApiContext apiContext) { apiContext.UseHash = true; var eventArgs = new ApiRequestReceivedEventArgs(apiContext); StatusRequested?.Invoke(this, eventArgs); StatusRequestCompleted?.Invoke(this, eventArgs); }
private void HandleApiConfigurationRequest(object sender, ApiRequestReceivedEventArgs e) { var areas = new JObject(); foreach (var area in _areas.GetAll()) { areas[area.Id.Value] = ExportAreaConfiguration(area); } e.Context.Response["Areas"] = areas; }
private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e) { var automations = new JObject(); foreach (var automation in _automations.GetAll()) { automations[automation.Id.Value] = automation.ExportStatusToJsonObject(); } e.Context.Response["Automations"] = automations; }
private void HandleApiConfigurationRequest(object sender, ApiRequestReceivedEventArgs e) { var areas = new JObject(); foreach (var area in GetAreas()) { areas[area.Id] = ExportAreaConfiguration(area); } e.ApiContext.Result["Areas"] = areas; }
private CloudConnectorApiContext ProcessCloudMessage(CloudRequestMessage cloudMessage) { var apiContext = new CloudConnectorApiContext(cloudMessage); var eventArgs = new ApiRequestReceivedEventArgs(apiContext); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { apiContext.ResultCode = ApiResultCode.ActionNotSupported; } return(apiContext); }
private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e) { var components = new JObject(); foreach (var component in _components.GetAll()) { var status = component.ExportStatus(); status["Settings"] = _settingsService.GetRawSettings(component.Id); components[component.Id.Value] = status; } e.Context.Response["Components"] = components; }
private void DispatchHttpRequest(HttpContext httpContext) { var apiContext = CreateApiContext(httpContext); if (apiContext == null) { httpContext.Response.StatusCode = HttpStatusCode.BadRequest; return; } var eventArgs = new ApiRequestReceivedEventArgs(apiContext); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { httpContext.Response.StatusCode = HttpStatusCode.BadRequest; return; } if (eventArgs.Context.Response == null) { eventArgs.Context.Response = new JObject(); } httpContext.Response.StatusCode = ConvertResultCode(eventArgs.Context.ResultCode); if (apiContext.UseHash) { var serverHash = GenerateHash(apiContext.Response.ToString()); eventArgs.Context.Response["$Hash"] = serverHash; var serverHashWithQuotes = "\"" + serverHash + "\""; string clientHash; if (httpContext.Request.Headers.TryGetValue(HttpHeaderNames.IfNoneMatch, out clientHash)) { if (clientHash.Equals(serverHashWithQuotes)) { httpContext.Response.StatusCode = HttpStatusCode.NotModified; return; } } httpContext.Response.Headers[HttpHeaderNames.ETag] = serverHashWithQuotes; } httpContext.Response.Body = new JsonBody(eventArgs.Context.Response); }
private void RouteRequest(object sender, ApiRequestReceivedEventArgs e) { var uri = e.Context.Uri.Trim(); Action <IApiContext> handler; if (_routes.TryGetValue(uri, out handler)) { e.IsHandled = true; HandleRequest(e.Context, handler); return; } e.Context.ResultCode = ApiResultCode.UnknownUri; }
private void DispatchRequest(HttpContext httpContext) { var apiContext = CreateContext(httpContext); if (apiContext == null) { httpContext.Response.StatusCode = HttpStatusCode.BadRequest; return; } var eventArgs = new ApiRequestReceivedEventArgs(apiContext); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { httpContext.Response.StatusCode = HttpStatusCode.BadRequest; return; } if (eventArgs.Context.Response == null) { eventArgs.Context.Response = new JsonObject(); } httpContext.Response.StatusCode = ConvertResultCode(eventArgs.Context.ResultCode); if (apiContext.CallType == ApiCallType.Request) { var serverHash = apiContext.Response.GetNamedObject("Meta", new JsonObject()).GetNamedString("Hash", string.Empty); var serverHashWithQuotes = "\"" + serverHash + "\""; string clientHash; if (httpContext.Request.Headers.TryGetValue(HttpHeaderNames.IfNoneMatch, out clientHash)) { if (clientHash.Equals(serverHashWithQuotes)) { httpContext.Response.StatusCode = HttpStatusCode.NotModified; return; } } httpContext.Response.Headers[HttpHeaderNames.ETag] = serverHashWithQuotes; } httpContext.Response.Body = new JsonBody(eventArgs.Context.Response); }
private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e) { var automations = new JObject(); foreach (var automation in _automations.Values.ToList()) { var status = new JObject { ["Settings"] = _settingsService.GetRawSettings(automation), //["State"] = JToken.FromObject(automation.GetState().Serialize()) }; automations[automation.Id] = status; } e.ApiContext.Result["Automations"] = automations; }
private void HandleApiStatusRequest(object sender, ApiRequestReceivedEventArgs e) { var components = new JObject(); foreach (var component in GetComponents().ToList()) { var status = new JObject { ["Settings"] = _settingsService.GetRawSettings(component), ["State"] = JToken.FromObject(component.GetState().Serialize()) }; components[component.Id] = status; } e.ApiContext.Result["Components"] = components; }
private void DistpachMessage(object sender, MessageReceivedEventArgs e) { var apiRequest = e.Body.ToObject <ApiRequest>(); var correlationId = (string)e.Body["CorrelationId"]; var context = new QueueBasedApiContext(correlationId, apiRequest.Action, apiRequest.Parameter, apiRequest.ResultHash); var eventArgs = new ApiRequestReceivedEventArgs(context); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { context.ResultCode = ApiResultCode.ActionNotSupported; } SendResponseMessage(context).Wait(); }
private void DistpachMessage(object sender, MessageReceivedEventArgs e) { var correlationId = (string)e.Body["CorrelationId"]; var uri = (string)e.Body["Uri"]; var request = (JObject)e.Body["Content"] ?? new JObject(); var context = new QueueBasedApiContext(correlationId, uri, request, new JObject()); var eventArgs = new ApiRequestReceivedEventArgs(context); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { context.ResultCode = ApiResultCode.UnknownUri; } SendResponseMessage(context).Wait(); }
private void HandleExecuteRequest(IApiCall apiCall) { if (apiCall.Parameter == null || string.IsNullOrEmpty(apiCall.Action)) { apiCall.ResultCode = ApiResultCode.InvalidParameter; return; } var apiRequest = apiCall.Parameter.ToObject <ApiRequest>(); if (apiRequest == null) { apiCall.ResultCode = ApiResultCode.InvalidParameter; return; } if (apiRequest.Action.Equals("Execute", StringComparison.OrdinalIgnoreCase)) { apiCall.ResultCode = ApiResultCode.ActionNotSupported; return; } var innerApiContext = new ApiCall(apiRequest.Action, apiRequest.Parameter ?? new JObject(), apiRequest.ResultHash); var eventArgs = new ApiRequestReceivedEventArgs(innerApiContext); RouteRequest(this, eventArgs); apiCall.ResultCode = innerApiContext.ResultCode; apiCall.Result = innerApiContext.Result; apiCall.ResultHash = innerApiContext.ResultHash; if (apiCall.ResultHash != null) { var newHash = GenerateHash(apiCall.Result.ToString()); if (apiCall.ResultHash.Equals(newHash)) { apiCall.Result = new JObject(); } apiCall.ResultHash = newHash; } }
private void OnApiRequestReceived(HttpContext context) { IApiCall apiCall = CreateApiContext(context); if (apiCall == null) { context.Response.StatusCode = HttpStatusCode.BadRequest; return; } var eventArgs = new ApiRequestReceivedEventArgs(apiCall); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { context.Response.StatusCode = HttpStatusCode.BadRequest; return; } context.Response.StatusCode = HttpStatusCode.Ok; if (eventArgs.ApiContext.Result == null) { eventArgs.ApiContext.Result = new JObject(); } var apiResponse = new ApiResponse { ResultCode = apiCall.ResultCode, Result = apiCall.Result, ResultHash = apiCall.ResultHash }; var json = JsonConvert.SerializeObject(apiResponse); context.Response.Body = Encoding.UTF8.GetBytes(json); context.Response.MimeType = MimeTypeProvider.Json; }
private void DistpachMessage(object sender, MessageReceivedEventArgs e) { Stopwatch processingStopwatch = Stopwatch.StartNew(); string uri = e.Body.GetNamedString("Uri", string.Empty); if (string.IsNullOrEmpty(uri)) { Log.Warning("Received Azure queue message with missing or invalid URI property."); return; } string callTypeSource = e.Body.GetNamedString("CallType", string.Empty); ApiCallType callType; if (!Enum.TryParse(callTypeSource, true, out callType)) { Log.Warning("Received Azure queue message with missing or invalid CallType property."); return; } var request = e.Body.GetNamedObject("Content", new JsonObject()); var context = new QueueBasedApiContext(e.BrokerProperties, e.Body, processingStopwatch, callType, uri, request, new JsonObject()); var eventArgs = new ApiRequestReceivedEventArgs(context); RequestReceived?.Invoke(this, eventArgs); if (!eventArgs.IsHandled) { Log.Warning("Received Azure queue message is not handled."); Log.Warning("Received Azure queue message is not handled."); return; } SendResponseMessage(context).Wait(); }
private void RouteRequest(object sender, ApiRequestReceivedEventArgs e) { string uri = e.Context.Uri.Trim(); Action <IApiContext> handler; if (e.Context.CallType == ApiCallType.Request && _requestRoutes.TryGetValue(uri, out handler)) { e.IsHandled = true; HandleRequest(e.Context, handler); return; } if (e.Context.CallType == ApiCallType.Command && _commandRoutes.TryGetValue(uri, out handler)) { e.IsHandled = true; HandleRequest(e.Context, handler); return; } e.Context.ResultCode = ApiResultCode.UnknownUri; }
private void ExposeStatus(object sender, ApiRequestReceivedEventArgs e) { }