Exemple #1
0
        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;
                }
            }
        }
Exemple #2
0
        //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);
        }
Exemple #3
0
        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);
        }