using listeners instead of a main thread for main logic

This commit is contained in:
Daniel Collin 2015-10-20 15:52:23 +00:00
parent 3177714fc5
commit 3634a61ee5
11 changed files with 229 additions and 47 deletions

View file

@ -11,22 +11,18 @@ import com.coder.client.Session;
import com.coder.client.gui.editor.EditorWindow;
import com.coder.client.gui.editor.EditorWindowListener;
import com.coder.client.gui.login.LoginDialog;
import com.coder.client.gui.login.LoginDialogAction;
import com.coder.client.gui.project.SelectProjectDialog;
import com.coder.client.gui.project.SelectProjectDialogListener;
import com.coder.client.gui.login.LoginDialogListener;
import com.coder.client.gui.selectProject.SelectProjectDialog;
import com.coder.client.gui.selectProject.SelectProjectDialogListener;
import com.coder.client.gui.selectServer.SelectServerDialog;
import com.coder.client.gui.selectServer.SelectServerDialogListener;
import com.coder.server.CoderServer;
import com.coder.server.message.CoderMessage;
import com.coder.server.message.ConfigData;
import com.coder.server.message.ProjectListData;
import com.coder.server.message.ProjectListReqMsg;
import com.coder.server.message.ProjectRspMsg;
import zutil.log.CompactLogFormatter;
import zutil.log.LogUtil;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class CoderClient extends Application{
@ -34,14 +30,17 @@ public class CoderClient extends Application{
private int port = CoderServer.SERVER_PORT;
private static final int DEFAULT_CONNECTION_RETRIES = 5;
private Session session;
private String url;
private Stage mainStage;
private int connectionRetriesLimit = DEFAULT_CONNECTION_RETRIES; //if zero, try forever
private String url;
private String username = null;
private char[] password = null;
private int connectionRetriesLimit = DEFAULT_CONNECTION_RETRIES; //if zero, try forever
private EditorWindow editorWindow;
private LoginDialog loginDialog;
private SelectProjectDialog selectProjectDialog;
private SelectServerDialog selectServerDialog;
public static void main(String[] args) {
Application.launch(args);
@ -56,6 +55,7 @@ public class CoderClient extends Application{
//parse program arguments
Map<String, String> params = this.getParameters().getNamed();
String url = null;
String username = null;
char[] password = null;
boolean reconnectForever = false;
@ -67,11 +67,15 @@ public class CoderClient extends Application{
password = value.toCharArray();
}else if(key.equals("retry-connect-forever")){
reconnectForever = true;
}else if(key.equals("url")){
url = value;
}
}
//create a client instance
this.url = "127.0.0.1";
if(url != null){
this.url = url;
}
if(username != null){
this.username = username;
if(password != null){
@ -88,16 +92,69 @@ public class CoderClient extends Application{
this.editorWindow = new EditorWindow();
this.loginDialog = new LoginDialog();
this.selectProjectDialog = new SelectProjectDialog();
this.selectServerDialog = new SelectServerDialog();
//register listeners
registerListeners();
//start program logic
run();
selectServerDialog.showOnStage(mainStage);
//run();
}
private void registerListeners() {
this.selectServerDialog.addSelectProjectDialogListener(new SelectServerDialogListener() {
@Override
public void willShow() {
selectServerDialog.setURL(url);
}
@Override
public void cancel() {
//TODO
}
@Override
public void connect(String serverUrl) {
//selectServerDialog.hide();
url = serverUrl;
//connect session
session = Session.setupConnection(url, port);
if(session == null){
logger.warning("Could not setup a connection to " + url + ":" + port);
url = null;
selectServerDialog.showOnStage(mainStage);
}
loginDialog.showOnStage(mainStage);
}
});
this.loginDialog.addLoginDialogListener(new LoginDialogListener(){
@Override
public void willShow() {
loginDialog.setUsername(username);
loginDialog.setPassword(password);
}
@Override
public void cancel() {
//TODO
}
@Override
public void login(String uname, char[] paswd) {
username = uname;
password = paswd;
//authenticate session
boolean authenticated = session.authenticate(username, password);
if(!authenticated){
JOptionPane.showMessageDialog(null, "Wrong username or password", "Authentication Failed", JOptionPane.INFORMATION_MESSAGE);
logger.severe("Authentication failed: wrong username or password");
password = null;
loginDialog.showOnStage(mainStage);
}
selectProjectDialog.showOnStage(mainStage);
}
});
this.selectProjectDialog.addSelectProjectDialogListener(new SelectProjectDialogListener() {
@Override
public void willShow() {
@ -116,17 +173,15 @@ public class CoderClient extends Application{
}
@Override
public void openProject(String selectedProjectName) {
selectProjectDialog.close();
editorWindow.showOnStage(mainStage);
}
@Override
public void newProject() {
selectProjectDialog.close();
//TODO
}
@Override
public void cancel() {
selectProjectDialog.close();
//TODO
}
});
@ -142,7 +197,7 @@ public class CoderClient extends Application{
session = null;
}
}
/*
public void run(){
//keep track of the number of connection retries to the server
int connectionRetries = 0;
@ -242,5 +297,6 @@ public class CoderClient extends Application{
// this.projectEditorWindow.dispose();
System.exit(0);
}
*/
}