/// <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; } } }
/// <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; } } }