internal ActionResult <AxisRatesResponse> ProcessRequest(Func <IAxisRates> Request, uint TransactionID, uint ClientID = 0, uint ClientTransactionID = 0, string Payload = "") { try { LogAPICall(HttpContext.Connection.RemoteIpAddress, HttpContext.Request.Path.ToString(), ClientID, ClientTransactionID, TransactionID, Payload); var rates = Request.Invoke(); IList <AxisRate> res = new List <AxisRate>(); foreach (IRate rate in rates) { res.Add(new AxisRate(rate.Minimum, rate.Maximum)); } return(Ok(new AxisRatesResponse() { ClientTransactionID = ClientTransactionID, ServerTransactionID = TransactionID, Value = res })); } catch (DeviceNotFoundException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { return(Ok(ResponseHelpers.ExceptionResponseBuilder <AxisRatesResponse>(ex, ClientTransactionID, TransactionID))); } }
internal ActionResult <Response> ProcessRequest(Action p, uint TransactionID, uint ClientID = 0, uint ClientTransactionID = 0, string payload = "") { try { LogAPICall(HttpContext.Connection.RemoteIpAddress, HttpContext.Request.Path.ToString(), ClientID, ClientTransactionID, TransactionID, payload); p.Invoke(); return(Ok(new Response() { ClientTransactionID = ClientTransactionID, ServerTransactionID = TransactionID })); } catch (DeviceNotFoundException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { return(Ok(ResponseHelpers.ExceptionResponseBuilder <Response>(ex, ClientTransactionID, TransactionID))); } }
/// <summary> /// This function logs the incoming API call then executes the passed function /// By executing the function this can catch any errors /// If it completes successfully a bool response is returned with an http 200 /// If no device is available an HTTP 400 is returned /// If the device call fails an Alpaca JSON error is returned /// </summary> /// <param name="Operation">The operation to preform on the device. Often this is just a lambda that returns a property. By passing it in as a function it can be executed inside a try catch and handle the exception.</param> /// <param name="TransactionID">The current server transaction id</param> /// <param name="ClientID">The client id</param> /// <param name="ClientTransactionID">The client transaction id</param> /// <param name="Payload">Any payload values, optional, only used for logging</param> /// <returns></returns> internal ActionResult <BoolResponse> ProcessRequest(Func <bool> Operation, uint TransactionID, uint ClientID, uint ClientTransactionID, string Payload = "") { try { LogAPICall(HttpContext.Connection.RemoteIpAddress, HttpContext.Request.Path.ToString(), ClientID, ClientTransactionID, TransactionID, Payload); return(Ok(new BoolResponse() { ClientTransactionID = ClientTransactionID, ServerTransactionID = TransactionID, Value = Operation.Invoke() })); } catch (DeviceNotFoundException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { return(Ok(ResponseHelpers.ExceptionResponseBuilder <BoolResponse>(ex, ClientTransactionID, TransactionID))); } }