Test IRC client using RX Java and Java FX
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
Repozitorijs ir arhivēts. Tam var aplūkot failus un to var klonēt, bet nevar iesūtīt jaunas izmaiņas, kā arī atvērt jaunas problēmas/izmaiņu pieprasījumus.

ObservableParser.java 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.dmdirc.x.parser;
  2. import com.dmdirc.parser.events.ParserEvent;
  3. import com.dmdirc.parser.interfaces.Parser;
  4. import io.reactivex.Observable;
  5. import io.reactivex.ObservableEmitter;
  6. import net.engio.mbassy.listener.Handler;
  7. import net.engio.mbassy.listener.Listener;
  8. import net.engio.mbassy.listener.References;
  9. import org.apache.logging.log4j.LogManager;
  10. import org.apache.logging.log4j.Logger;
  11. public class ObservableParser {
  12. private static final Logger logger = LogManager.getLogger(ObservableParser.class);
  13. private final Parser parser;
  14. private Observable<ParserEvent> observable;
  15. public ObservableParser(final Parser parser) {
  16. this.parser = parser;
  17. }
  18. public Observable<ParserEvent> eventObservable() {
  19. if (observable == null) {
  20. observable = Observable.create(e -> {
  21. logger.info("Creating new observable!");
  22. CallbackListener listener = new CallbackListener(e);
  23. parser.getCallbackManager().subscribe(listener);
  24. e.setCancellable(() -> parser.getCallbackManager().unsubscribe(listener));
  25. });
  26. }
  27. return observable;
  28. }
  29. @Listener(references = References.Strong)
  30. private static final class CallbackListener {
  31. private final ObservableEmitter<ParserEvent> emitter;
  32. private CallbackListener(final ObservableEmitter<ParserEvent> emitter) {
  33. this.emitter = emitter;
  34. }
  35. @Handler
  36. public void handleEvent(final ParserEvent parserEvent) {
  37. logger.trace("Emitting event of type {}", parserEvent.getClass().getSimpleName());
  38. emitter.onNext(parserEvent);
  39. }
  40. }
  41. }