コード例 #1
0
        /// <summary>
        /// Add item only if it does not already exist.
        /// </summary>
        /// <param name="item"></param>
        /// <returns>True if the add was performed, or false if it already exists.</returns>
        public bool AddUnique(TType item)
        {
            lock (this)
            {
                if (_instance.Contains(item))
                {
                    return(false);
                }

                List <TType> items = new List <TType>(_instance);
                items.Add(item);
                _instance = items;
            }

            ItemUpdateDelegate del = ItemAddedEvent;

            if (del != null)
            {
                del(this, item);
            }

            RaiseCollectionUpdateEvent();

            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Remove all instances that are equal, or the same as, this item.
        /// </summary>
        /// <returns>Count of items removed.</returns>
        public int RemoveAll(TType item)
        {
            int result = 0;

            lock (this)
            {
                List <TType> instance = new List <TType>(_instance);

                while (instance.Remove(item))
                {
                    result++;
                }

                if (result != 0)
                {
                    _instance = instance;
                }
            }

            ItemUpdateDelegate del = ItemRemovedEvent;

            if (result > 0 && del != null)
            {
                del(this, item);
            }

            RaiseCollectionUpdateEvent();

            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Implementation has internal check security,
        /// so no exceptions occur.
        /// </summary>
        /// <param name="index"></param>
        public void RemoveAt(int index)
        {
            TType item;

            lock (this)
            {
                if (_instance.Count > index)
                {
                    List <TType> items = new List <TType>(_instance);
                    item = items[index];
                    items.RemoveAt(index);
                    _instance = items;
                }
                else
                {
                    return;
                }
            }

            ItemUpdateDelegate del = ItemRemovedEvent;

            if (del != null)
            {
                del(this, item);
            }

            RaiseCollectionUpdateEvent();
        }
コード例 #4
0
        /// <summary>
        /// Managed thread entrance only.
        /// </summary>
        void Managed_tdSink_ITradeDeskEvents_Event_OnRowChanged(object tableDisp, string rowID)
        {
            if (LoggedIn)
            {
                TradeDeskAut desk = _desk;
                if (desk == null)
                {
                    return;
                }

                try
                {
                    FXCore.ITableAut t = (FXCore.ITableAut)tableDisp;
                    if ("offers".Equals(t.Type))
                    {
                        TableAut offersTable   = (TableAut)desk.FindMainTable("offers");
                        RowAut   instrumentRow = (RowAut)offersTable.FindRow("OfferID", rowID, 0);

                        DataTick dataTick = new DataTick();
                        dataTick.Ask      = (decimal)((double)instrumentRow.CellValue("Ask"));
                        dataTick.Bid      = (decimal)((double)instrumentRow.CellValue("Bid"));
                        dataTick.DateTime = (DateTime)instrumentRow.CellValue("Time");

                        QuoteUpdateDelegate delegateInstance = QuoteUpdatedEvent;
                        if (delegateInstance != null)
                        {
                            GeneralHelper.FireAndForget(delegateInstance, this, (string)instrumentRow.CellValue("Instrument"), dataTick);
                        }
                    }
                    else if ("orders".Equals(t.Type))
                    {
                        // Orders table empty?
                        //TableAut offersTable = (TableAut)desk.FindMainTable("orders");
                        //RowAut instrumentRow = (RowAut)offersTable.FindRow("OrderID", rowID, 0);

                        //string accountId;
                        //OrderInfo? info = Managed_ExtractOrderInfo(instrumentRow, out accountId);

                        //OrderUpdateDelegate delegateInstance = OrderUpdatedEvent;
                        //if (info.HasValue && delegateInstance != null)
                        //{
                        //    GeneralHelper.FireAndForget(delegateInstance, this, accountId, info.Value);
                        //}
                    }
                    else if ("accounts".Equals(t.Type))
                    {
                        ItemUpdateDelegate delegateInstance = AccountUpdatedEvent;
                        if (delegateInstance != null)
                        {
                            GeneralHelper.FireAndForget(delegateInstance, this, rowID);
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    SystemMonitor.Error("Failed to handle OnRow event", ex);
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// This method demonstrates the operation of the hot-swap mechanism.
        /// The existing instance is kept, for as long as the new one is
        /// created, then a fast swap is made.
        /// </summary>
        public void Add(TType item)
        {
            lock (this)
            {
                List <TType> items = new List <TType>(_instance);
                items.Add(item);
                _instance = items;
            }

            ItemUpdateDelegate del = ItemAddedEvent;

            if (del != null)
            {
                del(this, item);
            }

            RaiseCollectionUpdateEvent();
        }