コード例 #1
0
        public Delivery(Guid pId, string pUserFrom, string pCustomerName, string pPhone, string pAddress, DateTime pCommitTime, DateTime pDeliveryTime, DeliveryState pState, List<DishQuota> pDishQuotaList)
        {
            id = pId;
            userFrom = pUserFrom;
            customerName = pCustomerName;
            phone = pPhone;
            address = pAddress;
            commitTime = pCommitTime;
            deliveryTime = pDeliveryTime;

            state = pState;
            dishQuotaList = pDishQuotaList;
        }
コード例 #2
0
        public void CompleteDelivery(Guid pId, string pUserFrom, string pCustomerName, string pPhone, string pAddress, DateTime pCommitTime, DateTime pDeliveryTime, DeliveryState pState)
        {
            id = pId;
            userFrom = pUserFrom;
            customerName = pCustomerName;
            phone = pPhone;
            address = pAddress;
            commitTime = pCommitTime;
            deliveryTime = pDeliveryTime;

            state = pState;
        }
コード例 #3
0
        public void ChangeState(DeliveryState pState)
        {
            state = pState;

            //~ synchronize to db, if need to maintain the state in db
            DataContextDataContext dc = new DataContextDataContext();
            dc.update_state_delivery(id, (int?)state);
        }
コード例 #4
0
            static void OnMessage(ListenerLink link, Message message, DeliveryState deliveryState, object state)
            {
                var thisPtr = (TxnManager)state;
                object body;
                try
                {
                    body = Message.Decode(((BrokerMessage)message).Buffer).Body;
                }
                catch (Exception exception)
                {
                    Trace.WriteLine(TraceLevel.Error, exception.Message);
                    link.DisposeMessage(
                        message,
                        new Rejected() { Error = new Error() { Condition = ErrorCode.DecodeError, Description = "Cannot decode txn message" } },
                        true);

                    return;
                }

                if (body is Declare)
                {
                    int txnId = thisPtr.CreateTransaction();
                    var outcome = new Declared() { TxnId = BitConverter.GetBytes(txnId) };
                    link.DisposeMessage(message, outcome, true);
                }
                else if (body is Discharge)
                {
                    Discharge discharge = (Discharge)body;
                    int txnId = BitConverter.ToInt32(discharge.TxnId, 0);
                    Transaction txn;
                    if (thisPtr.transactions.TryGetValue(txnId, out txn))
                    {
                        lock (thisPtr.transactions)
                        {
                            thisPtr.transactions.Remove(txnId);
                        }

                        txn.Discharge(discharge.Fail);
                        link.DisposeMessage(message, new Accepted(), true);
                    }
                    else
                    {
                        link.DisposeMessage(
                            message,
                            new Rejected() { Error = new Error() { Condition = ErrorCode.NotFound, Description = "Transaction not found" } },
                            true);
                    }
                }
                else
                {
                    link.DisposeMessage(
                        message,
                        new Rejected() { Error = new Error() { Condition = ErrorCode.NotImplemented, Description = "Unsupported message body" } },
                        true);
                }
            }
コード例 #5
0
                static void OnMessage(ListenerLink link, Message message, DeliveryState deliveryState, object state)
                {
                    var thisPtr = (Publisher)state;
                    string errorCondition = null;
                    if (message.ApplicationProperties != null &&
                        (errorCondition = (string)message.ApplicationProperties["errorcondition"]) != null)
                    {
                        link.DisposeMessage(
                            message,
                            new Rejected() { Error = new Error() { Condition = errorCondition, Description = "message was rejected" } },
                            true);
                    }
                    else
                    {
                        var txnState = deliveryState as TransactionalState;
                        if (txnState != null)
                        {
                            Transaction txn = thisPtr.queue.broker.txnManager.GetTransaction(txnState.TxnId);
                            txn.AddOperation(message, onDischarge, thisPtr);
                            txnState.Outcome = new Accepted();
                        }
                        else
                        {
                            thisPtr.queue.Enqueue((BrokerMessage)message);
                            deliveryState = new Accepted();
                        }

                        thisPtr.link.DisposeMessage(message, deliveryState, true);
                    }
                }
コード例 #6
0
 static void OnDispose(Message message, DeliveryState deliveryState, bool settled, object state)
 {
     var thisPtr = (Consumer)state;
     if (deliveryState is TransactionalState)
     {
         Transaction txn = thisPtr.queue.broker.txnManager.GetTransaction(((TransactionalState)deliveryState).TxnId);
         txn.AddOperation(message, onDischarge, thisPtr);
     }
     else
     {
         if (deliveryState is Released)
         {
             thisPtr.queue.Unlock((BrokerMessage)message);
         }
         else
         {
             thisPtr.queue.Dequeue((BrokerMessage)message);
         }
     }
 }