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)));
            }
        }
示例#2
0
 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)));
            }
        }