示例#1
0
        /// <summary>
        /// Find the order in the provided table that matches the specified transaction.
        /// </summary>
        /// <param name="table"></param>
        /// <param name="trans"></param>
        /// <returns></returns>
        private static Order MatchOrder(EMMADataSet.OrdersDataTable table, Transaction trans)
        {
            Order retVal = null;
            decimal priceDiff = decimal.MaxValue;

            foreach (EMMADataSet.OrdersRow order in table)
            {
                if (retVal == null || order.Issued.CompareTo(retVal.Date) > 0)
                {
                    if (order.Issued.CompareTo(trans.Datetime) <= 0)
                    {
                        bool inRange = false;

                        if (order.Range == OrderRange.GetRangeFromText("Region"))
                        {
                            if (Stations.GetStation(order.StationID).regionID ==
                                Stations.GetStation(trans.StationID).regionID) { inRange = true; }
                        }
                        else if (order.Range == OrderRange.GetRangeFromText("Station"))
                        {
                            if (order.StationID == trans.StationID) { inRange = true; }
                        }
                        else if (order.Range == OrderRange.GetRangeFromText("Solar System"))
                        {
                            if (Stations.GetStation(order.StationID).solarSystemID ==
                                Stations.GetStation(trans.StationID).solarSystemID) { inRange = true; }
                        }
                        else
                        {
                            List<long> systemsInRange = SolarSystemDistances.GetSystemsInRange(
                                order.StationID, (int)order.Range);
                            if (systemsInRange.Contains(Stations.GetStation(trans.StationID).solarSystemID))
                            {
                                inRange = true;
                            }
                        }

                        if (inRange && Math.Abs(order.Price - trans.Price) < priceDiff)
                        {
                            retVal = new Order(order);
                            priceDiff = Math.Abs(order.Price - trans.Price);
                        }
                    }
                }
            }

            return retVal;
        }
示例#2
0
        public static OrdersList LoadOrders(List<AssetAccessParams> accessParams, List<int> itemIDs,
            List<long> stationIDs, int state, string type)
        {
            OrdersList retVal = new OrdersList();
            EMMADataSet.OrdersDataTable table = LoadOrdersData(accessParams, itemIDs, stationIDs, state, type);

            foreach (EMMADataSet.OrdersRow row in table)
            {
                Order order = new Order(row, accessParams);
                retVal.Add(order);
            }
            return retVal;
        }
示例#3
0
        public static void Store(Order orderData)
        {
            EMMADataSet.OrdersDataTable table = new EMMADataSet.OrdersDataTable();
            EMMADataSet.OrdersRow orderRow = null;
            bool newRow = false;

            lock (tableAdapter)
            {
                tableAdapter.FillByID(table, orderData.ID);
            }

            if (table.Count == 0)
            {
                orderRow = table.NewOrdersRow();
                newRow = true;
            }
            else
            {
                orderRow = table[0];
            }

            bool corp = false;
            APICharacter charData = UserAccount.CurrentGroup.GetCharacter(orderData.OwnerID, ref corp);
            //orderRow.OwnerID = charData.CharID;
            orderRow.OwnerID = orderData.OwnerID;
            orderRow.ForCorp = corp;
            orderRow.StationID = orderData.StationID;
            orderRow.TotalVol = orderData.TotalVol;
            orderRow.RemainingVol = orderData.RemainingVol;
            orderRow.MinVolume = orderData.MinVol;
            orderRow.OrderState = orderData.StateID;
            orderRow.ItemID = orderData.ItemID;
            orderRow.Range = orderData.Range;
            orderRow.WalletID = orderData.WalletID;
            orderRow.Duration = orderData.Duration;
            orderRow.Escrow = orderData.Escrow;
            orderRow.Price = orderData.Price;
            orderRow.BuyOrder = orderData.BuyOrder;
            orderRow.Issued = orderData.Date;
            orderRow.EveOrderID = orderData.EveOrderID;
            orderRow.Processed = false;

            if (newRow)
            {
                table.AddOrdersRow(orderRow);
            }

            lock (tableAdapter)
            {
                tableAdapter.Update(table);
            }
        }
示例#4
0
        /// <summary>
        /// Get the order used for the specified transaction. 
        /// Note that many transactions will not have orders related to them. In this case
        /// the return value will be false and the two out parameters will be null.
        /// </summary>
        /// <param name="trans"></param>
        /// <returns></returns>
        public static bool GetOrder(Transaction trans, out Order buyOrder, out Order sellOrder)
        {
            bool retVal = false;
            bool buyerForCorp = false, sellerForCorp = false;
            long buyerID =0, sellerID = 0;
            buyOrder = null;
            sellOrder = null;

            buyerID = trans.BuyerID;
            sellerID = trans.SellerID;
            APICharacter buyChar = UserAccount.CurrentGroup.GetCharacter(buyerID, ref buyerForCorp);
            APICharacter sellChar = UserAccount.CurrentGroup.GetCharacter(sellerID, ref sellerForCorp);

            EMMADataSet.OrdersDataTable table = new EMMADataSet.OrdersDataTable();
            if (buyChar != null)
            {
                if (buyerID == _lastBuyerID && trans.ItemID == _lastItemID)
                {
                    table = _lastBuyerOrders;
                }
                else
                {
                    lock (tableAdapter)
                    {
                        tableAdapter.FillByAnySingle(table, trans.BuyerID, 0, trans.ItemID, 0, 0, "Any");
                        _lastBuyerID = buyerID;
                        _lastItemID = trans.ItemID;
                        _lastBuyerOrders = table;
                    }
                }
                buyOrder = MatchOrder(table, trans);
            }
            if (sellChar != null)
            {
                table.Clear();
                if (sellerID == _lastSellerID && trans.ItemID == _lastItemID)
                {
                    table = _lastSellerOrders;
                }
                else
                {
                    lock (tableAdapter)
                    {
                        tableAdapter.FillByAnySingle(table, sellerID, 0, trans.ItemID, 0, 0, "Any");
                        _lastSellerID = sellerID;
                        _lastItemID = trans.ItemID;
                        _lastSellerOrders = table;
                    }
                }
                sellOrder = MatchOrder(table, trans);
            }

            retVal = buyOrder != null || sellOrder != null;
            return retVal;
        }