суббота, 12 мая 2018 г.

ProcessTask Setup in SubSystem

QuikTradeTerminal:

private void SetupProcessTask()
        {
            ProcessTask = new ProcessTask<IEventArgs1>();
            ProcessTask.Init();
            ProcessTask.TimeInterval = 1000;
            ProcessTask.Parent = this;
            ProcessTask.IsEveryItemPushProcessing = true;

// Item Processing
            ProcessTask.ItemProcessingAction = args =>
            {
                try
                {
                    args.Action(args);
                }
                catch (Exception e)
                {
                    SendException(e);
                }
            };
        }

private void SendReplyEventArgs(TransactionReplyItem tr)
        {
            var eargs = new EventArgs1
            {
                Process = "QuikTransactionsProcess",
                Category = "QuikTransactions",
                Entity = "TransactionReplyItem",
                Operation = "AddOrUpdate",
                Object = tr,
                Action = TransactionReplyResolve
            };
            ProcessTask?.EnQueue(eargs);
        }

public void TransactionReplyResolve(IEventArgs1 args)
        {
            var trReply = (TransactionReplyItem)args.Object;
            var dwTransId = trReply.TransId;
            var replyMessage = trReply.ReplyMessage;
            var nResult = trReply.Result;
            var nExtendedErrorCode = trReply.ExtendedErrorCode;
            var nReplyCode = trReply.ReplyCode;
            var dOrderNum = trReply.OrderNum;

            TransactionReplyEvent?.Invoke((int)nResult, (uint)dwTransId, dOrderNum);
...
    

Tickers:

public bool IsProcessTaskInUse { get; set; }

[XmlIgnore]
public GS.ProcessTasks.ProcessTask<string> ProcessTask { get; private set; }

        private void SetupProcessTask()
        {
            ProcessTask = new ProcessTask<string>();
            ProcessTask.Init();
            ProcessTask.TimeInterval = 1000;
            ProcessTask.Parent = this;
            ProcessTask.IsEveryItemPushProcessing = true;

// ItemS Processing
         ProcessTask.ItemsProcessingAction = QuoteStringsProcessing;
        }

        public void Start()
        {
            if(IsProcessTaskInUse)
                ProcessTask?.Start();
        }
        public void Stop()
        {
            if (IsProcessTaskInUse)
                ProcessTask?.Stop();
        }

public void QuoteStringsProcessing(IEnumerable<string> quotestrings)
        {
            try
            {
                foreach (var s in quotestrings)
...

EventLogs:

// Setup in .xml file
        public bool IsProcessTaskInUse { get; set; }
        private void SetupProcessTask()
        {
            ProcessTask = new ProcessTask<IEventLogItem>();
            ProcessTask.Init(this);
            ProcessTask.Parent = this;
            ProcessTask.TimeInterval = 1000;
            ProcessTask.IsEveryItemPushProcessing = false;
            ProcessTask.ItemProcessingAction = evli =>
            {
                try
                {
                    AddItem(evli);
                }
                catch (Exception e)
                {
                    SendException(e);
                    //Evlm2(EvlResult.FATAL, EvlSubject.PROGRAMMING,
                    //    GetType().Name, "ProcessTask", "Exception", e.Message);
                }
            };
        }
        [XmlIgnore]
        public GS.ProcessTasks.ProcessTask<IEventLogItem> ProcessTask { get; private set; }
        public void Start()
        {
            if(IsProcessTaskInUse)
                ProcessTask?.Start();
        }
        public void Stop()
        {
            if (IsProcessTaskInUse)
                ProcessTask?.Stop();
        }

public void Push(IEventLogItem queueItem)
        {
            if (IsProcessTaskInUse)
                ProcessTask.EnQueue(queueItem);
            else
                EvlQueue.Push(queueItem);
        }

EventHub:

 public bool IsProcessTaskInUse { get; set; }
        private void SetupProcessTask()
        {
            ProcessTask = new ProcessTask<IEventArgs>();
            ProcessTask.Init();
            ProcessTask.TimeInterval = 1000;
            ProcessTask.Parent = this;
            ProcessTask.IsEveryItemPushProcessing = true;
            ProcessTask.ItemProcessingAction = FireEventOperation;
        }
        [XmlIgnore]
        public GS.ProcessTasks.ProcessTask<IEventArgs> ProcessTask { get; private set; }
        public void Start()
        {
            if(IsProcessTaskInUse)
                ProcessTask?.Start();
        }
        public void Stop()
        {
            if (IsProcessTaskInUse)
                ProcessTask?.Stop();
        }
...

 protected void FireEventOperation(Events.IEventArgs args)
        {
            try
            {
                var key = args.Key;
                var evhubitem = GetByKey(key);
                if (evhubitem != null)
                    evhubitem.FireEvent(args.Sender, args);
...

public void FireEvent(object sender, Events.IEventArgs eventArgs)
        {
            EventHandler?.Invoke(sender, eventArgs);
...

Комментариев нет:

Отправить комментарий