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