diff options
author | Peter Wu <peter@lekensteyn.nl> | 2014-05-01 15:40:05 +0200 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2014-05-01 15:40:05 +0200 |
commit | 24fc22336273e919517cde2e8a81b5e4222f9e91 (patch) | |
tree | 13d38d13f1fe0aa005446bcdf35953dedd20a335 | |
parent | 69fec2b8561010b6d352a30a25914ab12fc27af0 (diff) | |
download | TwitterDataAnalytics-24fc22336273e919517cde2e8a81b5e4222f9e91.tar.gz |
Allow result and exception handler to be changed
-rw-r--r-- | src/io/StreamImpl.java | 36 | ||||
-rw-r--r-- | src/main/TweetShell.java | 7 |
2 files changed, 35 insertions, 8 deletions
diff --git a/src/io/StreamImpl.java b/src/io/StreamImpl.java index c378ea3..d72f926 100644 --- a/src/io/StreamImpl.java +++ b/src/io/StreamImpl.java @@ -35,13 +35,17 @@ public class StreamImpl implements Stream { private final Set<String> keywords = new HashSet<>(); /** + * Used for thread-safe modifications. + */ + private final Object listenerSync = new Object(); + /** * The target that is interested in received tweets. */ - private final ResultListener resultListener; + private ResultListener resultListener; /** * The target that is interesting in receiving changes. */ - private final ExceptionListener exceptionListener; + private ExceptionListener exceptionListener; /** * Used for signing messages. */ @@ -53,13 +57,25 @@ public class StreamImpl implements Stream { */ private WorkerContainer workerContainer; - public StreamImpl(ResultListener resultListener, ExceptionListener el, - OAuthRequester oauth) { - this.resultListener = resultListener; - this.exceptionListener = el; + public StreamImpl(OAuthRequester oauth) { this.oauth = oauth; } + /** + * Sets the listener for new tweets. + * + * @param resultListener + */ + public void setResultListener(ResultListener resultListener) { + this.resultListener = resultListener; + } + + public void setExceptionListener(ExceptionListener exceptionListener) { + synchronized (listenerSync) { + this.exceptionListener = exceptionListener; + } + } + @Override public void watchKeyword(String keyword) { keywords.add(keyword); @@ -229,7 +245,13 @@ public class StreamImpl implements Stream { } } connection.disconnect(); - exceptionListener.exceptionGenerated(ex); + // synchronize just in case the exception listener gets modified + // while hell breaks lose. + synchronized (listenerSync) { + if (exceptionListener != null) { + exceptionListener.exceptionGenerated(ex); + } + } } } diff --git a/src/main/TweetShell.java b/src/main/TweetShell.java index 533939b..b318544 100644 --- a/src/main/TweetShell.java +++ b/src/main/TweetShell.java @@ -36,7 +36,12 @@ public class TweetShell implements TwitterApi.PinSupplier { if (stream_cached == null) { OAuthRequester requester = (OAuthRequester) getApi().getRequester(); StreamHandler handler = new StreamHandler(); - stream_cached = new StreamImpl(handler, handler, requester); + stream_cached = new StreamImpl(requester); + StreamImpl streamObserver = (StreamImpl) stream_cached; + streamObserver.setExceptionListener(handler); + // TODO: wire up DataWriter and add a command ("target"?) to set a + // point to save results + streamObserver.setResultListener(handler); } return stream_cached; } |