Beispiel #1
0
        public LockSellStonesOrder LockSellStone(string buyerUserName, string orderNumber)
        {
            lock (_lockListSellOrders)
            {
                StoneOrderRunnable runnable = null;
                if (dicSellOrders.TryGetValue(orderNumber, out runnable))
                {
                    if (runnable.OrderState != SellOrderState.Wait)
                    {
                        return(null);
                    }
                    if (runnable.SellOrder.SellerUserName == buyerUserName)
                    {
                        return(null);
                    }
                    return(runnable.Lock(buyerUserName));
                }

                return(null);
            }
        }
Beispiel #2
0
        public LockSellStonesOrder AutoMatchLockSellStone(string userName, int stoneCount)
        {
            lock (_lockListSellOrders)
            {
                StoneOrderRunnable runnable = null;
                foreach (var item in dicSellOrders.Values)
                {
                    if (item.OrderState == SellOrderState.Wait && item.StoneCount <= stoneCount)
                    {
                        if (runnable == null)
                        {
                            runnable = item;
                        }
                        else
                        {
                            if (item.StoneCount > runnable.StoneCount)
                            {
                                runnable = item;
                            }
                        }

                        if (runnable != null && runnable.StoneCount == stoneCount)
                        {
                            break;
                        }
                    }
                }

                if (runnable == null)
                {
                    return(null);
                }

                return(runnable.Lock(userName));
            }
        }