From 09d15b4a8096d33dea122804f685ccd2a7a365ed Mon Sep 17 00:00:00 2001 From: dcollin Date: Fri, 13 Nov 2015 13:25:36 +0100 Subject: [PATCH] Refactoring: moving more GUI logic to each controller class -Adding a handler for SSDP -CoderClient giving control to each controller to be able to show itself on the main stage --- src/com/coder/client/CoderClient.java | 213 +++--------------- .../client/{project => }/ProjectHandler.java | 10 +- src/com/coder/client/SSDPHandler.java | 32 +++ .../client/{session => }/SessionHandler.java | 17 +- src/com/coder/client/gui/GuiWindow.java | 20 +- .../coder/client/gui/editor/EditorWindow.java | 34 ++- .../coder/client/gui/login/LoginDialog.java | 11 +- .../gui/newProject/NewProjectDialog.java | 40 +++- .../selectProject/SelectProjectDialog.java | 44 +++- .../gui/selectServer/SelectServerDialog.java | 61 +++-- .../coder/client/project/ProjectListener.java | 1 - src/com/coder/client/session/Session.java | 4 +- 12 files changed, 244 insertions(+), 243 deletions(-) rename src/com/coder/client/{project => }/ProjectHandler.java (84%) create mode 100644 src/com/coder/client/SSDPHandler.java rename src/com/coder/client/{session => }/SessionHandler.java (83%) diff --git a/src/com/coder/client/CoderClient.java b/src/com/coder/client/CoderClient.java index 4bd34a6..90354d1 100755 --- a/src/com/coder/client/CoderClient.java +++ b/src/com/coder/client/CoderClient.java @@ -5,45 +5,34 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import com.coder.client.gui.GuiWindow; import com.coder.client.gui.editor.EditorWindow; import com.coder.client.gui.login.LoginDialog; import com.coder.client.gui.newProject.NewProjectDialog; import com.coder.client.gui.selectProject.SelectProjectDialog; import com.coder.client.gui.selectServer.SelectServerDialog; -import com.coder.client.project.ProjectHandler; -import com.coder.client.project.ProjectListener; -import com.coder.client.session.ProjectRspMsgListener; -import com.coder.client.session.SessionHandler; -import com.coder.client.session.SessionListener; -import com.coder.server.message.CoderMessage; -import com.coder.server.message.ProjectCreateReqMsg; -import com.coder.server.message.ProjectReqMsg; -import com.coder.server.message.ProjectRspMsg; import zutil.log.CompactLogFormatter; import zutil.log.LogUtil; -import zutil.net.ssdp.SSDPClient; -import zutil.net.ssdp.SSDPClient.SSDPServiceListener; -import zutil.net.ssdp.StandardSSDPInfo; import javafx.application.Application; import javafx.application.Platform; +import javafx.scene.Scene; import javafx.stage.Stage; public class CoderClient extends Application{ public static final Logger logger = LogUtil.getLogger(); - private SessionHandler sessionHandler = new SessionHandler(); - private ProjectHandler projectHandler = new ProjectHandler(); + private SessionHandler sessionHandler; + private ProjectHandler projectHandler; + private SSDPHandler ssdpHandler; //GUI elements + private Stage mainStage; private EditorWindow editorWindow; private LoginDialog loginDialog; private SelectProjectDialog selectProjectDialog; private SelectServerDialog selectServerDialog; private NewProjectDialog newProjectDialog; - //services - SSDPClient ssdpClient; - public static void main(String[] args) { Application.launch(args); } @@ -59,7 +48,18 @@ public class CoderClient extends Application{ LogUtil.setFormatter("zutil", formatter); LogUtil.setGlobalFormatter(formatter); + //setup handlers + try{ + this.sessionHandler = new SessionHandler(); + this.projectHandler = new ProjectHandler(); + this.ssdpHandler = new SSDPHandler(); + }catch(Exception e){ + logger.log(Level.SEVERE, "could not load all handlers", e); + exit(); + } + //setup GUI elements + this.mainStage = mainStage; mainStage.setTitle("CoderClient"); try{ this.selectServerDialog = new SelectServerDialog(this); @@ -69,7 +69,7 @@ public class CoderClient extends Application{ this.editorWindow = new EditorWindow(this); }catch(IOException e){ logger.log(Level.SEVERE, "could not load all GUI elements", e); - System.exit(1); + exit(); } //parse program arguments @@ -92,170 +92,25 @@ public class CoderClient extends Application{ } } - //setup SSDP client - try{ - setupSSDPClient(); - }catch(IOException e){ - logger.log(Level.SEVERE, "could not setup SSDP client", e); - System.exit(1); - } - - //add session listeners - sessionHandler.addSessionListener(new SessionListener() { - @Override - public void sessionDisconnected(boolean retryToEstablishConnection) { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("session disconnected, will show the select server dialog on the main stage"); - selectServerDialog.showOnStage(mainStage); - } - }); - } - @Override - public void sessionConnectionSuccess() { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("session connection successfull, will show the login dialog on the main stage"); - loginDialog.showOnStage(mainStage); - } - }); - } - @Override - public void sessionConnectionFailure() { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("session connection failure, will show the select server dialog on the main stage"); - selectServerDialog.showOnStage(mainStage); - } - }); - } - @Override - public void sessionAuthenticationSuccess() { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("session authentication successfull, will show the select project dialog on the main stage"); - selectProjectDialog.showOnStage(mainStage); - } - }); - } - @Override - public void sessionAuthenticationFailure() { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("session authentication failure, will show the select server dialog on the main stage"); - selectServerDialog.showOnStage(mainStage); - } - }); - } - @Override - public void sessionAuthenticationCancel() { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("session authentication canceled, will show the select server dialog on the main stage"); - selectServerDialog.showOnStage(mainStage); - } - }); - } - }); - - //add project listeners - projectHandler.addprojectListener(new ProjectListener() { - @Override - public void selectProject() { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("select project requested, will show the select project dialog on the main stage"); - selectProjectDialog.showOnStage(mainStage); - } - }); - } - @Override - public void openProject(String projectName) { - CoderMessage msg = new CoderMessage(); - msg.ProjectReq = new ProjectReqMsg(); - msg.ProjectReq.name = projectName; - sessionHandler.sendMessage(msg); - } - @Override - public void createNewProject(String name, String type, String description) { - CoderMessage msg = new CoderMessage(); - msg.ProjectCreateReq = new ProjectCreateReqMsg(); - msg.ProjectCreateReq.name = name; - msg.ProjectCreateReq.type = type; - msg.ProjectCreateReq.description = description; - sessionHandler.sendMessage(msg); - } - @Override - public void createNewProject() { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("new project requested, will show the new project dialog on the main stage"); - newProjectDialog.showOnStage(mainStage); - } - }); - } - @Override - public void openProjectFailed(String errorMsg) { - Platform.runLater(new Runnable(){ - @Override - public void run() { - logger.info("open project failed, will show the select project dialog on the main stage"); - selectProjectDialog.showOnStage(mainStage); - } - }); - } - }); - - //add message listeners - sessionHandler.addMessageListener(new ProjectRspMsgListener() { - @Override - public void messageReceived(final ProjectRspMsg msg) { - Platform.runLater(new Runnable() { - @Override - public void run() { - if(msg.error != null){ - selectServerDialog.showOnStage(mainStage); - }else{ - editorWindow.showOnStage(mainStage); - } - } - }); - } - }); - //start program logic selectServerDialog.setServerPort(-1); - selectServerDialog.showOnStage(mainStage); + showOnStage(selectServerDialog); } - - private void setupSSDPClient() throws IOException{ - this.ssdpClient = new SSDPClient(); - ssdpClient.setListener(new SSDPServiceListener() { + + public void showOnStage(final GuiWindow gui){ + Platform.runLater(new Runnable(){ @Override - public void newService(final StandardSSDPInfo service) { - if(selectServerDialog != null){ - Platform.runLater(new Runnable() { - @Override - public void run() { - String ip = service.getInetAddress().getHostAddress(); - selectServerDialog.addServerToList(ip, 1337); - } - }); - } else { - logger.warning("New Service found ("+service.getLocation()+") when stage closed."); - } + public void run() { + Scene scene = gui.getScene(); + mainStage.setScene(scene); + mainStage.setTitle(gui.getTitle()); + logger.fine("about to show " + gui.getDescriptiveName() + " on stage"); + gui.willShow(); + mainStage.show(); + logger.fine("showing " + gui.getDescriptiveName()); } }); - ssdpClient.start(); } public void exit() { @@ -263,10 +118,6 @@ public class CoderClient extends Application{ Platform.exit(); System.exit(0); } - - public SSDPClient getSSDPClient() { - return this.ssdpClient; - } public SessionHandler getSessionHandler() { @@ -276,5 +127,9 @@ public class CoderClient extends Application{ public ProjectHandler getProjectHandler(){ return this.projectHandler; } + + public SSDPHandler getSSDPHandler(){ + return this.ssdpHandler; + } } diff --git a/src/com/coder/client/project/ProjectHandler.java b/src/com/coder/client/ProjectHandler.java similarity index 84% rename from src/com/coder/client/project/ProjectHandler.java rename to src/com/coder/client/ProjectHandler.java index 67faa2c..93fc65c 100644 --- a/src/com/coder/client/project/ProjectHandler.java +++ b/src/com/coder/client/ProjectHandler.java @@ -1,8 +1,10 @@ -package com.coder.client.project; +package com.coder.client; import java.util.HashSet; import java.util.logging.Logger; +import com.coder.client.project.ProjectListener; + import zutil.log.LogUtil; public class ProjectHandler { @@ -17,12 +19,6 @@ public class ProjectHandler { listener.createNewProject(); } } - - public void triggerCreateNewProject(String name, String type, String description){ - for(ProjectListener listener : projectListeners){ - listener.createNewProject(name, type, description); - } - } public boolean isProjectSet() { return projectName != null && !projectName.isEmpty(); diff --git a/src/com/coder/client/SSDPHandler.java b/src/com/coder/client/SSDPHandler.java new file mode 100644 index 0000000..13ee898 --- /dev/null +++ b/src/com/coder/client/SSDPHandler.java @@ -0,0 +1,32 @@ +package com.coder.client; + +import java.io.IOException; +import java.util.List; +import java.util.logging.Logger; + +import zutil.log.LogUtil; +import zutil.net.ssdp.SSDPClient; +import zutil.net.ssdp.SSDPClient.SSDPServiceListener; +import zutil.net.ssdp.StandardSSDPInfo; + +public class SSDPHandler { + public static final Logger logger = LogUtil.getLogger(); + + private SSDPClient ssdpClient; + + public SSDPHandler() throws IOException{ + ssdpClient = new SSDPClient(); + ssdpClient.start(); + } + + public void setSSDPServiceListener(SSDPServiceListener listener){ + ssdpClient.setListener(listener); + } + + public List requestService(String service) { + logger.fine("sending SSDP service request: \""+service+"\""); + ssdpClient.requestService(service); + return ssdpClient.getServices(service); + } + +} diff --git a/src/com/coder/client/session/SessionHandler.java b/src/com/coder/client/SessionHandler.java similarity index 83% rename from src/com/coder/client/session/SessionHandler.java rename to src/com/coder/client/SessionHandler.java index 66c3999..f172439 100644 --- a/src/com/coder/client/session/SessionHandler.java +++ b/src/com/coder/client/SessionHandler.java @@ -1,4 +1,4 @@ -package com.coder.client.session; +package com.coder.client; import java.io.IOException; import java.util.HashSet; @@ -7,6 +7,9 @@ import java.util.logging.Logger; import zutil.log.LogUtil; +import com.coder.client.session.ProjectMessageListener; +import com.coder.client.session.Session; +import com.coder.client.session.SessionListener; import com.coder.server.message.CoderMessage; public class SessionHandler{ @@ -97,10 +100,14 @@ public class SessionHandler{ } } - public void authenticationCancel() { - closeCurrentSession(false); - for(SessionListener listener : sessionListeners){ - listener.sessionAuthenticationCancel(); + public void triggerAuthenticationCancel() { + if(session.isConnected() && !session.isAuthenticated()){ + closeCurrentSession(false); + for(SessionListener listener : sessionListeners){ + listener.sessionAuthenticationCancel(); + } + }else{ + logger.warning("Can only cancel a connected but not yet authenticated authentication. ignoring call"); } } diff --git a/src/com/coder/client/gui/GuiWindow.java b/src/com/coder/client/gui/GuiWindow.java index 8e12e83..cb3cabd 100644 --- a/src/com/coder/client/gui/GuiWindow.java +++ b/src/com/coder/client/gui/GuiWindow.java @@ -11,7 +11,6 @@ import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.Scene; -import javafx.stage.Stage; public abstract class GuiWindow implements Initializable{ public static final Logger logger = LogUtil.getLogger(); @@ -28,27 +27,18 @@ public abstract class GuiWindow implements Initializable{ scene = new Scene((Parent)loader.load()); } - /** - * show on the given stage - * @param stage The stage to show on - */ - public void showOnStage(Stage stage){ - stage.setScene(scene); - stage.setTitle(getTitle()); - logger.fine("about to show " + getDescriptiveName() + " on stage"); - willShow(); - stage.show(); - logger.fine("showing " + getDescriptiveName()); + public Scene getScene(){ + return this.scene; } - protected abstract String getDescriptiveName(); + public abstract String getDescriptiveName(); - protected abstract String getTitle(); + public abstract String getTitle(); /** * Called every time before showed on stage */ - protected abstract void willShow(); + public abstract void willShow(); /** * Will be called once when created diff --git a/src/com/coder/client/gui/editor/EditorWindow.java b/src/com/coder/client/gui/editor/EditorWindow.java index 7f14bd7..88ace29 100644 --- a/src/com/coder/client/gui/editor/EditorWindow.java +++ b/src/com/coder/client/gui/editor/EditorWindow.java @@ -16,12 +16,14 @@ import zutil.log.LogUtil; import com.coder.client.CoderClient; import com.coder.client.gui.GuiWindow; +import com.coder.client.project.ProjectListener; import com.coder.client.property.CheckBoxProperty; import com.coder.client.property.CoderClientProperty; import com.coder.client.property.ComboBoxProperty; import com.coder.client.session.ProjectRspMsgListener; import com.coder.client.session.ProjectTypeRspMsgListener; import com.coder.server.message.CoderMessage; +import com.coder.server.message.ProjectReqMsg; import com.coder.server.message.ProjectRspMsg; import com.coder.server.message.ProjectTypeReqMsg; import com.coder.server.message.ProjectTypeRspMsg; @@ -53,6 +55,7 @@ public class EditorWindow extends GuiWindow { public EditorWindow(final CoderClient client) throws IOException{ super(EditorWindow.class.getResource("EditorWindow.fxml")); this.client = client; + client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() { @Override public void messageReceived(final ProjectRspMsg msg) { @@ -63,6 +66,7 @@ public class EditorWindow extends GuiWindow { client.getProjectHandler().setProject(null); return; }else{ + client.showOnStage(EditorWindow.this); client.getProjectHandler().setProject(msg.name); } @@ -114,6 +118,7 @@ public class EditorWindow extends GuiWindow { } } }); + client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() { @Override public void messageReceived(ProjectTypeRspMsg msg) { @@ -124,6 +129,29 @@ public class EditorWindow extends GuiWindow { } } }); + + client.getProjectHandler().addprojectListener(new ProjectListener() { + @Override + public void selectProject() { + + } + @Override + public void openProjectFailed(String errorMsg) { + + } + @Override + public void openProject(String projectName) { + CoderMessage msg = new CoderMessage(); + msg.ProjectReq = new ProjectReqMsg(); + msg.ProjectReq.name = projectName; + client.getSessionHandler().sendMessage(msg); + } + @Override + public void createNewProject() { + + } + }); + } @Override @@ -134,7 +162,7 @@ public class EditorWindow extends GuiWindow { } @Override - protected void willShow(){ + public void willShow(){ } @@ -209,7 +237,7 @@ public class EditorWindow extends GuiWindow { } @Override - protected String getTitle() { + public String getTitle() { return "Coder Client"; } @@ -219,7 +247,7 @@ public class EditorWindow extends GuiWindow { } @Override - protected String getDescriptiveName() { + public String getDescriptiveName() { return "Editor Window"; } diff --git a/src/com/coder/client/gui/login/LoginDialog.java b/src/com/coder/client/gui/login/LoginDialog.java index c940afa..ef3e9a5 100644 --- a/src/com/coder/client/gui/login/LoginDialog.java +++ b/src/com/coder/client/gui/login/LoginDialog.java @@ -36,7 +36,8 @@ public class LoginDialog extends GuiWindow { client.getSessionHandler().addSessionListener(new SessionListener() { @Override public void sessionConnectionSuccess() { - + logger.fine("session connection successfull, will show the login dialog on the main stage"); + client.showOnStage(LoginDialog.this); } @Override public void sessionDisconnected(boolean tryToEstablishConnection) { @@ -67,7 +68,7 @@ public class LoginDialog extends GuiWindow { } @Override - protected void willShow(){ + public void willShow(){ passwordPasswordField.setText(""); if( (errorLabel.getText() == null || (errorLabel.getText() != null && errorLabel.getText().isEmpty())) && usernameTextField.getText() != null && !usernameTextField.getText().isEmpty()){ passwordPasswordField.requestFocus(); @@ -101,7 +102,7 @@ public class LoginDialog extends GuiWindow { @FXML protected void cancel(ActionEvent event){ logger.fine("cancel button triggered"); - client.getSessionHandler().authenticationCancel(); + client.getSessionHandler().triggerAuthenticationCancel(); } public void setUsername(String username){ @@ -109,7 +110,7 @@ public class LoginDialog extends GuiWindow { } @Override - protected String getTitle() { + public String getTitle() { return "Login"; } @@ -118,7 +119,7 @@ public class LoginDialog extends GuiWindow { } @Override - protected String getDescriptiveName() { + public String getDescriptiveName() { return "Login Dialog"; } diff --git a/src/com/coder/client/gui/newProject/NewProjectDialog.java b/src/com/coder/client/gui/newProject/NewProjectDialog.java index d87c50d..043b4d1 100755 --- a/src/com/coder/client/gui/newProject/NewProjectDialog.java +++ b/src/com/coder/client/gui/newProject/NewProjectDialog.java @@ -6,6 +6,7 @@ import java.util.ResourceBundle; import java.util.logging.Logger; import com.coder.server.message.CoderMessage; +import com.coder.server.message.ProjectCreateReqMsg; import com.coder.server.message.ProjectTypeReqMsg; import com.coder.server.message.ProjectTypeRspMsg; import com.coder.server.message.SupportedProperties; @@ -25,6 +26,7 @@ import zutil.log.LogUtil; import com.coder.client.CoderClient; import com.coder.client.gui.GuiWindow; +import com.coder.client.project.ProjectListener; import com.coder.client.session.ProjectTypeRspMsgListener; public class NewProjectDialog extends GuiWindow { @@ -40,11 +42,12 @@ public class NewProjectDialog extends GuiWindow { private ObservableList projectTypeList = null; - public NewProjectDialog(CoderClient client) throws IOException { + public NewProjectDialog(final CoderClient client) throws IOException { super(NewProjectDialog.class.getResource("NewProjectDialog.fxml")); projectTypeList = FXCollections.observableArrayList(); projectTypeComboBox.setItems(projectTypeList); this.client = client; + client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() { @Override public void messageReceived(final ProjectTypeRspMsg msg) { @@ -55,10 +58,31 @@ public class NewProjectDialog extends GuiWindow { } } }); + + client.getProjectHandler().addprojectListener(new ProjectListener() { + @Override + public void selectProject() { + + } + @Override + public void openProjectFailed(String errorMsg) { + + } + @Override + public void openProject(String projectName) { + + } + @Override + public void createNewProject() { + setErrorMessage(""); + logger.fine("new project requested, will show the new project dialog on the main stage"); + client.showOnStage(NewProjectDialog.this); + } + }); } @Override - protected void willShow() { + public void willShow() { clearProjectTypeList(); sendProjectTypeReqMsg(); @@ -93,7 +117,13 @@ public class NewProjectDialog extends GuiWindow { return; } - client.getProjectHandler().triggerCreateNewProject(projectNameTextField.getText(), projectTypeComboBox.getValue(), projectDescriptionTextField.getText()); + CoderMessage msg = new CoderMessage(); + msg.ProjectCreateReq = new ProjectCreateReqMsg(); + msg.ProjectCreateReq.name = projectNameTextField.getText(); + msg.ProjectCreateReq.type = projectTypeComboBox.getValue(); + msg.ProjectCreateReq.description = projectDescriptionTextField.getText(); + client.getSessionHandler().sendMessage(msg); + } @FXML @@ -129,7 +159,7 @@ public class NewProjectDialog extends GuiWindow { } @Override - protected String getTitle() { + public String getTitle() { return "New Project"; } @@ -147,7 +177,7 @@ public class NewProjectDialog extends GuiWindow { } @Override - protected String getDescriptiveName() { + public String getDescriptiveName() { return "New Project Dialog"; } diff --git a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java index 9915772..434109f 100644 --- a/src/com/coder/client/gui/selectProject/SelectProjectDialog.java +++ b/src/com/coder/client/gui/selectProject/SelectProjectDialog.java @@ -29,6 +29,7 @@ import com.coder.client.gui.GuiWindow; import com.coder.client.project.ProjectListener; import com.coder.client.session.ProjectListRspMsgListener; import com.coder.client.session.ProjectRspMsgListener; +import com.coder.client.session.SessionListener; import com.coder.server.message.CoderMessage; import com.coder.server.message.ProjectListData; import com.coder.server.message.ProjectListReqMsg; @@ -50,6 +51,34 @@ public class SelectProjectDialog extends GuiWindow { super(SelectProjectDialog.class.getResource("SelectProjectDialog.fxml")); this.client = client; + client.getSessionHandler().addSessionListener(new SessionListener() { + @Override + public void sessionDisconnected(boolean retryToEstablishConnection) { + + } + @Override + public void sessionConnectionSuccess() { + + } + @Override + public void sessionConnectionFailure() { + + } + @Override + public void sessionAuthenticationSuccess() { + logger.fine("session authentication successfull, will show the select project dialog on the main stage"); + client.showOnStage(SelectProjectDialog.this); + } + @Override + public void sessionAuthenticationFailure() { + + } + @Override + public void sessionAuthenticationCancel() { + + } + }); + client.getSessionHandler().addMessageListener(new ProjectListRspMsgListener() { @Override public void messageReceived(final ProjectListRspMsg msg) { @@ -77,20 +106,19 @@ public class SelectProjectDialog extends GuiWindow { client.getProjectHandler().addprojectListener(new ProjectListener() { @Override public void selectProject() { - + logger.fine("select project requested, will show the select project dialog on the main stage"); + client.showOnStage(SelectProjectDialog.this); } @Override public void openProjectFailed(String errorMsg) { logger.fine("open project failed, setting error message to \""+errorMsg+"\""); setErrorMessage(errorMsg); + logger.fine("open project failed, will show the select project dialog on the main stage"); + client.showOnStage(SelectProjectDialog.this); } @Override public void openProject(String projectName) { - } - @Override - public void createNewProject(String name, String type, String description) { - } @Override public void createNewProject() { @@ -100,7 +128,7 @@ public class SelectProjectDialog extends GuiWindow { } @Override - protected void willShow() { + public void willShow() { clearProjectList(); if(!client.getProjectHandler().isProjectSet()){ sendProjectListReq(); @@ -213,7 +241,7 @@ public class SelectProjectDialog extends GuiWindow { } @Override - protected String getTitle() { + public String getTitle() { return "Open Project"; } @@ -222,7 +250,7 @@ public class SelectProjectDialog extends GuiWindow { } @Override - protected String getDescriptiveName() { + public String getDescriptiveName() { return "Select Project Dialog"; } diff --git a/src/com/coder/client/gui/selectServer/SelectServerDialog.java b/src/com/coder/client/gui/selectServer/SelectServerDialog.java index 4abee2d..cf614a0 100644 --- a/src/com/coder/client/gui/selectServer/SelectServerDialog.java +++ b/src/com/coder/client/gui/selectServer/SelectServerDialog.java @@ -2,10 +2,12 @@ package com.coder.client.gui.selectServer; import java.io.IOException; import java.net.URL; +import java.util.List; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; +import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; @@ -23,12 +25,14 @@ import javafx.scene.input.MouseEvent; import javafx.util.Callback; import zutil.log.LogUtil; -import zutil.net.ssdp.SSDPClient; +import zutil.net.ssdp.SSDPClient.SSDPServiceListener; import zutil.net.ssdp.StandardSSDPInfo; import com.coder.client.CoderClient; import com.coder.client.gui.GuiWindow; +import com.coder.client.session.ProjectRspMsgListener; import com.coder.client.session.SessionListener; +import com.coder.server.message.ProjectRspMsg; public class SelectServerDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); @@ -43,7 +47,7 @@ public class SelectServerDialog extends GuiWindow { @FXML private Button connectButton; @FXML private Label errorLabel; - public SelectServerDialog(CoderClient client) throws IOException { + public SelectServerDialog(final CoderClient client) throws IOException { super(SelectServerDialog.class.getResource("SelectServerDialog.fxml")); this.client = client; client.getSessionHandler().addSessionListener(new SessionListener() { @@ -59,11 +63,15 @@ public class SelectServerDialog extends GuiWindow { }else{ setErrorMessage("The current session was disconnected"); } + logger.fine("session disconnected, will show the select server dialog on the main stage"); + client.showOnStage(SelectServerDialog.this); } @Override public void sessionConnectionFailure() { setServerAddress(null); setErrorMessage("ERROR: Unable to connect to remote host"); + logger.fine("session connection failure, will show the select server dialog on the main stage"); + client.showOnStage(SelectServerDialog.this); } @Override public void sessionAuthenticationSuccess() { @@ -72,17 +80,49 @@ public class SelectServerDialog extends GuiWindow { @Override public void sessionAuthenticationFailure() { setErrorMessage(""); + logger.fine("session authentication failure, will show the select server dialog on the main stage"); + client.showOnStage(SelectServerDialog.this); } @Override public void sessionAuthenticationCancel() { setServerAddress(null); setErrorMessage(null); + logger.fine("session authentication canceled, will show the select server dialog on the main stage"); + client.showOnStage(SelectServerDialog.this); } }); + + client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() { + @Override + public void messageReceived(final ProjectRspMsg msg) { + Platform.runLater(new Runnable() { + @Override + public void run() { + if(msg.error != null){ + client.showOnStage(SelectServerDialog.this); + } + } + }); + } + }); + + client.getSSDPHandler().setSSDPServiceListener(new SSDPServiceListener() { + @Override + public void newService(final StandardSSDPInfo service) { + Platform.runLater(new Runnable() { + @Override + public void run() { + String ip = service.getInetAddress().getHostAddress(); + addServerToList(ip, 1337); + } + }); + } + }); + } @Override - protected void willShow() { + public void willShow() { logger.fine("Clearing server list"); serverList.clear(); if(address != null && port != -1){ @@ -91,14 +131,9 @@ public class SelectServerDialog extends GuiWindow { connectButton.fire(); }else{ logger.fine("sending a SSDP request for local servers"); - SSDPClient ssdpClient = client.getSSDPClient(); - if(ssdpClient != null){ - ssdpClient.requestService("coder:discover"); - for(StandardSSDPInfo server : ssdpClient.getServices("coder:discover")){ - addServerToList(server.getInetAddress().getHostAddress(), 1337); - } - }else{ - logger.severe("could not send a SSDP request since the client is not setup"); + List serverList = client.getSSDPHandler().requestService("coder:discover"); + for(StandardSSDPInfo server : serverList){ + addServerToList(server.getInetAddress().getHostAddress(), 1337); } } connectButton.setDisable(true); @@ -180,7 +215,7 @@ public class SelectServerDialog extends GuiWindow { } @Override - protected String getTitle() { + public String getTitle() { return "Select Server"; } @@ -195,7 +230,7 @@ public class SelectServerDialog extends GuiWindow { } @Override - protected String getDescriptiveName() { + public String getDescriptiveName() { return "Select Server Dialog"; } diff --git a/src/com/coder/client/project/ProjectListener.java b/src/com/coder/client/project/ProjectListener.java index d881e29..e69afe8 100644 --- a/src/com/coder/client/project/ProjectListener.java +++ b/src/com/coder/client/project/ProjectListener.java @@ -2,7 +2,6 @@ package com.coder.client.project; public interface ProjectListener { public void createNewProject(); - public void createNewProject(String name, String type, String description); public void selectProject(); public void openProject(String projectName); public void openProjectFailed(String errorMsg); diff --git a/src/com/coder/client/session/Session.java b/src/com/coder/client/session/Session.java index 3025b4e..efc0d36 100755 --- a/src/com/coder/client/session/Session.java +++ b/src/com/coder/client/session/Session.java @@ -35,7 +35,7 @@ public class Session extends Thread { } - protected static Session setupConnection(String url, int port){ + public static Session setupConnection(String url, int port){ Session session = new Session(); logger.fine("Setting up a TCP socket to " + url + ":" + port); try { @@ -118,7 +118,7 @@ public class Session extends Thread { return authenticated; } - protected boolean authenticate(String username, char[] clearTextPassword) { + public boolean authenticate(String username, char[] clearTextPassword) { logger.fine("Authenticating session"); if(socket == null){