Ejemplo n.º 1
0
        /// <summary>
        /// 线程函数
        /// </summary>
        private static void ThreadProc()
        {
            DateTime lastmessage = DateTime.Now;


            //status.WebLogInfo = new List<WebUserInfo>();

            while (true)
            {
                if ((lastmessage.Second != DateTime.Now.Second) && (DateTime.Now.Second % 2 == 0))
                {
                    lastmessage = DateTime.Now;

                    //此处需要把信息发出去
                    SystemStatusClass message = new SystemStatusClass();
                    DateTime          current = DateTime.Now;

                    message.MarketDelay     = messageData.MarketDelay;
                    message.MarketFrequence = messageData.MarketFrequence;

                    message.StrategyNum         = messageData.StrategyNum;
                    message.StrategyInformation = new List <StrategyInfo>();

                    if (messageData.StrategyInfomation == null)
                    {
                        messageData.StrategyInfomation = new Dictionary <string, StrategyInfo>();
                    }

                    foreach (KeyValuePair <String, StrategyInfo> info in messageData.StrategyInfomation)
                    {
                        message.StrategyInformation.Add(info.Value);
                    }


                    message.StrategyWorkerSystemStatus    = new Dictionary <string, int>();
                    message.FutureTradeWorkerSystemStatus = new List <bool>(CONFIG.FUTURE_TRADE_THREAD_NUM);
                    message.StockTradeWorkerSystemStatus  = new List <bool>(CONFIG.STOCK_TRADE_THREAD_NUM);

                    for (int i = 0; i < CONFIG.FUTURE_TRADE_THREAD_NUM; i++)
                    {
                        message.FutureTradeWorkerSystemStatus.Add(false);
                    }

                    for (int i = 0; i < CONFIG.STOCK_TRADE_THREAD_NUM; i++)
                    {
                        message.StockTradeWorkerSystemStatus.Add(false);
                    }

                    if ((current - messageData.MarketSystemStatus).TotalSeconds > 5)
                    {
                        message.MarketSystemStatus = false;
                    }
                    else
                    {
                        message.MarketSystemStatus = true;
                    }
                    if ((current - messageData.MarketSystemStatus2).TotalSeconds > 5)
                    {
                        message.MarketSystemStatus2 = false;
                    }
                    else
                    {
                        message.MarketSystemStatus2 = true;
                    }
                    if ((current - messageData.MarketSystemStatus3).TotalSeconds > 5)
                    {
                        message.MarketSystemStatus3 = false;
                    }
                    else
                    {
                        message.MarketSystemStatus3 = true;
                    }
                    if ((current - messageData.HeartBeatSystemStatus).TotalSeconds > 5)
                    {
                        message.HeartBeatSystemStatus = false;
                    }
                    else
                    {
                        message.HeartBeatSystemStatus = true;
                    }
                    if ((current - messageData.StrategyManagementSystemStatus).TotalSeconds > 5)
                    {
                        message.StrategyManagementSystemStatus = false;
                    }
                    else
                    {
                        message.StrategyManagementSystemStatus = true;
                    }

                    foreach (KeyValuePair <string, DateTime> value in messageData.StrategyWorkerSystemStatus)
                    {
                        if ((current - value.Value).TotalSeconds > 5)
                        {
                            message.StrategyWorkerSystemStatus.Add(value.Key.Substring(0, value.Key.Length - 1), 0);
                        }
                        else
                        {
                            message.StrategyWorkerSystemStatus.Add(value.Key.Substring(0, value.Key.Length - 1), Convert.ToInt16(value.Key.Substring(value.Key.Length - 1, 1)));
                        }
                    }

                    if ((current - messageData.Pre_TradeControlSystemStatus).TotalSeconds > 5)
                    {
                        message.Pre_TradeControlSystemStatus = false;
                    }
                    else
                    {
                        message.Pre_TradeControlSystemStatus = true;
                    }

                    if ((current - messageData.FutureTradeManagementSystemStatus).TotalSeconds > 5)
                    {
                        message.FutureTradeManagementSystemStatus = false;
                    }
                    else
                    {
                        message.FutureTradeManagementSystemStatus = true;
                    }

                    int count = 0;
                    foreach (DateTime time in messageData.FutureTradeWorkerSystemStatus)
                    {
                        if ((current - messageData.FutureTradeWorkerSystemStatus[count]).TotalSeconds > 5)
                        {
                            message.FutureTradeWorkerSystemStatus[count] = false;
                        }
                        else
                        {
                            message.FutureTradeWorkerSystemStatus[count] = true;
                        }
                        count++;
                    }


                    if ((current - messageData.StockTradeManagementSystemStatus).TotalSeconds > 5)
                    {
                        message.StockTradeManagementSystemStatus = false;
                    }
                    else
                    {
                        message.StockTradeManagementSystemStatus = true;
                    }

                    count = 0;
                    foreach (DateTime time in messageData.StockTradeWorkerSystemStatus)
                    {
                        if ((current - messageData.StockTradeWorkerSystemStatus[count]).TotalSeconds > 5)
                        {
                            message.StockTradeWorkerSystemStatus[count] = false;
                        }
                        else
                        {
                            message.StockTradeWorkerSystemStatus[count] = true;
                        }
                        count++;
                    }


                    if ((current - messageData.StockEntrustManagementSystemStatus).TotalSeconds > 5)
                    {
                        message.StockEntrustManagementSystemStatus = false;
                    }
                    else
                    {
                        message.StockEntrustManagementSystemStatus = true;
                    }

                    if ((current - messageData.RefundControlSystemStatus).TotalSeconds > 5)
                    {
                        message.RefundControlSystemStatus = false;
                    }
                    else
                    {
                        message.RefundControlSystemStatus = true;
                    }

                    if ((current - messageData.RefundFutureSystemStatus).TotalSeconds > 5)
                    {
                        message.RefundFutureSystemStatus = false;
                    }
                    else
                    {
                        message.RefundFutureSystemStatus = true;
                    }

                    if ((current - messageData.RefundStockSystemStatus).TotalSeconds > 5)
                    {
                        message.RefundStockSystemStatus = false;
                    }
                    else
                    {
                        message.RefundStockSystemStatus = true;
                    }

                    if ((current - messageData.BatchTradeMarketInfoSystem).TotalSeconds > 5)
                    {
                        message.BatchTradeMarketInfoPump = false;
                    }
                    else
                    {
                        message.BatchTradeMarketInfoPump = true;
                    }

                    if ((current - messageData.AuthorizedStrategyASystem).TotalSeconds > 5)
                    {
                        message.AuthorizedStrategyAStatus = false;
                    }
                    else
                    {
                        message.AuthorizedStrategyAStatus = true;
                    }

                    if ((current - messageData.AuthorizedStrategyBSystem).TotalSeconds > 5)
                    {
                        message.AuthorizedStrategyBStatus = false;
                    }
                    else
                    {
                        message.AuthorizedStrategyBStatus = true;
                    }


                    MonitorSys.Instance.updateSysStatus(message);
                }


                if (queue_system_status.GetQueueNumber() == 0)
                {
                    Thread.Sleep(10);
                    continue;
                }


                object obj = null;
                try
                {
                    obj =
                        queue_system_status.GetQueue().Dequeue();
                }
                catch { }

                if (obj == null)
                {
                    continue;
                }

                KeyValuePair <string, object> news = (KeyValuePair <string, object>)obj;

                switch (news.Key)
                {
                case "USER":
                    arrive_userinfo(news.Value);
                    break;

                case "MARKET_F":
                    arrive_market_frequence(news.Value);
                    break;

                case "MARKET_D":
                    arrive_market_delay(news.Value);
                    break;

                case "MARKET_STOCK_STOP":
                    arrive_market_stock_stop(news.Value);
                    break;

                case "STRATEGY_N":
                    arrive_strategy_num(news.Value);
                    break;

                case "STRATEGY_P":
                    arrive_strategy_info(news.Value);
                    break;

                case "THREAD_MARKET":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_MARKET_2":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_MARKET_3":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_HEARTBEAT":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_STRATEGY_MANAGEMENT":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_STRATEGY_WORKER":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_PRE_TRADE":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_FUTURE_TRADE_MONITOR":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_FUTURE_TRADE_WORKER":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_STOCK_TRADE_MONITOR":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_STOCK_TRADE_WORKER":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_ENTRUST_WORKER":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_Refund_Control_MONITOR":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_Future_Refund_Control_MONITOR":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "THREAD_Stock_Refund_Control_MONITOR":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "BatchTrade_MarketReciver":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "AuthorizedStrategy_ThreadA":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                case "AuthorizedStrategy_ThreadB":
                    arrive_thread_status(news.Key, news.Value);
                    break;

                default:
                    break;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 线程函数
        /// </summary>
        private static void ThreadProc()
        {
            DateTime lastmessage = DateTime.Now;

            
            //status.WebLogInfo = new List<WebUserInfo>();

            while (true)
            {
                if ((lastmessage.Second != DateTime.Now.Second) && (DateTime.Now.Second % 2 == 0))
                {
                    lastmessage = DateTime.Now;

                    //此处需要把信息发出去
                    SystemStatusClass message = new SystemStatusClass();
                    DateTime current = DateTime.Now;

                    message.MarketDelay = messageData.MarketDelay;
                    message.MarketFrequence = messageData.MarketFrequence;

                    message.StrategyNum = messageData.StrategyNum;
                    message.StrategyInformation = new List<StrategyInfo>();

                    foreach(KeyValuePair<String,StrategyInfo> info in messageData.StrategyInfomation)
                    {
                        message.StrategyInformation.Add(info.Value);
                    }
                    

                    message.StrategyWorkerSystemStatus = new Dictionary<string, int>();
                    message.FutureTradeWorkerSystemStatus = new List<bool>(CONFIG.FUTURE_TRADE_THREAD_NUM);
                    message.StockTradeWorkerSystemStatus = new List<bool>(CONFIG.STOCK_TRADE_THREAD_NUM);

                    for (int i = 0; i < CONFIG.FUTURE_TRADE_THREAD_NUM; i++)
                    {
                        message.FutureTradeWorkerSystemStatus.Add(false);
                    }

                    for (int i = 0; i < CONFIG.STOCK_TRADE_THREAD_NUM; i++)
                    {
                        message.StockTradeWorkerSystemStatus.Add(false);
                    }

                    if ((current - messageData.MarketSystemStatus).TotalSeconds > 5) { message.MarketSystemStatus = false; } else { message.MarketSystemStatus = true; }
                    if ((current - messageData.HeartBeatSystemStatus).TotalSeconds > 5) { message.HeartBeatSystemStatus = false; } else { message.HeartBeatSystemStatus = true; }
                    if ((current - messageData.StrategyManagementSystemStatus).TotalSeconds > 5) { message.StrategyManagementSystemStatus = false; } else { message.StrategyManagementSystemStatus = true; }
                    
                    foreach(KeyValuePair<string,DateTime> value in messageData.StrategyWorkerSystemStatus)
                    {
                        if ((current - value.Value).TotalSeconds > 5) { message.StrategyWorkerSystemStatus.Add(value.Key.Substring(0, value.Key.Length - 1), 0); } else { message.StrategyWorkerSystemStatus.Add(value.Key.Substring(0, value.Key.Length - 1), Convert.ToInt16(value.Key.Substring(value.Key.Length - 1, 1))); }
                    }

                    if ((current - messageData.Pre_TradeControlSystemStatus).TotalSeconds > 5) { message.Pre_TradeControlSystemStatus = false; } else { message.Pre_TradeControlSystemStatus = true; }

                    if ((current - messageData.FutureTradeManagementSystemStatus).TotalSeconds > 5) { message.FutureTradeManagementSystemStatus = false; } else { message.FutureTradeManagementSystemStatus = true; }

                    int count = 0;
                    foreach(DateTime time in messageData.FutureTradeWorkerSystemStatus)
                    {
                        if ((current - messageData.FutureTradeWorkerSystemStatus[count]).TotalSeconds > 5) { message.FutureTradeWorkerSystemStatus[count] = false; } else { message.FutureTradeWorkerSystemStatus[count] = true; }
                        count++;
                    }


                    if ((current - messageData.StockTradeManagementSystemStatus).TotalSeconds > 5) { message.StockTradeManagementSystemStatus = false; } else { message.StockTradeManagementSystemStatus = true; }

                    count = 0;
                    foreach (DateTime time in messageData.StockTradeWorkerSystemStatus)
                    {
                        if ((current - messageData.StockTradeWorkerSystemStatus[count]).TotalSeconds > 5) { message.StockTradeWorkerSystemStatus[count] = false; } else { message.StockTradeWorkerSystemStatus[count] = true; }
                        count++;
                    }


                    if ((current - messageData.StockEntrustManagementSystemStatus).TotalSeconds > 5) { message.StockEntrustManagementSystemStatus = false; } else { message.StockEntrustManagementSystemStatus = true; }

                    MonitorSys.Instance.updateSysStatus(message);
                }
                

                if (queue_system_status.GetQueueNumber() == 0)
                {
                    Thread.Sleep(10);
                    continue;
                }


                object obj = queue_system_status.GetQueue().Dequeue();

                if (obj == null) continue;

                KeyValuePair<string, object> news = (KeyValuePair<string, object>)obj;

                switch (news.Key)
                {
                    case "USER":
                        arrive_userinfo(news.Value);
                        break;
                    case "MARKET_F":
                        arrive_market_frequence(news.Value);
                        break;
                    case "MARKET_D":
                        arrive_market_delay(news.Value);
                        break;
                    case "MARKET_STOCK_STOP":
                        arrive_market_stock_stop(news.Value);
                        break;
                    case "STRATEGY_N":
                        arrive_strategy_num(news.Value);
                        break;
                    case "STRATEGY_P":
                        arrive_strategy_info(news.Value);
                        break;
                    case "THREAD_MARKET":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_HEARTBEAT":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_STRATEGY_MANAGEMENT":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_STRATEGY_WORKER":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_PRE_TRADE":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_FUTURE_TRADE_MONITOR":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_FUTURE_TRADE_WORKER":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_STOCK_TRADE_MONITOR":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_STOCK_TRADE_WORKER":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    case "THREAD_ENTRUST_WORKER":
                        arrive_thread_status(news.Key, news.Value);
                        break;
                    default:
                        break;

                }


                

            }
        }