Search in sources :

Example 1 with IDaemon

use of com.github.mob41.osumer.rmi.IDaemon in project osumer by mob41.

the class Main method main.

public static void main(String[] args) {
    try {
        DumpManager.init(Osumer.getVersionString(), Osumer.getVersionString());
    } catch (IOException e2) {
        e2.printStackTrace();
        System.err.println("DumpManager: Error initializing dump manager");
    }
    DumpManager.reportEvent("active", "launcher");
    ArgParser ap = new ArgParser(args);
    if (ap.isVersionFlag()) {
        System.out.println(Osumer.OSUMER_VERSION + "-" + Osumer.OSUMER_BRANCH + "-" + Osumer.OSUMER_BUILD_NUM);
        return;
    }
    // These are called by Windows when setting Default Programs
    if (ap.isHideIconsFlag() || ap.isShowIconsFlag() || ap.isReinstallFlag() || ap.isInstallFlag() || ap.isUninstallFlag()) {
        Installer installer = new Installer();
        if (ap.isHideIconsFlag()) {
            DumpManager.reportEvent("event", "launcherHideIcons");
            installer.hideIcons();
        } else if (ap.isShowIconsFlag()) {
            DumpManager.reportEvent("event", "launcherShowIcons");
            installer.showIcons();
        } else if (ap.isReinstallFlag()) {
            DumpManager.reportEvent("event", "launcherReinstall");
            installer.reinstall();
        }
        /* else if (ap.isInstallFlag()) {
                if (!ap.isQuietFlag() && !ap.isForceFlag()) {
                    int option = JOptionPane.showOptionDialog(null,
                            "You are installing osumer " + Osumer.OSUMER_VERSION + "-" + Osumer.OSUMER_BRANCH + "-"
                                    + Osumer.OSUMER_BUILD_NUM + ".\n" + "Are you sure?",
                            "Installing osumer", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null,
                            JOptionPane.NO_OPTION);

                    if (option != JOptionPane.YES_OPTION) {
                        return;
                    }
                }

                try {
                    long startTime = System.currentTimeMillis();
                    installer.install();

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Info@U$\nInstallation success within "
                                + (System.currentTimeMillis() - startTime) + " ms\nInfo@D$");
                    }
                } catch (WithDumpException e) {
                    if (!ap.isNoUiFlag() && !GraphicsEnvironment.isHeadless()) {
                        //TODO: Error Dump Dialog Control
                        ErrorDumpDialog dialog = new ErrorDumpDialog(e.getDump());
                        dialog.setModal(true);
                        dialog.setVisible(true);
                    }

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Error@U$\n" + e.getDump().toString() + "Error@D$");
                    }
                }
            } else if (ap.isUninstallFlag()) {
                if (!ap.isQuietFlag() && !ap.isForceFlag()) {
                    int option = JOptionPane.showOptionDialog(null,
                            "You are uninstalling osumer " + Osumer.OSUMER_VERSION + "-" + Osumer.OSUMER_BRANCH + "-"
                                    + Osumer.OSUMER_BUILD_NUM + ".\n" + "Are you sure?",
                            "Uninstalling osumer", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null,
                            JOptionPane.NO_OPTION);

                    if (option != JOptionPane.YES_OPTION) {
                        return;
                    }
                }

                try {
                    long startTime = System.currentTimeMillis();
                    installer.uninstall();

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Info@U$\nUninstallation success within "
                                + (System.currentTimeMillis() - startTime) + " ms\nInfo@D$");
                    }
                } catch (WithDumpException e) {
                    if (!ap.isNoUiFlag() && !GraphicsEnvironment.isHeadless()) {
                        //TODO: Error Dump Dialog Control
                        ErrorDumpDialog dialog = new ErrorDumpDialog(e.getDump());
                        dialog.setModal(true);
                        dialog.setVisible(true);
                    }

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Error@U$\n" + e.getDump().toString() + "Error@D$");
                    }
                }
            }*/
        DumpManager.forceMetricsReport();
        System.exit(0);
        return;
    }
    // 
    // Launch osumer system right here if no installation arguments
    // 
    String configPath = Osumer.isWindows() ? System.getenv("localappdata") + "\\osumerExpress" : "";
    Configuration config = new Configuration(configPath, Configuration.DEFAULT_DATA_FILE_NAME);
    try {
        config.load();
    } catch (IOException e1) {
        System.err.println("Unable to load configuration");
        e1.printStackTrace();
        DumpManager.addDump(new DebugDump(null, "Configuration initialization", "Load configuration", "Set String urlStr to null", "Unable to load configuration", false, e1));
        DumpManager.forceMetricsReport();
        if (!GraphicsEnvironment.isHeadless()) {
            JOptionPane.showMessageDialog(null, "Could not load configuration. For more details, check dump:\n" + e1, "Configuration Error", JOptionPane.ERROR_MESSAGE);
        }
        System.exit(-1);
        return;
    }
    String urlStr = null;
    for (int i = 0; i < args.length; i++) {
        if (config.isUseOldParser() ? OsumsOldParser.checkVaildBeatmapUrl(args[i]) : OsumsNewParser.checkVaildBeatmapUrl(args[i])) {
            urlStr = args[i];
            break;
        }
    }
    if (// Configuration
    (config.isSwitchToBrowserIfWithoutUiArg() && !ap.isUiFlag() && ap.isNoUiFlag()) || (urlStr != null && !config.isOEEnabled()) || (args != null && args.length > 0 && urlStr == null)) {
        // Browser if disabled OE
        runBrowser(config, args);
        DumpManager.reportEvent("event", "launcherRunBrowser");
        DumpManager.forceMetricsReport();
        System.exit(0);
        return;
    } else {
        IDaemon d = null;
        try {
            // Contact the daemon via RMI
            d = (IDaemon) Naming.lookup("rmi://localhost:46726/daemon");
        } catch (Exception e) {
        }
        if (d == null) {
            try {
                Runtime.getRuntime().exec("\"" + OsumerNative.getProgramFiles() + "\\osumer2\\osumer-daemon.exe\"");
            } catch (IOException e) {
                e.printStackTrace();
                DumpManager.addDump(new DebugDump(null, "Check if \"d\" is null", "Execute osumer-daemon.exe", "Initialize \"c\" as 0", "Could not start daemon. Terminating", false, e));
                DumpManager.forceMetricsReport();
                JOptionPane.showMessageDialog(null, "Could not start daemon. For more details, check dump. Terminating:\n" + e, "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
                System.exit(-1);
                return;
            }
            int c = 0;
            while (c < 20) {
                try {
                    // Contact the daemon via RMI
                    d = (IDaemon) Naming.lookup("rmi://localhost:46726/daemon");
                } catch (Exception e) {
                }
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    break;
                }
                c++;
            }
            if (d == null) {
                DumpManager.addDump(new DebugDump(null, "(While-loop) Look up daemon RMI", "Check if \\\"d\\\" is null", "Check if \"urlStr\" is null", false, "Could not connect to daemon. Terminating"));
                DumpManager.forceMetricsReport();
                JOptionPane.showMessageDialog(null, "Could not connect to daemon. For more details, check dump. Terminating", "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
                System.exit(-1);
                return;
            }
        }
        if (urlStr != null) {
            try {
                d.addQueue(urlStr);
                System.exit(0);
                return;
            } catch (RemoteException e) {
                e.printStackTrace();
                DumpManager.addDump(new DebugDump(null, "Check if \\\"urlStr\\\" is null", "Request daemon to add queue", "System Exit", "Could not connect or add queue to daemon", false, e));
                DumpManager.forceMetricsReport();
                JOptionPane.showMessageDialog(null, "Could not connect or add queue to daemon. For more details, check dump:\n" + e, "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
                System.exit(-1);
                return;
            }
        }
        if (GraphicsEnvironment.isHeadless()) {
            System.out.println("Error: Arguments are required to use this application. Otherwise, a graphics environment is required to show the downloader UI.");
            System.exit(0);
            return;
        }
        runUi(config, args, ap, d);
    }
    DumpManager.forceMetricsReport();
}
Also used : Configuration(com.github.mob41.osumer.Configuration) Installer(com.github.mob41.osumer.installer.Installer) IOException(java.io.IOException) IDaemon(com.github.mob41.osumer.rmi.IDaemon) RemoteException(java.rmi.RemoteException) DebugDump(com.github.mob41.osumer.debug.DebugDump) IOException(java.io.IOException) RemoteException(java.rmi.RemoteException)

Example 2 with IDaemon

use of com.github.mob41.osumer.rmi.IDaemon in project osumer by mob41.

the class AppMain method start.

@Override
public void start(Stage primaryStage) {
    this.primaryStage = primaryStage;
    try {
        DumpManager.init(Osumer.getVersionString(), Osumer.getVersionString());
    } catch (IOException e) {
        e.printStackTrace();
        System.err.println("DumpManager: Error initializing dump manager");
        Alert alert = new Alert(AlertType.ERROR, e.getMessage(), ButtonType.OK);
        alert.setHeaderText("Error initializing dump manager");
        alert.showAndWait();
        Platform.exit();
        System.exit(-1);
        return;
    }
    // Arg is handled by osumer-launcher
    String configPath = Osumer.isWindows() ? System.getenv("localappdata") + "\\osumerExpress" : "";
    config = new Configuration(configPath, Configuration.DEFAULT_DATA_FILE_NAME);
    try {
        config.load();
    } catch (IOException e) {
        e.printStackTrace();
        System.err.println("Unable to load configuration");
        DumpManager.addDump(new DebugDump(null, "Initialize Configuration", "Load configuration from file", "Set uiSuffix", "Unable to load configuration", false, e));
        Alert alert = new Alert(AlertType.ERROR, e.getMessage(), ButtonType.OK);
        alert.setHeaderText("Could not load configuration");
        alert.showAndWait();
        DumpManager.forceMetricsReport();
        Platform.exit();
        System.exit(-1);
        return;
    }
    String uiSuffix = RMI_UI_PORT + "/" + RMI_UI_PATH;
    String daemonSuffix = RMI_DAEMON_PORT + "/" + RMI_DAEMON_PATH;
    ui = null;
    try {
        // Find any running UI
        ui = (IUI) Naming.lookup("rmi://localhost:" + uiSuffix);
    } catch (Exception ignore) {
    }
    if (ui != null) {
        try {
            ui.wake();
        } catch (RemoteException e) {
            e.printStackTrace();
            String msg = "Unable to wake up the UI:\n" + e.getMessage();
            System.err.println(msg);
            DumpManager.addDump(new DebugDump(null, "Check if ui is not null", "Call ui to wake", "Stop this UI", msg, false, e));
            Alert alert = new Alert(AlertType.ERROR, msg, ButtonType.OK);
            alert.setHeaderText("osumer RMI Connection Error");
            alert.showAndWait();
            DumpManager.forceMetricsReport();
            Platform.exit();
            System.exit(-1);
            return;
        }
        try {
            stop();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return;
    }
    d = null;
    try {
        // Contact the daemon via RMI
        d = (IDaemon) Naming.lookup("rmi://localhost:" + daemonSuffix);
    } catch (Exception e) {
        e.printStackTrace();
        String msg = "Could not connect to daemon! Please ensure osumer-daemon is running properly.\n" + "Instead of starting directly with \"osumer-ui.exe\", please use \"osumer.exe\" to launch osumer.";
        System.err.println(msg);
        DumpManager.addDump(new DebugDump(null, "Set d as null", "Look for running daemon", "Create RMI Registry for UI", msg, false, e));
        Alert alert = new Alert(AlertType.ERROR, msg, ButtonType.OK);
        alert.setHeaderText("osumer RMI Connection Error");
        alert.showAndWait();
        DumpManager.forceMetricsReport();
        Platform.exit();
        System.exit(-1);
        return;
    }
    try {
        LocateRegistry.createRegistry(RMI_UI_PORT);
        ui = new UI(this);
        Naming.bind("rmi://localhost:" + uiSuffix, ui);
    } catch (Exception e) {
        e.printStackTrace();
        String msg = "Could not register UI RMI registry on port " + RMI_UI_PORT + ":\n" + e.getMessage();
        System.err.println(msg);
        DumpManager.addDump(new DebugDump(null, "Look for running daemon", "Create RMI Registry for UI", "Register UI to daemon", msg, false, e));
        Alert alert = new Alert(AlertType.ERROR, msg, ButtonType.OK);
        alert.setHeaderText("osumer RMI Initialization Error");
        alert.showAndWait();
        DumpManager.forceMetricsReport();
        Platform.exit();
        System.exit(-1);
        return;
    }
    try {
        d.registerUi(ui);
    } catch (RemoteException e) {
        e.printStackTrace();
        String msg = "Could not register UI to daemon\n" + e.getMessage();
        System.err.println(msg);
        DumpManager.addDump(new DebugDump(null, "Create RMI Registry for UI", "Register UI to daemon", "Set stage title", msg, false, e));
        Alert alert = new Alert(AlertType.ERROR, msg, ButtonType.OK);
        alert.setHeaderText("osumer RMI Initialization Error");
        alert.showAndWait();
        DumpManager.forceMetricsReport();
        Platform.exit();
        System.exit(-1);
        return;
    }
    primaryStage.setTitle("osumer2");
    primaryStage.getIcons().add(new Image(AppMain.class.getResourceAsStream("/image/osumerIcon_64px.png")));
    // TODO Use new parser
    osums = new OsumsOldParser();
    // osums = config.isUseOldParser() ? new OsumsOldParser() : new OsumsNewParser();
    initRootLayout();
    DumpManager.reportEvent("active", "ui");
}
Also used : Configuration(com.github.mob41.osumer.Configuration) IUI(com.github.mob41.osumer.rmi.IUI) OsumsOldParser(com.github.mob41.osums.OsumsOldParser) Alert(javafx.scene.control.Alert) IOException(java.io.IOException) RemoteException(java.rmi.RemoteException) Image(javafx.scene.image.Image) DebugDump(com.github.mob41.osumer.debug.DebugDump) IOException(java.io.IOException) RemoteException(java.rmi.RemoteException)

Example 3 with IDaemon

use of com.github.mob41.osumer.rmi.IDaemon in project osumer by mob41.

the class Main method runUi.

private static void runUi(Configuration config, String[] args, ArgParser ap, IDaemon d) {
    IUI ui = null;
    try {
        // Contact the ui via RMI
        ui = (IUI) Naming.lookup("rmi://localhost:46727/ui");
    } catch (Exception e) {
    }
    if (ui == null) {
        try {
            Runtime.getRuntime().exec("\"" + OsumerNative.getProgramFiles() + "\\osumer2\\osumer-ui.exe\"");
        } catch (IOException e) {
            e.printStackTrace();
            DumpManager.addDump(new DebugDump(null, "Check if \"ui\" is null", "Execute osumer-ui.exe", "Initialize \"c\" as 0", "Could not start UI. Terminating", false, e));
            DumpManager.forceMetricsReport();
            JOptionPane.showMessageDialog(null, "Could not start UI. For more details, check dump. Terminating:\n" + e, "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
            System.exit(-1);
            return;
        }
        int c = 0;
        while (c < 20) {
            try {
                // Contact the ui via RMI
                ui = (IUI) Naming.lookup("rmi://localhost:46727/ui");
            } catch (Exception e) {
            }
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                break;
            }
            c++;
        }
    }
    if (ui == null) {
        DumpManager.addDump(new DebugDump(null, "(While-loop) Look up UI RMI", "Check if \\\"ui\\\" is null", "Try to wake up UI", false, "Could not connect to UI. Terminating"));
        DumpManager.forceMetricsReport();
        JOptionPane.showMessageDialog(null, "Could not connect to UI. For more details, check dump. Terminating", "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
        System.exit(-1);
        return;
    }
    try {
        ui.wake();
    } catch (RemoteException e) {
        e.printStackTrace();
        DumpManager.addDump(new DebugDump(null, "Check if \\\\\\\"ui\\\\\\\" is null", "Try to wake up UI", "End of runUi()", "Could not connect or wake UI", false, e));
        DumpManager.forceMetricsReport();
        JOptionPane.showMessageDialog(null, "Could not connect or wake UI. For more details, check dump:\n" + e, "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
        System.exit(-1);
        return;
    }
}
Also used : IOException(java.io.IOException) IUI(com.github.mob41.osumer.rmi.IUI) RemoteException(java.rmi.RemoteException) DebugDump(com.github.mob41.osumer.debug.DebugDump) IOException(java.io.IOException) RemoteException(java.rmi.RemoteException)

Aggregations

DebugDump (com.github.mob41.osumer.debug.DebugDump)3 IOException (java.io.IOException)3 RemoteException (java.rmi.RemoteException)3 Configuration (com.github.mob41.osumer.Configuration)2 IUI (com.github.mob41.osumer.rmi.IUI)2 Installer (com.github.mob41.osumer.installer.Installer)1 IDaemon (com.github.mob41.osumer.rmi.IDaemon)1 OsumsOldParser (com.github.mob41.osums.OsumsOldParser)1 Alert (javafx.scene.control.Alert)1 Image (javafx.scene.image.Image)1