using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ThomsonReuters.Desktop.SDK.DataAccess; using ThomsonReuters.Desktop.SDK.DataAccess.Common; using ThomsonReuters.Desktop.SDK.DataAccess.Realtime; namespace reuters_stream { class Program { private static IRealtimeSingleDataRequest _singleRequest; private static IRealtimeSingleDataSubscription _singleSubscription; private static IDataServices _services = null; static void Main(string[] args) { Initialize(); var realtime = _services.Realtime; try { _singleRequest = realtime.Request("GBP=", "BID", DataReceived); _singleSubscription = realtime.Subscribe("EUR=", "BID", DataReceived); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("Press any key to exit"); Console.Read(); } private static void Initialize() { _services = DataServices.Instance; _services.StateChanged += services_StateChanged; _services.Initialize("Test-Eikon-Realtime"); } private static void services_StateChanged(object sender, DataServicesStateChangedEventArgs e) { switch (e.State) { case DataServicesState.None: break; case DataServicesState.Error: break; case DataServicesState.Up: break; case DataServicesState.Down: break; case DataServicesState.LocalMode: break; case DataServicesState.EikonClosing: break; case DataServicesState.EikonStarting: break; default: throw new ArgumentOutOfRangeException(); } } private static void DataReceived(SingleFieldValue value) { Console.WriteLine("{0}, {1}, {2}, {3}", value.Ric, value.Status, value.Field, value.RawValue); } private static void onDataError(SingleDataSubscriptionError error) { Console.WriteLine(error.ToString()); } private static void Instance_StateChanged(object sender, DataServicesStateChangedEventArgs e) { Console.WriteLine(e.ToString()); } } }