private void InitNotFinishedOrderList() { dicSellOrders.Clear(); var waitOrderDBObjects = DBProvider.StoneOrderDBProvider.GetSellOrderList("", "", (int)SellOrderState.Wait, null, null, 0, 0); foreach (var item in waitOrderDBObjects) { var runnable = new StoneOrderRunnable(item); dicSellOrders[item.OrderNumber] = new StoneOrderRunnable(item); } var lockedOrderDBObjects = DBProvider.StoneOrderDBProvider.GetLockSellStonesOrderList("", "", "", 0); foreach (var item in lockedOrderDBObjects) { TimeSpan span = DateTime.Now - item.LockedTime; if (span.TotalSeconds > GlobalConfig.GameConfig.BuyOrderLockTimeMinutes * 60) { var runnable = new StoneOrderRunnable(item); runnable.ReleaseLock(); //解除锁定后,继续加到集合中 dicSellOrders[item.StonesOrder.OrderNumber] = runnable; } else { item.OrderLockedTimeSpan = (int)span.TotalSeconds; var runnable = new StoneOrderRunnable(item); dicSellOrders[item.StonesOrder.OrderNumber] = runnable; } } }
//public bool LockSellOrder(string sellOrderNumber, string buyerUserName) //{ // OrderRunnable order = null; // lock (this._lockListSellOrders) // { // this.dicSellOrders.TryGetValue(sellOrderNumber, out order); // } // if (order == null) // { // return false; // } // return order.Lock(buyerUserName); //} /// <summary> /// 由客户端检查超时。 /// </summary> /// <param name="orderNumber"></param> /// <returns></returns> public bool ReleaseLockSellOrder(string orderNumber) { StoneOrderRunnable order = null; lock (this._lockListSellOrders) { this.dicSellOrders.TryGetValue(orderNumber, out order); } if (order == null) { return(false); } bool isOK = order.ReleaseLock(); return(isOK); }
public int RejectExceptionStoneOrder(string orderNumber) { StoneOrderRunnable order = null; lock (this._lockListSellOrders) { this.dicSellOrders.TryGetValue(orderNumber, out order); } if (order == null) { return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } if (order.OrderState != SellOrderState.Exception) { return(OperResult.RESULTCODE_ORDER_ISNOT_EXCEPTION); } string buyerUserName = order.GetLockedByUserName(); order.SetOrderState(SellOrderState.Wait); bool isOK = order.ReleaseLock(); if (isOK) { if (!string.IsNullOrEmpty(buyerUserName)) { string tokenBuyer = ClientManager.GetToken(buyerUserName); if (!string.IsNullOrEmpty(tokenBuyer) && this.StoneOrderAppealFailed != null) { this.StoneOrderAppealFailed(tokenBuyer, order.OrderNumber); } } return(OperResult.RESULTCODE_TRUE); } return(OperResult.RESULTCODE_FALSE); }