private static List <SaleGoodsData> GetCachedSaleGoodsList(SearchArgs searchArgs) { Predicate <SaleGoodsData> match = null; Predicate <SaleGoodsData> predicate2 = null; List <SaleGoodsData> saleGoodsDataList = null; SearchArgs args = new SearchArgs(searchArgs); int colorFlags = -1; int moneyFlags = -1; int orderBy = -1; int orderTypeFlags = -1; lock (Mutex_SaleGoodsDict) { while (!_OrderdSaleGoodsListDict.TryGetValue(searchArgs, out saleGoodsDataList)) { if (searchArgs.ColorFlags < 0x3f) { colorFlags = searchArgs.ColorFlags; searchArgs.ColorFlags = 0x3f; } else if (searchArgs.MoneyFlags < 7) { moneyFlags = searchArgs.MoneyFlags; searchArgs.MoneyFlags = 7; } else if (searchArgs.OrderBy > 0) { orderBy = searchArgs.OrderBy; searchArgs.OrderBy = 0; } else { if (searchArgs.OrderTypeFlags <= 1) { break; } orderTypeFlags = searchArgs.OrderTypeFlags; searchArgs.OrderTypeFlags = 0; } } if (null == saleGoodsDataList) { saleGoodsDataList = GetSaleGoodsDataList(searchArgs.Type, searchArgs.ID); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), new List <SaleGoodsData>(saleGoodsDataList)); } if (orderTypeFlags > 0) { saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); saleGoodsDataList.Sort(GetComparerFor(true, true, (SearchOrderTypes)orderTypeFlags)); searchArgs.OrderTypeFlags = orderTypeFlags; _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } if (orderBy > 0) { saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); searchArgs.OrderBy = orderBy; saleGoodsDataList.Reverse(); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } if (moneyFlags > 0) { searchArgs.MoneyFlags = moneyFlags; saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); if (match == null) { match = delegate(SaleGoodsData x) { bool flag; if (x.SalingGoodsData.SaleMoney1 > 0) { flag = (moneyFlags & 1) == 0; } else if (x.SalingGoodsData.SaleYuanBao > 0) { flag = (moneyFlags & 2) == 0; } else { flag = (x.SalingGoodsData.SaleYinPiao <= 0) || ((moneyFlags & 4) == 0); } return(flag); }; } saleGoodsDataList.RemoveAll(match); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } if (colorFlags > 0) { saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); searchArgs.ColorFlags = colorFlags; if (predicate2 == null) { predicate2 = x => ((1 << ((Global.GetEquipColor(x.SalingGoodsData) - 1) & 0x1f)) & searchArgs.ColorFlags) == 0; } saleGoodsDataList.RemoveAll(predicate2); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } } return(saleGoodsDataList); }
/// <summary> /// 获取缓存的挂售物品列表 /// </summary> /// <param name="searchArgs"></param> /// <returns></returns> private static List <SaleGoodsData> GetCachedSaleGoodsList(SearchArgs searchArgs) { List <SaleGoodsData> saleGoodsDataList = null; SearchArgs args = new SearchArgs(searchArgs); int colorFlags = -1; int moneyFlags = -1; int orderBy = -1; int orderTypeFlags = -1; lock (Mutex_SaleGoodsDict) { do { //是否缓存已有相应结果 if (_OrderdSaleGoodsListDict.TryGetValue(searchArgs, out saleGoodsDataList)) { break; } else if (searchArgs.ColorFlags < SaleManager.ConstAllColorFlags) { colorFlags = searchArgs.ColorFlags; searchArgs.ColorFlags = SaleManager.ConstAllColorFlags; } else if (searchArgs.MoneyFlags < SaleManager.ConstAllMoneyFlags) { moneyFlags = searchArgs.MoneyFlags; searchArgs.MoneyFlags = SaleManager.ConstAllMoneyFlags; } else if (searchArgs.OrderBy > 0) { orderBy = searchArgs.OrderBy; searchArgs.OrderBy = 0; } else if (searchArgs.OrderTypeFlags > (int)SearchOrderTypes.OrderByMoney) { orderTypeFlags = searchArgs.OrderTypeFlags; searchArgs.OrderTypeFlags = 0; } else { break; } } while (true); if (null == saleGoodsDataList) { saleGoodsDataList = GetSaleGoodsDataList(searchArgs.Type, searchArgs.ID); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), new List <SaleGoodsData>(saleGoodsDataList)); } if (orderTypeFlags > 0) { saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); saleGoodsDataList.Sort(GetComparerFor(true, true, (SearchOrderTypes)orderTypeFlags)); searchArgs.OrderTypeFlags = orderTypeFlags; _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } if (orderBy > 0) { saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); searchArgs.OrderBy = orderBy; saleGoodsDataList.Reverse(); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } if (moneyFlags > 0) { searchArgs.MoneyFlags = moneyFlags; saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); saleGoodsDataList.RemoveAll((x) => { if (x.SalingGoodsData.SaleMoney1 > 0) { return((moneyFlags & 1) == 0); } else if (x.SalingGoodsData.SaleYuanBao > 0) { return((moneyFlags & 2) == 0); } return(true); }); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } if (colorFlags > 0) { saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList); searchArgs.ColorFlags = colorFlags; saleGoodsDataList.RemoveAll((x) => { int color = Global.GetEquipColor(x.SalingGoodsData); if ((1 << (color - 1) & searchArgs.ColorFlags) == 0) { return(true); } return(false); }); _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList); } } return(saleGoodsDataList); }