private void btnStart_Click(object sender, EventArgs e) { ChinaMarketValue.isStartMarket = true; if (ChinaMarketValue.threadMarket == null) { ChinaMarketValue.threadMarket = new Thread(UpdateMarkets); ChinaMarketValue.threadMarket.IsBackground = true; ChinaMarketValue.threadMarket.Start(); } if (openSettins == null) { openSettins = new TDFOpenSetting() { Ip = System.Configuration.ConfigurationManager.AppSettings["IP"], //服务器Ip Port = System.Configuration.ConfigurationManager.AppSettings["Port"], //服务器端口 Username = System.Configuration.ConfigurationManager.AppSettings["Username"], //服务器用户名 Password = System.Configuration.ConfigurationManager.AppSettings["Password"], //服务器密码 Subscriptions = System.Configuration.ConfigurationManager.AppSettings["SubScriptions"], //订阅列表,以 ; 分割的代码列表,例如:if1406.cf;if1403.cf;如果置为空,则全市场订阅 Markets = System.Configuration.ConfigurationManager.AppSettings["Markets"], //市场列表,以 ; 分割,例如: sh;sz;cf;shf;czc;dce ReconnectCount = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectCount"]), //当连接断开时重连次数,断开重连在TDFDataSource.Connect成功之后才有效 ReconnectGap = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectGap"]), //重连间隔秒数 ConnectionID = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ConnectionID"]), //连接ID,标识某个Open调用,跟回调消息中TDFMSG结构nConnectionID字段相同 Date = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["Date"]), //请求的日期,格式YYMMDD,为0则请求今天 Time = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["Time"]), //请求的时间,格式HHMMSS,为0则请求实时行情,为(uint)-1从头请求 TypeFlags = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["TypeFlags"]) //unchecked((uint)DataTypeFlag.DATA_TYPE_ALL); //为0请求所有品种,或者取值为DataTypeFlag中多种类别,比如DATA_TYPE_MARKET | DATA_TYPE_TRANSACTION }; } if (dataSource == null) { dataSource = new TDFSourceImp(openSettins); dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OUT_LOG, 1); TDFERRNO nOpenRet = dataSource.Open(); if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS) { PrintHelper.PrintText("connect success!\n"); } else { //这里判断错误代码,进行对应的操作,对于 TDF_ERR_NETWORK_ERROR,用户可以选择重连 PrintHelper.PrintText(string.Format("open returned:{0}, program quit", nOpenRet)); } } btnStart.Enabled = false; btnClose.Enabled = true; }
static void Main(string[] args) { var openSettins = new TDFOpenSetting() { Ip = System.Configuration.ConfigurationManager.AppSettings["IP"], //服务器Ip Port = System.Configuration.ConfigurationManager.AppSettings["Port"], //服务器端口 Username = System.Configuration.ConfigurationManager.AppSettings["Username"], //服务器用户名 Password = System.Configuration.ConfigurationManager.AppSettings["Password"], //服务器密码 Subscriptions = System.Configuration.ConfigurationManager.AppSettings["SubScriptions"], //订阅列表,以 ; 分割的代码列表,例如:if1406.cf;if1403.cf;如果置为空,则全市场订阅 Markets = System.Configuration.ConfigurationManager.AppSettings["Markets"], //市场列表,以 ; 分割,例如: sh;sz;cf;shf;czc;dce ReconnectCount = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectCount"]), //当连接断开时重连次数,断开重连在TDFDataSource.Connect成功之后才有效 ReconnectGap = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ReconnectGap"]), //重连间隔秒数 ConnectionID = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["ConnectionID"]), //连接ID,标识某个Open调用,跟回调消息中TDFMSG结构nConnectionID字段相同 Date = uint.Parse(System.Configuration.ConfigurationManager.AppSettings["Date"]), //请求的日期,格式YYMMDD,为0则请求今天 Time = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["Time"]), //请求的时间,格式HHMMSS,为0则请求实时行情,为(uint)-1从头请求 TypeFlags = (uint)int.Parse(System.Configuration.ConfigurationManager.AppSettings["TypeFlags"]) //unchecked((uint)DataTypeFlag.DATA_TYPE_ALL); //为0请求所有品种,或者取值为DataTypeFlag中多种类别,比如DATA_TYPE_MARKET | DATA_TYPE_TRANSACTION }; // 使用者请注意: // 1. 请保持TDFSourceImp的实例到进程销毁。TDFSourceImp是数据接收者 // 2. 本Demo只是做最简单演示,在进程(main函数)结束的时候销毁TDFSourceImp实例 using (var dataSource = new TDFSourceImp(openSettins)) { #region 调用Open,登陆服务器。初始化过程到此结束,对数据的操作,请到TDFSourceImp的两个虚函数里进行 TDFERRNO nOpenRet = dataSource.Open(); if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS) { Console.WriteLine("connect success!\n"); } else { //这里判断错误代码,进行对应的操作,对于 TDF_ERR_NETWORK_ERROR,用户可以选择重连 Console.WriteLine("open returned:{0}, program quit", nOpenRet); Console.ReadLine(); return; } #endregion #region 以下代码是演示订阅功能 //主线程阻塞在这里,等待回调消息通知(其他消息) String strHelp = @"键入q退出 以下命令,请用逗号分隔 a 添加订阅 d 删除订阅 f 清除订阅 s 设置订阅 hs 显示完全数据 hh 显示股票名称"; Console.WriteLine(strHelp); var input = Console.ReadLine(); while (input != "q") { var inArgs = input.Split(','); if (inArgs.Length > 1) { ToString convert = (String[] ary) => { System.Text.StringBuilder sb = new StringBuilder(); for (int i = 1; i < ary.Length; ++i) { sb.AppendFormat("{0};", ary[i]); } return(sb.ToString()); }; switch (inArgs[0]) { case "a": dataSource.SetSubscription(convert(inArgs), SubscriptionType.SUBSCRIPTION_ADD); break; case "d": dataSource.SetSubscription(convert(inArgs), SubscriptionType.SUBSCRIPTION_DEL); break; case "s": dataSource.SetSubscription(convert(inArgs), SubscriptionType.SUBSCRIPTION_SET); break; case "f": dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_FULL); break; case "hs": dataSource.ShowAllData = true; break; case "hh": dataSource.ShowAllData = false; break; } } else if (inArgs.Length == 1) { switch (inArgs[0]) { case "f": dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_FULL); break; case "hs": dataSource.ShowAllData = true; break; case "hh": dataSource.ShowAllData = false; break; } } Console.WriteLine(strHelp); input = Console.ReadLine(); } #endregion //演示订阅功能 } }
public void LoadFromTDF() { nOpenRet = this.Open(); //nOpenRet = TDFERRNO.TDF_ERR_UNKOWN; //WriteLog(this, null); }
private bool InitDataSource() { var setting = GetSetting(); _dataSource = new TDFImp(setting); _dataSource.SysMsgDeal = OnRecvSysMsg; _dataSource.DataMsgDeal = OnRecvDataMsg; _dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OUT_LOG, 1); //TODO:订阅多支股票和股指期货 //增加订阅列表中的股票 //dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_ADD); //删除订阅列表中的订阅 //dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_DEL); //设置为订阅列表中的股票 //dataSource.SetSubscription("", SubscriptionType.SUBSCRIPTION_SET); TDFERRNO openRet = _dataSource.Open(); if (openRet != TDFERRNO.TDF_ERR_SUCCESS) { var msg = string.Format("宏汇行情初始化失败:{0}", openRet.ToString()); logger.Error(msg); if (_connectCallback != null) { _connectCallback(ServiceType.TDFQuote, (int)openRet, msg); } if (_notify != null) { NotifyArgs args = new NotifyArgs { ServiceType = ServiceInterface.ServiceType.TDFQuote, Code = (int)openRet, Message = msg, }; _notify(args); } Close(); return(false); } else { var msg = "宏汇行情初始化成功!"; logger.Info(msg); if (_connectCallback != null) { _connectCallback(ServiceType.TDFQuote, (int)openRet, msg); } //_waitHandle.WaitOne(); //Close(); return(true); } }
//delegate String ToString(String[] args); /// <summary> /// 行情订阅主线程 /// </summary> static void MainThread() { TDFServerInfo[] theServers = new TDFServerInfo[4]; uint iServerNum = 1; theServers[0] = new TDFServerInfo() { //Ip = CHangQingPARA.IP, //Port = CHangQingPARA.PORT, //Username = CHangQingPARA.USERNAME, //Password = CHangQingPARA.PASSWORD //Ip = "114.80.154.34", //Port = "6231", //服务器端口 //Username = "******", //服务器用户名 //Password = "******" Ip = ip, Port = port, Username = userName, Password = password }; /******即使不用,也要初始化******/ theServers[1] = new TDFServerInfo(); theServers[2] = new TDFServerInfo(); theServers[3] = new TDFServerInfo(); //初始化行情模拟系统 simulate_trade.InitSimTable(simulate_trade.SimMarketCode); /************订阅的类型需要再确认***********/ var openSetting_ext = new TDFOpenSetting_EXT() { Servers = theServers, ServerNum = iServerNum, Markets = "", Subscriptions = subscribeList.Replace('\n', ';'), ConnectionID = 1, Time = 0, TypeFlags = 0 }; using (var dataSource = new TDFSourceImp(openSetting_ext)) { dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_HEART_BEAT_INTERVAL, 0); //环境设置 dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_MISSED_BEART_COUNT, 0); //环境设置 dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OPEN_TIME_OUT, 0); //环境设置 TDFERRNO nOpenRet = dataSource.Open(); if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS) { //连接成功 Queue_Data.Connected = true; } else { Queue_Data.Connected = false; MessageBox.Show(nOpenRet.ToString()); //连接失败,告警顶级日志 //GlobalErrorLog.LogInstance.LogEvent(String.Format("open returned:{0}, program quit", nOpenRet)); } while (true) { if (webservice.STOP) { break; } Thread.Sleep(1000); //每隔10s发送一次停盘信息 if ((DateTime.Now - RunningTime.CurrentTime).TotalSeconds > 10) { foreach (TDFMarketData data in stop_plate_stocks.GetInstance().GetStopList()) { EnQueueType obj = new EnQueueType() { Type = "S", value = (object)data }; if (simulate_trade.MarketRecorder) { MarketInfoQueue.EnQueueNew(data); } else { Queue_Data.GetQueue().Enqueue((object)obj); } } RunningTime.CurrentTime = DateTime.Now; } if ((simulate_trade.SimSwitch) && (Queue_Data.Suspend == false)) { for (int i = 0; i < simulate_trade.SimMarketPerSecond; i++) { TDFMarketData objs = simulate_trade.GetSimMarketDate(); new EnQueueType() { Type = "S", value = (object)objs }; if (Queue_Data.Suspend == false) { Queue_Data.GetQueue().Enqueue((object)(new EnQueueType() { Type = "S", value = (object)objs })); } TDFFutureData objf = simulate_trade.GetSimFutureData(); Queue_Data.GetQueue().Enqueue((object)(new EnQueueType() { Type = "F", value = (object)objf })); } } continue; } } }
public int Start() { if (_isRunning == true) { App.Logger.Info("TDF数据服务:已启动!"); return(1); } try { TDFServerInfo[] theServers = new TDFServerInfo[4]; theServers[0] = new TDFServerInfo() { Ip = _config.Ip, //服务器Ip Port = _config.Port.ToString(), //服务器端口 Username = _config.Username, //服务器用户名 Password = _config.Password, //服务器密码 }; //theServers[0].Username = "******"; //theServers[0].Password = "******"; //Setting.IsHistory = true; theServers[1] = new TDFServerInfo(); if (_config.Ip == "114.80.154.34") { bool isSpec = false; if (_config.Port == 6221) { isSpec = true; theServers[1].Port = "6231"; } else if (_config.Port == 6231) { isSpec = true; theServers[1].Port = "6221"; } if (isSpec) { theServers[1].Ip = _config.Ip; theServers[1].Username = _config.Username; theServers[1].Password = _config.Password; } } theServers[2] = new TDFServerInfo(); theServers[3] = new TDFServerInfo(); TDFOpenSetting_EXT openSetting = new TDFOpenSetting_EXT() { Servers = theServers, ServerNum = 1, Subscriptions = "600000.sh;000001.sz", //订阅列表,以 ; 分割的代码列表,例如:if1406.cf;if1403.cf;如果置为空,则全市场订阅 Markets = "sh-2;sz-2;", //市场列表,以 ; 分割,例如: sh;sz;cf;shf;czc;dce ConnectionID = 1, //连接ID,标识某个Open调用,跟回调消息中TDFMSG结构nConnectionID字段相同 Time = Setting.IsHistory ? -1 : 0, //请求的时间,格式HHMMSS,为0则请求实时行情,为(uint)-1从头请求 TypeFlags = unchecked ((uint)(DataTypeFlag.DATA_TYPE_ORDER | DataTypeFlag.DATA_TYPE_TRANSACTION | DataTypeFlag.DATA_TYPE_ORDERQUEUE)) //为0请求所有品种,或者取值为DataTypeFlag中多种类别,比如DATA_TYPE_MARKET | DATA_TYPE_TRANSACTION }; if (IsAllCodes) { openSetting.Subscriptions = string.Empty; openSetting.Markets = "SH-2;SZ-2"; } _source = new TDFSourceImp(openSetting); _source.NewSysEvent += _source_NewSysEvent; TDFERRNO nOpenRet = _source.Open(); if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS) { App.Logger.Info("TDF数据服务:登陆成功!"); _isRunning = true; if (_subCodes.Count > 0) { //重新注册 StringBuilder s = new StringBuilder(); foreach (string wind in _subCodes) { s.Append(wind); s.Append(";"); } string substring = s.ToString().TrimEnd(new char[] { ';' }); _source.SetSubscription(substring, SubscriptionType.SUBSCRIPTION_ADD); } } else { App.Logger.Error(string.Format("TDF数据服务:连接失败,错误代码{0}", nOpenRet)); return(2); } } catch (Exception ex) { App.Logger.Error(ex); App.Logger.Error("TDF数据服务:初始化错误!" + ex.Message); return(100); } return(0); }