public override IEnumerable <object> Run()
        {
            CashShopPurchaseRequestArguments arg = new CashShopPurchaseRequestArguments
            {
                ProductNo     = base.Operation.ProductNo,
                OrderQuantity = base.Operation.Quantity,
                Attribute0    = base.Operation.Attribute0,
                Attribute1    = base.Operation.Attribute1,
                Attribute2    = base.Operation.Attribute2,
                Attribute3    = base.Operation.Attribute3,
                Attribute4    = base.Operation.Attribute4
            };

            base.Finished = true;
            if (this.service.IsCashShopStopped)
            {
                base.Entity.SendErrorDialog("CashShop_EmergencyStop");
                yield return(new FailMessage("[QueryCashShopPurchaseItemProcessor] service.IsCashShopStopped")
                {
                    Reason = FailMessage.ReasonCode.LogicalFail
                });
            }
            else if (base.Entity.CID == -1L)
            {
                base.Entity.SendErrorDialog("CashShop_NotReady");
                yield return(new FailMessage("[QueryCashShopPurchaseItemProcessor] Entity.CID")
                {
                    Reason = FailMessage.ReasonCode.LogicalFail
                });
            }
            else if (base.Entity.BeginPurchaseItem(base.Operation.IsForCommonInven, arg) != null)
            {
                yield return(new OkMessage());
            }
            else
            {
                yield return(new FailMessage("[QueryCashShopPurchaseItemProcessor] Entity.BeginPurchaseItem")
                {
                    Reason = FailMessage.ReasonCode.LogicalFail
                });
            }
            yield break;
        }
Ejemplo n.º 2
0
        public override IEnumerable <object> Run()
        {
            if (this.service.IsCashShopStopped)
            {
                base.Entity.SendErrorDialog("CashShop_EmergencyStop");
                base.Finished = true;
                yield return(new FailMessage("[DirectPickUpProcessor] service.IsCashShopStopped")
                {
                    Reason = FailMessage.ReasonCode.LogicalFail
                });
            }
            else
            {
                DateTime currentTime = DateTime.UtcNow;
                if (base.Entity.IsConsecutivePurchase(currentTime))
                {
                    base.Entity.SendErrorDialog("CashShop_ConsecutivePurchase");
                    base.Finished = true;
                    yield return(new FailMessage("[DirectPickUpProcessor] Entity.IsConsecutivePurchase")
                    {
                        Reason = FailMessage.ReasonCode.LogicalFail
                    });
                }
                else
                {
                    base.Entity.UpdatePurchaseTime(currentTime);
                    List <CashShopPurchaseRequestArguments> args = new List <CashShopPurchaseRequestArguments>();
                    List <int> productnos = new List <int>();
                    foreach (CashShopItem product in base.Operation.QueryList)
                    {
                        CashShopProductListElement request;
                        if (!this.service.ProductByCashShopItemKey.TryGetValue(product.Key, out request))
                        {
                            base.Finished = true;
                            Log <DirectPickUpProcessor> .Logger.ErrorFormat("No Cash Item : [{0}/{1}/{2}]", product.ItemClass, product.Price, product.Expire);

                            yield return(new FailMessage("[DirectPickUpProcessor] product.Key")
                            {
                                Reason = FailMessage.ReasonCode.LogicalFail
                            });

                            yield break;
                        }
                        CashShopPurchaseRequestArguments arg = new CashShopPurchaseRequestArguments
                        {
                            ProductNo     = request.ProductNo,
                            OrderQuantity = 1,
                            Attribute0    = product.Attribute0,
                            Attribute1    = product.Attribute1,
                            Attribute2    = product.Attribute2,
                            Attribute3    = product.Attribute3,
                            Attribute4    = product.Attribute4
                        };
                        args.Add(arg);
                        productnos.Add(request.ProductNo);
                    }
                    AsyncResultSync sync = new AsyncResultSync(this.service.Thread);
                    IAsyncResult    ar   = base.Entity.BeginDirectPurchaseItem(args, base.Operation.TotalPrice, base.Operation.IsCredit, new AsyncCallback(sync.AsyncCallback), "DirectPurchase");
                    if (ar != null)
                    {
                        yield return(sync);
                    }
                    if (ar == null && !sync.Result)
                    {
                        base.Finished = true;
                        foreach (CashShopPurchaseRequestArguments cashShopPurchaseRequestArguments in args)
                        {
                            Log <DirectPickUpProcessor> .Logger.ErrorFormat("[directPickupProcessor Fail - sync.Result : [ UTC : {0}] : {1}", DateTime.UtcNow, cashShopPurchaseRequestArguments.ProductNo);
                        }
                        yield return(new FailMessage("[DirectPickUpProcessor] sync.Result")
                        {
                            Reason = FailMessage.ReasonCode.LogicalFail
                        });
                    }
                    else
                    {
                        IList <string> value = base.Entity.EndDirectPurchaseItem(ar);
                        base.Finished = true;
                        if (value.Count != base.Operation.QueryList.Count)
                        {
                            foreach (CashShopPurchaseRequestArguments cashShopPurchaseRequestArguments2 in args)
                            {
                                Log <DirectPickUpProcessor> .Logger.ErrorFormat("[directPickupProcessor Fail - value.Count : [ UTC : {0}] : {1}", DateTime.UtcNow, cashShopPurchaseRequestArguments2.ProductNo);
                            }
                            yield return(new FailMessage("[DirectPickUpProcessor] value.Count")
                            {
                                Reason = FailMessage.ReasonCode.LogicalFail
                            });
                        }
                        else
                        {
                            yield return(base.Entity.GetDirectPurchaseOrderNo(ar));

                            yield return(productnos);
                        }
                    }
                }
            }
            yield break;
        }
 public override IEnumerable <object> Run()
 {
     if (this.service.IsCashShopStopped)
     {
         base.Entity.SendErrorDialog("CashShop_EmergencyStop");
         base.Finished = true;
         yield return(new FailMessage("[RequestGoddessProtectionProcessor] service.IsCashShopStopped")
         {
             Reason = FailMessage.ReasonCode.LogicalFail
         });
     }
     else if (base.Entity.CID == -1L)
     {
         base.Finished = true;
         base.Entity.SendErrorDialog("CashShop_NotReady");
         yield return(new FailMessage("[RequestGoddessProtectionProcessor] Entity.CID")
         {
             Reason = FailMessage.ReasonCode.LogicalFail
         });
     }
     else
     {
         List <CashShopPurchaseRequestArguments> args = new List <CashShopPurchaseRequestArguments>();
         string targetItem;
         if (base.Operation.RequestType == 0)
         {
             targetItem = "goddess_protection";
         }
         else
         {
             targetItem = "goddess_protection_personal";
         }
         CashShopProductListElement product;
         if (!this.service.ProductByItemClass.TryGetValue(targetItem, out product))
         {
             base.Finished = true;
             yield return(new FailMessage("[RequestGoddessProtectionProcessor] targetItem")
             {
                 Reason = FailMessage.ReasonCode.LogicalFail
             });
         }
         else
         {
             CashShopPurchaseRequestArguments arg = new CashShopPurchaseRequestArguments
             {
                 ProductNo     = product.ProductNo,
                 OrderQuantity = 1,
                 Attribute0    = "",
                 Attribute1    = "",
                 Attribute2    = "",
                 Attribute3    = "",
                 Attribute4    = ""
             };
             args.Add(arg);
             AsyncResultSync sync = new AsyncResultSync(this.service.Thread);
             IAsyncResult    ar   = base.Entity.BeginDirectPurchaseItem(args, product.SalePrice, base.Operation.IsCredit, new AsyncCallback(sync.AsyncCallback), "GoddessProtection");
             if (ar != null)
             {
                 yield return(sync);
             }
             if (ar == null && !sync.Result)
             {
                 base.Finished = true;
                 yield return(new FailMessage("[RequestGoddessProtectionProcessor] !sync.Result")
                 {
                     Reason = FailMessage.ReasonCode.LogicalFail
                 });
             }
             else
             {
                 IList <string> value = base.Entity.EndDirectPurchaseItem(ar);
                 base.Finished = true;
                 if (value.Count == 0)
                 {
                     yield return(new FailMessage("[RequestGoddessProtectionProcessor] value.Count")
                     {
                         Reason = FailMessage.ReasonCode.LogicalFail
                     });
                 }
                 else
                 {
                     yield return(new OkMessage());
                 }
             }
         }
     }
     yield break;
 }
Ejemplo n.º 4
0
        public override IEnumerable <object> Run()
        {
            if (this.service.IsCashShopStopped)
            {
                base.Entity.SendErrorDialog("CashShop_EmergencyStop");
                base.Finished = true;
                yield return(new FailMessage("[DirectPickUpByProductNoProcessor] service.IsCashShopStopped")
                {
                    Reason = FailMessage.ReasonCode.LogicalFail
                });
            }
            else
            {
                DateTime currentTime = DateTime.UtcNow;
                if (base.Entity.IsConsecutivePurchase(currentTime))
                {
                    base.Entity.SendErrorDialog("CashShop_ConsecutivePurchase");
                    base.Finished = true;
                    yield return(new FailMessage("[DirectPickUpByProductNoProcessor] Entity.IsConsecutivePurchase")
                    {
                        Reason = FailMessage.ReasonCode.LogicalFail
                    });
                }
                else
                {
                    base.Entity.UpdatePurchaseTime(currentTime);
                    List <CashShopPurchaseRequestArguments> args = new List <CashShopPurchaseRequestArguments>();
                    Dictionary <string, int> resultDic           = new Dictionary <string, int>();
                    int price = 0;
                    foreach (int productNo in base.Operation.ProductNoList)
                    {
                        CashShopProductListElement request;
                        if (!this.service.ProductByProductID.TryGetValue(productNo, out request))
                        {
                            base.Finished = true;
                            Log <DirectPickUpByProductNoProcessor> .Logger.ErrorFormat("No Cash Item : [{0}]", productNo);

                            yield return(new FailMessage("[DirectPickUpByProductNoProcessor] productNo")
                            {
                                Reason = FailMessage.ReasonCode.LogicalFail
                            });

                            yield break;
                        }
                        CashShopPurchaseRequestArguments arg = new CashShopPurchaseRequestArguments
                        {
                            ProductNo     = request.ProductNo,
                            OrderQuantity = 1,
                            Attribute0    = "",
                            Attribute1    = "",
                            Attribute2    = "",
                            Attribute3    = "",
                            Attribute4    = ""
                        };
                        if (resultDic.ContainsKey(request.ProductID))
                        {
                            Dictionary <string, int> dictionary;
                            string productID;
                            (dictionary = resultDic)[productID = request.ProductID] = dictionary[productID] + 1;
                        }
                        else
                        {
                            resultDic.Add(request.ProductID, 1);
                        }
                        args.Add(arg);
                        price += request.SalePrice;
                    }
                    AsyncResultSync sync = new AsyncResultSync(this.service.Thread);
                    IAsyncResult    ar   = base.Entity.BeginDirectPurchaseItem(args, price, base.Operation.IsCredit, new AsyncCallback(sync.AsyncCallback), "DirectPurchase");
                    if (ar != null)
                    {
                        yield return(sync);
                    }
                    if (ar == null && !sync.Result)
                    {
                        base.Finished = true;
                        string failReason = "BeginDirectPurchaseItem failed";
                        yield return(failReason);

                        yield return(new FailMessage("[DirectPickUpByProductNoProcessor] sync.Result")
                        {
                            Reason = FailMessage.ReasonCode.LogicalFail
                        });
                    }
                    else
                    {
                        IList <string> value = base.Entity.EndDirectPurchaseItem(ar);
                        base.Finished = true;
                        if (value == null || value.Count != base.Operation.ProductNoList.Count)
                        {
                            string failReason = "EndDirectPurchaseItem failed.";
                            yield return(failReason);

                            yield return(new FailMessage("[DirectPickUpByProductNoProcessor] value.Count")
                            {
                                Reason = FailMessage.ReasonCode.LogicalFail
                            });
                        }
                        else
                        {
                            yield return(base.Entity.GetDirectPurchaseOrderNo(ar));

                            yield return(resultDic);
                        }
                    }
                }
            }
            yield break;
        }
Ejemplo n.º 5
0
        public override IEnumerable <object> Run()
        {
            CashShopPurchaseRequestArguments arg = new CashShopPurchaseRequestArguments
            {
                ProductNo     = base.Operation.ProductNo,
                OrderQuantity = base.Operation.Quantity,
                Attribute0    = base.Operation.Attribute0,
                Attribute1    = base.Operation.Attribute1,
                Attribute2    = base.Operation.Attribute2,
                Attribute3    = base.Operation.Attribute3,
                Attribute4    = base.Operation.Attribute4
            };

            if (this.service.IsCashShopStopped)
            {
                base.Finished = true;
                base.Entity.SendErrorDialog("CashShop_EmergencyStop");
                yield return(new FailMessage("[QueryCashShopPurchaseGiftProcessor] service.IsCashShopStopped")
                {
                    Reason = FailMessage.ReasonCode.LogicalFail
                });
            }
            else if (base.Entity.CID == -1L)
            {
                base.Finished = true;
                base.Entity.SendErrorDialog("CashShop_NotReady");
                yield return(new FailMessage("[QueryCashShopPurchaseGiftProcessor] Entity.CID")
                {
                    Reason = FailMessage.ReasonCode.LogicalFail
                });
            }
            else
            {
                QueryCIDByName queryCID = new QueryCIDByName(base.Operation.TargetName);
                UnifiedNetwork.OperationService.OperationSync queryCIDSync = new UnifiedNetwork.OperationService.OperationSync
                {
                    Service         = this.service,
                    ServiceCategory = "PlayerService.PlayerService",
                    Operation       = queryCID
                };
                yield return(queryCIDSync);

                if (!queryCIDSync.Result)
                {
                    base.Finished = true;
                    Log <QueryCashShopPurchaseGiftProcessor> .Logger.ErrorFormat("No cid for name.", base.Operation.TargetName);

                    yield return(new FailMessage("[QueryCashShopPurchaseGiftProcessor] queryCIDSync.Result")
                    {
                        Reason = FailMessage.ReasonCode.LogicalFail
                    });
                }
                else
                {
                    base.Finished = true;
                    if (base.Entity.BeginPurchaseGift(arg, string.Format("Char{0}", queryCID.CID), base.Operation.Message) != null)
                    {
                        yield return(new OkMessage());
                    }
                    else
                    {
                        yield return(new FailMessage("[QueryCashShopPurchaseGiftProcessor] Entity.BeginPurchaseGift")
                        {
                            Reason = FailMessage.ReasonCode.LogicalFail
                        });
                    }
                }
            }
            yield break;
        }