Test IRC client using RX Java and Java FX
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

Main.java 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package com.dmdirc.x.client;
  2. import com.dmdirc.parser.common.MyInfo;
  3. import com.dmdirc.parser.events.ChannelEvent;
  4. import com.dmdirc.parser.events.ChannelMessageEvent;
  5. import com.dmdirc.parser.events.ParserEvent;
  6. import com.dmdirc.parser.irc.IRCParser;
  7. import com.dmdirc.x.parser.ObservableParser;
  8. import io.reactivex.Observable;
  9. import io.reactivex.rxjavafx.schedulers.JavaFxScheduler;
  10. import java.net.URI;
  11. import javafx.application.Application;
  12. import javafx.scene.Scene;
  13. import javafx.scene.layout.StackPane;
  14. import javafx.stage.Stage;
  15. import org.apache.logging.log4j.LogManager;
  16. import org.apache.logging.log4j.Logger;
  17. import org.fxmisc.richtext.StyleClassedTextArea;
  18. public class Main {
  19. private static final Logger logger = LogManager.getLogger(Main.class);
  20. public static void main(String... args) {
  21. Application.launch(HelloWorld.class, args);
  22. }
  23. public static class HelloWorld extends Application {
  24. private StyleClassedTextArea area;
  25. @Override
  26. public void start(Stage primaryStage) {
  27. area = new StyleClassedTextArea();
  28. area.insertText(0, "Hello");
  29. StackPane root = new StackPane();
  30. root.getChildren().add(area);
  31. Scene scene = new Scene(root, 300, 250);
  32. primaryStage.setTitle("Hello World!");
  33. primaryStage.setScene(scene);
  34. primaryStage.show();
  35. MyInfo info = new MyInfo();
  36. info.setNickname(getParameters().getNamed().getOrDefault("nick", "luser"));
  37. IRCParser parser = new IRCParser(info, URI.create(getParameters().getNamed().get("uri")));
  38. ObservableParser observableParser = new ObservableParser(parser);
  39. parser.connect();
  40. observableParser.eventObservable().subscribe(this::handleEvent);
  41. observableParser.eventObservable()
  42. .filter(e -> e instanceof ChannelEvent)
  43. .map(e -> (ChannelEvent) e)
  44. .filter(c -> c.getChannel().getName().equalsIgnoreCase(
  45. getParameters().getNamed().getOrDefault("channel", "#dmdirc")))
  46. .filter(e -> e instanceof ChannelMessageEvent)
  47. .map(e -> (ChannelMessageEvent) e)
  48. .map(e -> e.getClient().getClient().getNickname() + "> " + e.getMessage())
  49. .observeOn(JavaFxScheduler.platform())
  50. .subscribe(this::handleChannelEvent);
  51. Observable.range(0, 250000)
  52. .map(String::valueOf)
  53. .observeOn(JavaFxScheduler.platform())
  54. .subscribe(this::handleChannelEvent);
  55. }
  56. private void handleEvent(ParserEvent event) {
  57. //logger.debug("Received event {}", event.getClass().getName());
  58. }
  59. private void handleChannelEvent(String line) {
  60. int length = area.getLength();
  61. area.insertText(length, "\n" + line);
  62. }
  63. }
  64. }