X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fbackend%2FGenericBackend.java;h=ede3c0bff4365743f1d8c38d3c4b130f1cdc01f0;hb=505be508ae7d3fb48122be548b310a238cfb91eb;hp=bf27e947607f1c7bea073b4edac0689f300e6067;hpb=88a99379dca67603ee80819cb31716e52aa72362;p=fanfix.git diff --git a/src/jexer/backend/GenericBackend.java b/src/jexer/backend/GenericBackend.java index bf27e94..ede3c0b 100644 --- a/src/jexer/backend/GenericBackend.java +++ b/src/jexer/backend/GenericBackend.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2017 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,6 +31,8 @@ package jexer.backend; import java.util.List; import jexer.event.TInputEvent; +import jexer.event.TCommandEvent; +import static jexer.TCommand.*; /** * This abstract class provides a screen, keyboard, and mouse to @@ -39,11 +41,43 @@ import jexer.event.TInputEvent; */ public abstract class GenericBackend implements Backend { + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ + /** * The session information. */ protected SessionInfo sessionInfo; + /** + * The screen to draw on. + */ + protected Screen screen; + + /** + * Input events are processed by this Terminal. + */ + protected TerminalReader terminal; + + /** + * By default, GenericBackend adds a cmAbort after it sees + * cmBackendDisconnect, so that TApplication will exit when the user + * closes the Swing window or disconnects the ECMA48 streams. But + * MultiBackend wraps multiple Backends, and needs to decide when to send + * cmAbort differently. Setting this to false is how it manages that. + * Note package private access. + */ + boolean abortOnDisconnect = true; + + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ + + // ------------------------------------------------------------------------ + // Backend ---------------------------------------------------------------- + // ------------------------------------------------------------------------ + /** * Getter for sessionInfo. * @@ -53,11 +87,6 @@ public abstract class GenericBackend implements Backend { return sessionInfo; } - /** - * The screen to draw on. - */ - protected Screen screen; - /** * Getter for screen. * @@ -75,9 +104,13 @@ public abstract class GenericBackend implements Backend { } /** - * Input events are processed by this Terminal. + * Check if there are events in the queue. + * + * @return if true, getEvents() has something to return to the application */ - protected TerminalReader terminal; + public boolean hasEvents() { + return terminal.hasEvents(); + } /** * Get keyboard, mouse, and screen resize events. @@ -87,6 +120,18 @@ public abstract class GenericBackend implements Backend { public void getEvents(final List queue) { if (terminal.hasEvents()) { terminal.getEvents(queue); + + // This default backend assumes a single user, and if that user + // becomes disconnected we should terminate the application. + if ((queue.size() > 0) && (abortOnDisconnect == true)) { + TInputEvent event = queue.get(queue.size() - 1); + if (event instanceof TCommandEvent) { + TCommandEvent command = (TCommandEvent) event; + if (command.equals(cmBackendDisconnect)) { + queue.add(new TCommandEvent(cmAbort)); + } + } + } } } @@ -116,4 +161,11 @@ public abstract class GenericBackend implements Backend { terminal.setListener(listener); } + /** + * Reload backend options from System properties. + */ + public void reloadOptions() { + terminal.reloadOptions(); + } + }