public void SubscribeToNewsHeadlineStream() { string searchKeywords = SearchTextBox.Text; App.ctx.BeginLogIn(App.USERNAME, App.PASSWORD, a => { App.ctx.EndLogIn(a); //Next we create a connection to the streaming api, using the authenticated session streamingClient = App.StreamingClient; streamingClient.Connect(); //And instantiate a listener for news headlines on the appropriate topic //You can have multiple listeners on one connection newsListener = streamingClient.BuildNewsHeadlinesListener(searchKeywords); newsListener.Start(); //The MessageRecieved event will be triggered every time a new News headline is available, //so attach a handler for that event, and wait until something comes through NewsDTO recievedNewsHeadline = null; newsListener.MessageReceived += (s, e) => { recievedNewsHeadline = e.Data; //Add this new news headline to the main items collection. ItemViewModel item = new ItemViewModel(); item.Headline = recievedNewsHeadline.Headline; item.PublishDate = recievedNewsHeadline.PublishDate.ToString(); recievedNewsHeadline.StoryId = recievedNewsHeadline.StoryId; App.ViewModel.LoadData(item); }; }, null); }
public QuoteEventHandler(IStreamingListener <QuoteDTO> listener) { Listener = listener; listener.MessageReceived += OnMessageReceived; Queue = new ConcurrentQueue <string>(); }
/// <summary> /// /// </summary> /// <param name="accountOperatorId"></param> /// <returns></returns> public IStreamingListener <PriceDTO> BuildDefaultPricesListener(int accountOperatorId) { IStreamingListener <PriceDTO> listener = BuildListener <PriceDTO>("CITYINDEXSTREAMINGDEFAULTPRICES", "PRICES.AC" + accountOperatorId); ((TestStreamingListener <PriceDTO>)listener).CreateMessage += _testStreamingClientFactory.OnCreatePriceMessage; return(listener); }
private void BuildListener_STREAMINGCLIENTACCOUNT_DataAdapterSet() { LogToScreen("building listener on CITYINDEXCLIENTACCOUNT data adapter"); _clientAccountMarginsListener = StreamingClient.BuildClientAccountMarginListener(); _clientAccountMarginsListener.MessageReceived += ClientAccountMarginsListenerMessageReceived; Dispatcher.BeginInvoke(() => statusUpdatesListBox.Items.Add("listener on CITYINDEXCLIENTACCOUNT built")); }
private void BuildListener_CITYINDEXSTREAMINGDEFAULTPRICES_DataAdapterSet() { LogToScreen("building listener on CITYINDEXSTREAMINGDEFAULTPRICES data adapter"); _defaultPriceListener = StreamingClient.BuildDefaultPricesListener(ACCOUNTOPERATORID); _defaultPriceListener.MessageReceived += _defaultPricesListener_MessageReceived; LogToScreen("listener on CITYINDEXSTREAMING built"); }
public ClientAccountMarginEventHandler(IStreamingListener <ClientAccountMarginDTO> listener) { Listener = listener; listener.MessageReceived += OnMessageReceived; Queue = new ConcurrentQueue <string>(); }
private void BuildListener_CITYINDEXSTREAMING_DataAdapterSet() { LogToScreen("building listener on CITYINDEXSTREAMING data adapter"); _priceListener = StreamingClient.BuildPricesListener(PRICEMARKETIDS); _priceListener.MessageReceived += PriceListenerMessageReceived; LogToScreen("listener on CITYINDEXSTREAMING built"); }
private void BuildListener_STREAMINGTRADINGACCOUNT_DataAdapterSet() { LogToScreen("building listener on CITYINDEXTRADINGACCOUNT data adapter"); _quotesListener = StreamingClient.BuildQuotesListener(); _quotesListener.MessageReceived += _quotesListener_MessageReceived; Dispatcher.BeginInvoke(() => statusUpdatesListBox.Items.Add("listener on CITYINDEXTRADINGACCOUNT built")); }
protected override void Cleanup() { if (_listener != null && _streamingClient != null) { _streamingClient.TearDownListener(_listener); } if (_listener != null) { _listener.Stop(); _listener.Dispose(); _listener = null; } if (_streamingClient != null) { _streamingClient.Dispose(); _streamingClient = null; } if (_client != null) { if (!string.IsNullOrEmpty(_client.Session)) _client.LogOut(); _client.Dispose(); _client = null; } }
private PriceDTO GetMarketInfo(int marketId) { IStreamingListener <PriceDTO> listener = null; PriceDTO marketInfo = null; try { listener = _streamingClient.BuildPricesListener(marketId); var gate = new AutoResetEvent(false); listener.MessageReceived += (o, s) => { marketInfo = s.Data; gate.Set(); }; if (!gate.WaitOne(10000)) { throw new Exception("timed out waiting for market data"); } } finally { _streamingClient.TearDownListener(listener); } return(marketInfo); }
private void BuildClients() { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating rpc client")); RpcClient = new Client(RPC_URI, "CI-WP7"); RpcClient.BeginLogIn(USERNAME, PASSWORD, ar => { var session = RpcClient.EndLogIn(ar); ThreadPool.QueueUserWorkItem(_ => { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating listeners")); StreamingClient = StreamingClientFactory.CreateStreamingClient(STREAM_URI, USERNAME, session.Session); MarketPricesStream = StreamingClient.BuildPricesListener(new[] { MarketId }); MarketPricesStream.MessageReceived += OnMarketPricesStreamMessageReceived; OrdersStream = StreamingClient.BuildOrdersListener(); OrdersStream.MessageReceived += OnOrdersStreamMessageReceived; Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting account info")); RpcClient.AccountInformation.BeginGetClientAndTradingAccount(ar2 => { Account = RpcClient.AccountInformation.EndGetClientAndTradingAccount(ar2); Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting market info")); RpcClient.Market.BeginGetMarketInformation(MarketId.ToString(), ar3 => { Market = RpcClient.Market.EndGetMarketInformation(ar3).MarketInformation; Dispatcher.BeginInvoke(() => button1.IsEnabled = true); }, null); }, null); }); }, null); }
/// <summary> /// /// </summary> /// <returns></returns> public IStreamingListener <TradeMarginDTO> BuildTradeMarginListener() { IStreamingListener <TradeMarginDTO> listener = BuildListener <TradeMarginDTO>("STREAMINGCLIENTACCOUNT", "TRADEMARGIN.ALL"); ((TestStreamingListener <TradeMarginDTO>)listener).CreateMessage += _testStreamingClientFactory.OnCreateTradeMarginMessage; return(listener); }
/// <summary> /// /// </summary> /// <returns></returns> public IStreamingListener <OrderDTO> BuildOrdersListener() { string topic = "ORDERS"; IStreamingListener <OrderDTO> listener = BuildListener <OrderDTO>("STREAMINGCLIENTACCOUNT", topic); ((TestStreamingListener <OrderDTO>)listener).CreateMessage += _testStreamingClientFactory.OnCreateOrderMessage; return(listener); }
/// <summary> /// /// </summary> /// <returns></returns> public IStreamingListener <ClientAccountMarginDTO> BuildClientAccountMarginListener() { string topic = "CLIENTACCOUNTMARGIN"; IStreamingListener <ClientAccountMarginDTO> listener = BuildListener <ClientAccountMarginDTO>("STREAMINGCLIENTACCOUNT", topic); ((TestStreamingListener <ClientAccountMarginDTO>)listener).CreateMessage += _testStreamingClientFactory.OnCreateClientAccountMarginMessage; return(listener); }
/// <summary> /// /// </summary> /// <returns></returns> public IStreamingListener <QuoteDTO> BuildQuotesListener() { string topic = "QUOTES"; IStreamingListener <QuoteDTO> listener = BuildListener <QuoteDTO>("STREAMINGTRADINGACCOUNT", topic); ((TestStreamingListener <QuoteDTO>)listener).CreateMessage += _testStreamingClientFactory.OnCreateQuoteMessage; return(listener); }
/// <summary> /// /// </summary> /// <param name="marketIds"></param> /// <returns></returns> public IStreamingListener <PriceDTO> BuildPricesListener(int[] marketIds) { var topic = string.Join(" ", marketIds.Select(t => Regex.Replace("PRICES.PRICE.{marketIds}", "{marketIds}", t.ToString())).ToArray()); IStreamingListener <PriceDTO> listener = BuildListener <PriceDTO>("CITYINDEXSTREAMING", topic); ((TestStreamingListener <PriceDTO>)listener).CreateMessage += _testStreamingClientFactory.OnCreatePriceMessage; return(listener); }
public void SubscribeToMarketPrice(int marketId) { Log.Info("Subscribing to market price for market id: " + marketId + "."); IStreamingListener <PriceDTO> priceListener = _lsCityindexStreamingConnection.BuildPriceListener(PRICES_TOPIC + marketId); priceListener.MessageReceived += new EventHandler <MessageEventArgs <PriceDTO> >(OnPriceListener_MessageReceived); priceListener.Start(); _listeners.Add(priceListener); }
private void BeginCollectingMessages <T>(IStreamingListener <T> listener, ICollection <T> messages) where T : class { listener.MessageReceived += (s, e) => { messages.Add(e.Data); _logger.Info("++ Recieved message " + e.Data.ToStringWithValues()); }; listener.Start(); }
public void SubscribeToNewsHeadlinesByRegion(string region) { Log.Info("Subscribing to news headlines for region: " + region + "."); IStreamingListener <NewsDTO> newsListener = _lsCityindexStreamingConnection.BuildNewsHeadlinesListener(NEWS_ADAPTER + "HEADLINES." + region); newsListener.MessageReceived += new EventHandler <MessageEventArgs <NewsDTO> >(NewsListener_MessageReceived); newsListener.Start(); _listeners.Add(newsListener); }
public void SubscribeToMarketPriceList(List <int> marketIdList) { Log.Info("Subscribing to market prices."); var topics = marketIdList.Select(marketId => PRICES_TOPIC + marketId).ToList(); IStreamingListener <PriceDTO> priceListener = _lsCityindexStreamingConnection.BuildPriceListener(topics); priceListener.MessageReceived += new EventHandler <MessageEventArgs <PriceDTO> >(OnPriceListener_MessageReceived); priceListener.Start(); _listeners.Add(priceListener); }
private void RestartPriceListener(params int[] markets) { if (_pricesListener != null) { KillPriceListener(); } _pricesListener = StreamingClient.BuildPricesListener(markets); _pricesListener.MessageReceived += (PricesListenerMessageReceived); }
// only listening to one news topic at a time. right now options are US, UK and ALL. public void SetNewsTopic(string topic) { if (_newsListener != null) { _newsListener.MessageReceived -= NewsListenerMessageReceived; _newsListener.Stop(); _newsListener = null; } _newsListener = StreamingClient.BuildNewsHeadlinesListener(topic); _newsListener.MessageReceived += NewsListenerMessageReceived; }
private void button1_Click(object sender, EventArgs e) { if (_streamingClient != null) { try { _listener.Stop(); _streamingClient.Disconnect(); } catch { // swallow } _listener = null; _streamingClient = null; } if (_rpcClient != null) { try { _rpcClient.LogOut(); } catch { // swallow } _streamingClient = null; } var settingsForm = new Settings(); settingsForm.ShowDialog(); if (settingsForm.StreamingClient == null) { return; MessageBox.Show("Not connected"); } _streamingClient = settingsForm.StreamingClient; _listener = _streamingClient.BuildPricesListener(int.Parse(MarketIdTextBox.Text)); _listener.MessageReceived += new EventHandler<MessageEventArgs<PriceDTO>>(ListenerMessageReceived); _listener.Start(); _rpcClient = settingsForm.RpcClient; _logic = new TradingRobot.Logic.SimpleBuyLowSellHigh(_rpcClient); _logic.BidPrice = SellNUD.Value; _logic.OfferPrice = BuyNUD.Value; _logic.Quantity = QuantityNUD.Value; MessageBox.Show("Connected"); }
public void TearDownListener(IStreamingListener listener) { listener.Stop(); ((TestStreamingListener)listener).TearMeDown(); if (_adapters.ContainsKey(listener.Adapter)) { var adapter = _adapters[listener.Adapter]; adapter.Remove(listener.Topic); if (adapter.Count == 0) { _adapters.Remove(listener.Adapter); } } }
/// <summary> /// Allows consumer to stop and remove a listener from this client. /// </summary> public void TearDownListener(IStreamingListener listener) { if (_disposed) { throw new ObjectDisposedException(GetType().FullName); } lock (_currentListeners) { if (_currentListeners.ContainsValue(listener)) { _currentListeners.Remove(listener.Topic); } new Thread(listener.Stop).Start(); } }
/// <summary> /// /// </summary> /// <param name="category"></param> /// <returns></returns> public IStreamingListener <NewsDTO> BuildNewsHeadlinesListener(string category) { var topic = Regex.Replace("NEWS.HEADLINES.{category}", "{category}", category.ToString()); IStreamingListener <NewsDTO> listener = BuildListener <NewsDTO>("CITYINDEXSTREAMING", topic); // hook up the create message event to the factory and enclose the unhook for use later. // this way we don't have to have 6 different unhook methods (one for each dto) on the factory ((TestStreamingListener <NewsDTO>)listener).CreateMessage += _testStreamingClientFactory.OnCreateNewsMessage; ((TestStreamingListener)listener).TearMeDown = () => { ((TestStreamingListener <NewsDTO>)listener).CreateMessage -= _testStreamingClientFactory.OnCreateNewsMessage; }; return(listener); }
private void StartButtonClick(object sender, RoutedEventArgs e) { Dispatcher.BeginInvoke(() => { listBox2.Items.Add("Starting"); }); Dispatcher.BeginInvoke(() => { listBox1.Items.Clear(); listBox2.Items.Clear(); listBox3.Items.Clear(); StartButton.IsEnabled = false; StopButton.IsEnabled = false; _backgroundRpcStop = false; _backgroundRpc = new Thread(() => { while (_backgroundRpcStop == false) { new AutoResetEvent(false).WaitOne(100000); var marketInfo = rpcClient.Market.GetMarketInformation("400535967"); Dispatcher.BeginInvoke(() => listBox3.Items.Add(marketInfo.MarketInformation.MarketId)); } return; }); _backgroundRpc.Start(); new Thread(() => { Debug.WriteLine("building listener2"); _listener = _streamingClient.BuildPricesListener(400535967, 81136, 400509294, 400535971, 80902, 400509295, 400193864, 400525367, 80926, 400498641, 400193866, 91047, 400194551, 121766, 400172033, 139144); _listener.MessageReceived += ListenerMessageReceived; Debug.WriteLine("building listener"); _listener2 = _streamingClient.BuildDefaultPricesListener(2347); _listener2.MessageReceived += Listener2MessageReceived; Debug.WriteLine("listener started"); Debug.WriteLine("listener2 started"); Dispatcher.BeginInvoke(() => { StartButton.IsEnabled = false; StopButton.IsEnabled = true; }); }).Start(); }); }
public void SubscribeToNewsHeadlineStream() { if (!CIAPI_Global.IsConnected) { CIAPI_Global.ConnectCIAPI(); } newsListener = CIAPI_Global.StreamingClient.BuildNewsHeadlinesListener("NEWS.MOCKHEADLINES.UK"); newsListener.Start(); var gate = new ManualResetEvent(false); newsListener.MessageReceived += (s, e) => { newsReceived(e.Data.StoryId); gate.Set(); }; gate.WaitOne(); }
public void TearDownListener(IStreamingListener listener) { if (_disposed) { throw new ObjectDisposedException(GetType().FullName); } if (_adapters.ContainsKey(listener.Adapter)) { var adapter = _adapters[listener.Adapter]; adapter.TearDownListener(listener); if (adapter.ListenerCount == 0) { _adapters.Remove(listener.Adapter); adapter.Dispose(); } } }
public void Dispose() { if (_newsListener != null) { _newsListener.Stop(); _newsListener = null; } if (_streamingClient != null) { _streamingClient.Disconnect(); _streamingClient = null; } if (_client != null) { _client.BeginLogOut(ar => _client.EndLogOut(ar), null); _client = null; } }
private void BuildClients() { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating rpc client")); RpcClient = new Client(RPC_URI, STREAM_URI, "CI-WP7"); RpcClient.BeginLogIn(USERNAME, PASSWORD, ar => { var session = RpcClient.EndLogIn(ar); ThreadPool.QueueUserWorkItem(_ => { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating listeners")); StreamingClient = RpcClient.CreateStreamingClient(); MarketPricesStream = StreamingClient.BuildDefaultPricesListener(AccountOperatorId); MarketPricesStream.MessageReceived += OnMarketPricesStreamMessageReceived; Dispatcher.BeginInvoke(() => button1.IsEnabled = true); }); }, null); }
public void SubscribeToPrice(object marketId) { if (!CIAPI_Global.IsConnected) { CIAPI_Global.ConnectCIAPI(); } priceListner = CIAPI_Global.StreamingClient.BuildPriceListener("PRICES.PRICE." + marketId);//marketIDs[i]); priceListner.Start(); var gate = new ManualResetEvent(false); priceListner.MessageReceived += (sender, priceArg) => { OnPriceReceived(new PriceReceivedArgs(priceArg.Data)); gate.Set(); }; gate.WaitOne(); }
private void BuildClients() { //Hook up a logger for the CIAPI.CS libraries LogManager.CreateInnerLogger = (logName, logLevel, showLevel, showDateTime, showLogName, dateTimeFormat) => new SimpleDebugAppender(logName, logLevel, showLevel, showDateTime, showLogName, dateTimeFormat); Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating rpc client")); RpcClient = new Client(RpcUri, StreamingUri, "CI-WP7"); RpcClient.BeginLogIn(UerName, Password, ar => { try { RpcClient.EndLogIn(ar); //RpcClient.MagicNumberResolver.PreloadMagicNumbersAsync(); RpcClient.MagicNumberResolver.PreloadMagicNumbers(); ThreadPool.QueueUserWorkItem(_ => { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating listeners")); StreamingClient = RpcClient.CreateStreamingClient(); PriceListener = StreamingClient.BuildPricesListener(MarketId); PriceListener.MessageReceived += OnMessageReceived; Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting account info")); RpcClient.AccountInformation.BeginGetClientAndTradingAccount(ar2 => { Account = RpcClient.AccountInformation.EndGetClientAndTradingAccount(ar2); Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting market info")); RpcClient.Market.BeginGetMarketInformation(MarketId.ToString(), ar3 => { Market = RpcClient.Market.EndGetMarketInformation(ar3).MarketInformation; Dispatcher.BeginInvoke(() => Button1.IsEnabled = true); }, null); }, null); }); } catch (Exception ex) { Dispatcher.BeginInvoke(() => listBox1.Items.Add("exception caught: " + ex)); } }, null); }
public IStreamingListener <TDto> BuildListener <TDto>(string dataAdapter, string mode, bool snapshot, string topic) where TDto : class, new() { if (_disposed) { throw new ObjectDisposedException(GetType().FullName); } //lock (_adapters) { if (!_adapters.ContainsKey(dataAdapter)) { #if WINDOWS_PHONE if (_adapters.Count == 5) { throw new Exception("Max concurrent lightstreamer adapters for WP7.1 is 5"); } #endif FaultTolerantLsClientAdapter adp = null; try { adp = new FaultTolerantLsClientAdapter(_streamingUri, _userName, _sessionId, dataAdapter, _usePolling, _serializer); adp.StatusUpdate += OnStatusUpdate; _adapters.Add(dataAdapter, adp); adp.Start(); } catch { if (adp != null) { adp.Dispose(); } throw; } } var adapter = _adapters[dataAdapter]; IStreamingListener <TDto> listener = adapter.BuildListener <TDto>(topic, mode, snapshot); return(listener); } }
public override void Execute() { if (string.IsNullOrEmpty(ServerUrl)) throw new ApplicationException("StreamingLatencyMonitor: ServerUrl is not set"); lock (_sync) { if (_client == null) { _client = new Client(new Uri(ServerUrl), new Uri(StreamingServerUrl), "{API_KEY}", 1); _client.LogIn(UserName, Password); _streamingClient = _client.CreateStreamingClient(); _streamingStartTime = DateTime.UtcNow; _listener = _streamingClient.BuildPricesListener(MarketId); _listener.MessageReceived += OnPriceUpdate; } } }
private void BuildClients() { //Hook up a logger for the CIAPI.CS libraries LogManager.CreateInnerLogger = (logName, logLevel, showLevel, showDateTime, showLogName, dateTimeFormat) => new SimpleDebugAppender(logName, logLevel, showLevel, showDateTime, showLogName, dateTimeFormat); Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating rpc client")); RpcClient = new Client(RPC_URI, STREAM_URI, "CI-WP7"); RpcClient.BeginLogIn(USERNAME, PASSWORD, ar => { _logger.Info("ending login"); var session = RpcClient.EndLogIn(ar); ThreadPool.QueueUserWorkItem(_ => { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating listeners")); StreamingClient = RpcClient.CreateStreamingClient(); MarketPricesStream = StreamingClient.BuildPricesListener(new[] { MarketId }); MarketPricesStream.MessageReceived += OnMarketPricesStreamMessageReceived; OrdersStream = StreamingClient.BuildOrdersListener(); OrdersStream.MessageReceived += OnOrdersStreamMessageReceived; Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting account info")); RpcClient.AccountInformation.BeginGetClientAndTradingAccount(ar2 => { Account = RpcClient.AccountInformation.EndGetClientAndTradingAccount(ar2); Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting market info")); RpcClient.Market.BeginGetMarketInformation(MarketId.ToString(), ar3 => { Market = RpcClient.Market.EndGetMarketInformation(ar3).MarketInformation; Dispatcher.BeginInvoke(() => button1.IsEnabled = true); }, null); }, null); }); }, null); }
private void BuildClients() { //Hook up a logger for the CIAPI.CS libraries LogManager.CreateInnerLogger = (logName, logLevel, showLevel, showDateTime, showLogName, dateTimeFormat) => new SimpleDebugAppender(logName, logLevel, showLevel, showDateTime, showLogName, dateTimeFormat); Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating rpc client")); RpcClient = new Client(RPC_URI, STREAM_URI, "CI-WP7"); RpcClient.BeginLogIn(USERNAME, PASSWORD, ar => { _logger .Info("ending login"); var session = RpcClient.EndLogIn(ar); ThreadPool.QueueUserWorkItem(_ => { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating listeners")); StreamingClient = RpcClient.CreateStreamingClient(); MarketPricesStream = StreamingClient.BuildPricesListener(new[] { MarketId }); MarketPricesStream.MessageReceived += OnMarketPricesStreamMessageReceived; OrdersStream = StreamingClient.BuildOrdersListener(); OrdersStream.MessageReceived += OnOrdersStreamMessageReceived; Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting account info")); RpcClient.AccountInformation.BeginGetClientAndTradingAccount(ar2 => { Account = RpcClient.AccountInformation.EndGetClientAndTradingAccount(ar2); Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting market info")); RpcClient.Market.BeginGetMarketInformation(MarketId.ToString(), ar3 => { Market = RpcClient.Market.EndGetMarketInformation(ar3).MarketInformation; Dispatcher.BeginInvoke(() => button1.IsEnabled = true); }, null); }, null); }); }, null); }
private void BuildClients() { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating rpc client")); RpcClient = new Client(RpcUri, StreamingUri, "CI-WP7"); RpcClient.BeginLogIn(UerName, Password, ar => { try { RpcClient.EndLogIn(ar); ThreadPool.QueueUserWorkItem(_ => { Dispatcher.BeginInvoke(() => listBox1.Items.Add("creating listeners")); StreamingClient = RpcClient.CreateStreamingClient(); PriceListener = StreamingClient.BuildPricesListener(MarketId); PriceListener.MessageReceived += OnMessageReceived; Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting account info")); RpcClient.AccountInformation.BeginGetClientAndTradingAccount(ar2 => { Account = RpcClient.AccountInformation.EndGetClientAndTradingAccount(ar2); Dispatcher.BeginInvoke(() => listBox1.Items.Add("getting market info")); RpcClient.Market.BeginGetMarketInformation(MarketId.ToString(), ar3 => { Market = RpcClient.Market.EndGetMarketInformation(ar3).MarketInformation; Dispatcher.BeginInvoke(() => Button1.IsEnabled = true); }, null); }, null); }); } catch (Exception ex) { Dispatcher.BeginInvoke(() => listBox1.Items.Add("exception caught: " + ex)); } }, null); }
private void ToggleSubscribeButton_Click(object sender, RoutedEventArgs e) { if (ToggleSubscribeButtonlabel.Text == "Subscribe") { _rcpClient = new Rpc.Client(new Uri(RpcUriTextbox.Text)); var userName = UserNameTextbox.Text; var streamingUri = new Uri(StreamingUriTextbox.Text); var topic = TopicTextbox.Text; Log("Creating session..."); _rcpClient.BeginLogIn(userName, PasswordTextbox.Text, loginResult => { try { _rcpClient.EndLogIn(loginResult); _logger.DebugFormat("Session is: {0}", _rcpClient.SessionId); Log("Creating streaming client..."); _streamingClient = StreamingClientFactory.CreateStreamingClient(streamingUri, userName, _rcpClient.SessionId); _streamingClient.StatusChanged += (s, message) => Log(string.Format("Status update: {0}", message.Status)); _streamingClient.Connect(); Log("Listening to news stream..."); _newsListener = _streamingClient.BuildListener<NewsDTO>(topic); _newsListener.Start(); _newsListener.MessageRecieved += (s, message) => { try { NewsDTO recievedNewsHeadline = message.Data; Log( string.Format( "Recieved: NewsDTO: StoryId {0}, Headline {1}, PublishDate = {2}", recievedNewsHeadline.StoryId, recievedNewsHeadline.Headline, recievedNewsHeadline.PublishDate.ToString("u"))); } catch (Exception exception) { _logger.Error("Exception occured:", exception); } }; } catch (Exception exception) { _logger.Error("Exception occured:", exception); } }, null); ToggleSubscribeButtonlabel.Text = "Stop"; } else { try { Log("Stopping listening to news stream..."); // D: abbreviating conditionals makes it hard to step // and is also a good way to get bugs. you may notice that I always use // blocks. if (_newsListener != null) { _newsListener.Stop(); } Log("Disconnecting from streaming server..."); if (_streamingClient != null) { _streamingClient.Disconnect(); } Log("Deleting session..."); if (_rcpClient != null ) { // REMOVEME: i commented this out and still getting the ObjectDisposed exception // so it is not in the RpcClient _rcpClient.BeginLogOut(logoutResult => { // FIXME: id/session invalid - getting back LoggedOut: false /*do nothing*/ var breakTarget = 0; }, null); } } catch (Exception exception) { _logger.Error("Exception occured:", exception); } ToggleSubscribeButtonlabel.Text = "Subscribe"; } }
void SubscribeNewsUpdates(Action<NewsDTO> onUpdate, Action<Exception> onError) { _client = new Client(RPC_URI); _client.BeginLogIn(USERNAME, PASSWORD, ar => { try { _client.EndLogIn(ar); Debug.WriteLine("Login ok"); _streamingClient = StreamingClientFactory.CreateStreamingClient( STREAMING_URI, USERNAME, _client.SessionId); _streamingClient.Connect(); Debug.WriteLine("\r\n\r\n\r\n\r\n\r\nStreaming connected ok"); _newsListener = _streamingClient.BuildListener<NewsDTO>("NEWS.MOCKHEADLINES.UK"); _newsListener.MessageRecieved += (s, e) => { var msg = e.Data.Headline; Debug.WriteLine(msg); //onUpdate(e.Data); }; _newsListener.Start(); Debug.WriteLine("\r\n\r\n\r\n\r\n\r\nListener started ok"); } catch (Exception exc) { onError(exc); } }, null); }
private void KillPriceListener() { _pricesListener.MessageReceived -= (PricesListenerMessageReceived); _pricesListener.Stop(); _pricesListener = null; }
private void StartButtonClick(object sender, RoutedEventArgs e) { Dispatcher.BeginInvoke(() => { listBox2.Items.Add("Starting"); }); Dispatcher.BeginInvoke(() => { listBox1.Items.Clear(); listBox2.Items.Clear(); listBox3.Items.Clear(); StartButton.IsEnabled = false; StopButton.IsEnabled = false; _backgroundRpcStop = false; _backgroundRpc = new Thread(() => { while (_backgroundRpcStop==false) { new AutoResetEvent(false).WaitOne(100000); var marketInfo = rpcClient.Market.GetMarketInformation("400535967"); Dispatcher.BeginInvoke(() => listBox3.Items.Add(marketInfo.MarketInformation.MarketId)); } return; }); _backgroundRpc.Start(); new Thread(() => { Debug.WriteLine("building listener2"); _listener = _streamingClient.BuildPricesListener(400535967, 81136, 400509294, 400535971, 80902, 400509295, 400193864, 400525367, 80926, 400498641, 400193866, 91047, 400194551, 121766, 400172033, 139144); _listener.MessageReceived += ListenerMessageReceived; Debug.WriteLine("building listener"); _listener2 = _streamingClient.BuildDefaultPricesListener(2347); _listener2.MessageReceived += Listener2MessageReceived; Debug.WriteLine("listener started"); Debug.WriteLine("listener2 started"); Dispatcher.BeginInvoke(() => { StartButton.IsEnabled = false; StopButton.IsEnabled = true; }); }).Start(); }); }