2015-10-09 13:37:45 +00:00
package com.coder.client ;
2015-10-13 08:13:23 +00:00
import java.io.IOException ;
2015-10-27 12:18:22 +01:00
import java.util.List ;
2015-10-13 08:13:23 +00:00
import java.util.Map ;
2015-11-02 16:55:48 +01:00
import java.util.Properties ;
2015-10-09 13:37:45 +00:00
import java.util.logging.Level ;
import java.util.logging.Logger ;
2015-10-20 14:26:58 +00:00
import com.coder.client.Session ;
2015-10-23 13:44:11 +00:00
import com.coder.client.gui.GuiWindow ;
2015-10-20 14:26:58 +00:00
import com.coder.client.gui.editor.EditorWindow ;
import com.coder.client.gui.editor.EditorWindowListener ;
import com.coder.client.gui.login.LoginDialog ;
2015-10-20 15:52:23 +00:00
import com.coder.client.gui.login.LoginDialogListener ;
2015-10-23 13:44:11 +00:00
import com.coder.client.gui.newProject.NewProjectDialog ;
import com.coder.client.gui.newProject.NewProjectDialogListener ;
2015-10-20 15:52:23 +00:00
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 ;
2015-10-09 13:37:45 +00:00
import com.coder.server.CoderServer ;
2015-10-13 08:13:23 +00:00
import com.coder.server.message.CoderMessage ;
2015-10-21 14:23:00 +00:00
import com.coder.server.message.ConfigData ;
2015-10-23 13:44:11 +00:00
import com.coder.server.message.ProjectCreateReqMsg ;
2015-10-21 14:23:00 +00:00
import com.coder.server.message.ProjectListData ;
2015-10-20 06:56:14 +00:00
import com.coder.server.message.ProjectListReqMsg ;
2015-10-23 13:44:11 +00:00
import com.coder.server.message.ProjectReqMsg ;
2015-10-21 14:23:00 +00:00
import com.coder.server.message.ProjectRspMsg ;
2015-10-23 13:44:11 +00:00
import com.coder.server.message.ProjectTypeReqMsg ;
2015-10-09 13:37:45 +00:00
2015-10-13 08:53:07 +00:00
import zutil.log.CompactLogFormatter ;
2015-10-09 13:37:45 +00:00
import zutil.log.LogUtil ;
2015-10-22 14:08:31 +00:00
import zutil.net.ssdp.SSDPClient ;
import zutil.net.ssdp.SSDPClient.SSDPServiceListener ;
import zutil.net.ssdp.StandardSSDPInfo ;
2015-10-20 14:26:58 +00:00
import javafx.application.Application ;
2015-10-21 16:13:45 +00:00
import javafx.application.Platform ;
2015-10-20 14:26:58 +00:00
import javafx.stage.Stage ;
2015-10-09 13:37:45 +00:00
2015-10-20 14:26:58 +00:00
public class CoderClient extends Application {
2015-10-09 13:37:45 +00:00
public static final Logger logger = LogUtil . getLogger ( ) ;
2015-10-27 12:18:22 +01:00
2015-10-09 13:37:45 +00:00
private Session session ;
2015-10-20 14:26:58 +00:00
private Stage mainStage ;
2015-10-27 12:18:22 +01:00
2015-10-21 14:23:00 +00:00
//GUI elements
2015-10-20 14:26:58 +00:00
private EditorWindow editorWindow ;
private LoginDialog loginDialog ;
private SelectProjectDialog selectProjectDialog ;
2015-10-20 15:52:23 +00:00
private SelectServerDialog selectServerDialog ;
2015-10-23 13:44:11 +00:00
private NewProjectDialog newProjectDialog ;
2015-10-27 12:18:22 +01:00
2015-10-21 14:23:00 +00:00
//state variables
2015-10-23 13:44:11 +00:00
private GuiWindow projectSelectionWindow = null ; //points to the GUI that selected a project for the editor. If any error occurs while creating/loading the project, this is the window we will go back to.
2015-10-27 12:18:22 +01:00
2015-10-22 14:08:31 +00:00
//services
SSDPClient ssdpClient ;
2015-10-27 12:18:22 +01:00
2015-10-20 14:26:58 +00:00
public static void main ( String [ ] args ) {
2015-10-27 12:18:22 +01:00
Application . launch ( args ) ;
}
2015-10-20 14:26:58 +00:00
@Override
public void start ( Stage mainStage ) throws Exception {
2015-10-27 12:18:22 +01:00
2015-10-20 14:26:58 +00:00
//setup logging
2015-10-28 12:56:22 +01:00
CompactLogFormatter formatter = new CompactLogFormatter ( ) ;
2015-10-29 12:52:11 +01:00
LogUtil . setLevel ( " com.coder " , Level . FINEST ) ;
2015-10-28 12:56:22 +01:00
LogUtil . setFormatter ( " com.coder " , formatter ) ;
2015-10-29 12:52:11 +01:00
LogUtil . setLevel ( " zutil " , Level . FINEST ) ;
LogUtil . setFormatter ( " zutil " , formatter ) ;
LogUtil . setGlobalFormatter ( formatter ) ;
2015-10-27 12:18:22 +01:00
//setup GUI elements
this . mainStage = mainStage ;
mainStage . setTitle ( " CoderClient " ) ;
try {
setupSelectServerDialog ( ) ;
setupLoginDialog ( ) ;
setupSelectProjectDialog ( ) ;
setupEditWindow ( ) ;
setupNewProjectDialog ( ) ;
} catch ( IOException e ) {
logger . log ( Level . SEVERE , " could not load all GUI elements " , e ) ;
System . exit ( 1 ) ;
}
2015-10-20 14:26:58 +00:00
//parse program arguments
Map < String , String > params = this . getParameters ( ) . getNamed ( ) ;
for ( String key : params . keySet ( ) ) {
String value = params . get ( key ) ;
if ( key . equals ( " username " ) ) {
2015-10-27 12:18:22 +01:00
loginDialog . setUsername ( value ) ;
2015-10-20 14:26:58 +00:00
} else if ( key . equals ( " password " ) ) {
2015-10-27 12:18:22 +01:00
loginDialog . setPassword ( value . toCharArray ( ) ) ;
2015-10-20 15:52:23 +00:00
} else if ( key . equals ( " url " ) ) {
2015-10-27 12:18:22 +01:00
selectServerDialog . setServerAddress ( value ) ;
2015-10-21 14:23:00 +00:00
} else if ( key . equals ( " port " ) ) {
try {
2015-10-27 12:18:22 +01:00
selectServerDialog . setServerPort ( Integer . parseInt ( value ) ) ;
2015-10-21 14:23:00 +00:00
} catch ( NumberFormatException e ) {
logger . warning ( " port argument to program is not of a integer type. using default port. " ) ;
2015-10-27 12:18:22 +01:00
selectServerDialog . setServerPort ( CoderServer . SERVER_PORT ) ;
2015-10-21 14:23:00 +00:00
}
2015-10-22 14:08:31 +00:00
} else if ( key . equals ( " project " ) ) {
2015-10-27 12:18:22 +01:00
selectProjectDialog . setProject ( value ) ;
2015-10-20 14:26:58 +00:00
}
}
2015-10-27 12:18:22 +01:00
2015-10-22 14:08:31 +00:00
//setup SSDP client
try {
setupSSDPClient ( ) ;
} catch ( IOException e ) {
logger . log ( Level . SEVERE , " could not setup SSDP client " , e ) ;
System . exit ( 1 ) ;
2015-10-21 14:23:00 +00:00
}
2015-10-27 12:18:22 +01:00
2015-10-20 14:26:58 +00:00
//start program logic
2015-10-27 12:18:22 +01:00
selectServerDialog . setServerPort ( CoderServer . SERVER_PORT ) ;
2015-10-20 15:52:23 +00:00
selectServerDialog . showOnStage ( mainStage ) ;
2015-10-27 12:18:22 +01:00
2015-10-09 13:37:45 +00:00
}
2015-10-27 12:18:22 +01:00
2015-10-21 14:23:00 +00:00
private void setupSelectServerDialog ( ) throws IOException {
this . selectServerDialog = new SelectServerDialog ( ) ;
2015-10-20 15:52:23 +00:00
this . selectServerDialog . addSelectProjectDialogListener ( new SelectServerDialogListener ( ) {
@Override
public void willShow ( ) {
2015-10-28 12:58:33 +01:00
logger . fine ( " about to show select server dialog on main stage " ) ;
2015-10-21 14:23:00 +00:00
closeCurrentSession ( ) ;
2015-10-22 14:08:31 +00:00
selectServerDialog . clearServerList ( ) ;
if ( ssdpClient ! = null ) {
ssdpClient . requestService ( " coder:discover " ) ;
2015-10-29 20:40:27 +01:00
for ( StandardSSDPInfo server : ssdpClient . getServices ( " coder:discover " ) )
selectServerDialog . addServerToList ( server . getInetAddress ( ) . getHostAddress ( ) ) ;
2015-10-22 14:08:31 +00:00
} else {
logger . severe ( " could not send a SSDP request since the client is not setup " ) ;
}
2015-10-20 15:52:23 +00:00
}
@Override
2015-10-21 16:13:45 +00:00
public void exit ( ) {
2015-10-21 14:23:00 +00:00
logger . info ( " terminating " ) ;
2015-10-23 13:44:11 +00:00
Platform . exit ( ) ;
2015-10-20 15:52:23 +00:00
}
@Override
2015-10-21 14:23:00 +00:00
public void connect ( String address , int port ) {
2015-10-20 15:52:23 +00:00
//connect session
2015-10-27 12:18:22 +01:00
session = Session . setupConnection ( address , port ) ;
2015-10-20 15:52:23 +00:00
if ( session = = null ) {
2015-10-27 12:18:22 +01:00
logger . warning ( " Could not setup a connection to " + address + " : " + port ) ;
selectServerDialog . setServerAddress ( null ) ;
2015-10-23 13:44:11 +00:00
selectServerDialog . setErrorMessage ( " ERROR: Unable to connect to remote host " ) ;
2015-10-27 12:18:22 +01:00
loginDialog . setErrorMessage ( " " ) ;
2015-10-20 15:52:23 +00:00
selectServerDialog . showOnStage ( mainStage ) ;
2015-10-21 14:23:00 +00:00
} else {
2015-10-23 13:44:11 +00:00
selectServerDialog . setErrorMessage ( " " ) ;
2015-10-21 14:23:00 +00:00
loginDialog . showOnStage ( mainStage ) ;
2015-10-20 15:52:23 +00:00
}
}
} ) ;
2015-10-21 14:23:00 +00:00
}
2015-10-27 12:18:22 +01:00
2015-10-21 14:23:00 +00:00
private void setupLoginDialog ( ) throws IOException {
this . loginDialog = new LoginDialog ( ) ;
2015-10-20 15:52:23 +00:00
this . loginDialog . addLoginDialogListener ( new LoginDialogListener ( ) {
@Override
public void willShow ( ) {
2015-10-28 12:58:33 +01:00
logger . fine ( " about to show login dialog on main stage " ) ;
2015-10-20 15:52:23 +00:00
}
@Override
public void cancel ( ) {
2015-10-28 13:26:27 +01:00
loginDialog . setErrorMessage ( " " ) ;
2015-10-27 12:18:22 +01:00
selectServerDialog . setServerAddress ( null ) ;
2015-10-21 14:23:00 +00:00
selectServerDialog . showOnStage ( mainStage ) ;
2015-10-20 15:52:23 +00:00
}
@Override
2015-10-27 12:18:22 +01:00
public void login ( String username , char [ ] password ) {
2015-10-20 15:52:23 +00:00
//authenticate session
boolean authenticated = session . authenticate ( username , password ) ;
if ( ! authenticated ) {
logger . severe ( " Authentication failed: wrong username or password " ) ;
2015-10-27 12:18:22 +01:00
loginDialog . setPassword ( null ) ;
2015-10-23 13:44:11 +00:00
loginDialog . setErrorMessage ( " Wrong username or password " ) ;
2015-10-22 14:08:31 +00:00
selectServerDialog . showOnStage ( mainStage ) ;
2015-10-23 13:44:11 +00:00
return ;
2015-10-28 12:58:33 +01:00
} else {
2015-10-23 13:44:11 +00:00
loginDialog . setErrorMessage ( " " ) ;
2015-10-22 14:08:31 +00:00
setupSessionListener ( ) ; //resister a message listener to the session
session . start ( ) ; //start receiving traffic from the server
selectProjectDialog . showOnStage ( mainStage ) ;
2015-10-20 15:52:23 +00:00
}
}
2015-10-23 13:44:11 +00:00
} ) ;
}
2015-10-27 12:18:22 +01:00
2015-10-23 13:44:11 +00:00
/ * *
* To be called after a session has been connected and authenticated
* /
private void setupSessionListener ( ) {
if ( session = = null ) {
logger . warning ( " Cannot setup session listeners for null instance. ignoring call. " ) ;
return ;
}
if ( ! session . isAuthenticated ( ) ) {
logger . warning ( " Cannot setup session listeners for a non-authenticated session. ignoring call. " ) ;
return ;
}
2015-10-28 12:58:33 +01:00
// create a guard for when the session is closed
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
logger . fine ( " starting a session guard " ) ;
while ( true ) {
if ( session = = null | | ! session . isConnected ( ) ) {
logger . fine ( " session guard: no connection " ) ;
Platform . runLater ( new Runnable ( ) {
@Override
public void run ( ) {
selectServerDialog . setErrorMessage ( " The current session was disconnected " ) ;
closeCurrentSession ( ) ;
selectServerDialog . showOnStage ( mainStage ) ;
}
} ) ;
break ;
}
Thread . yield ( ) ;
}
logger . fine ( " terminating session guard " ) ;
} } ) . start ( ) ;
2015-10-23 13:44:11 +00:00
session . addCoderMessageReceivedListener ( new CoderMessageReceivedListener ( ) {
@Override
public void projectListRspReceived ( final Map < String , ProjectListData > projectListRsp ) {
logger . fine ( " a ProjectListRsp received " ) ;
Platform . runLater ( new Runnable ( ) {
2015-10-27 12:18:22 +01:00
@Override
public void run ( ) {
for ( String projectName : projectListRsp . keySet ( ) ) {
2015-10-23 13:44:11 +00:00
ProjectListData projectData = projectListRsp . get ( projectName ) ;
selectProjectDialog . addProjectToList ( projectName , projectData ) ;
}
2015-10-27 12:18:22 +01:00
}
2015-10-23 13:44:11 +00:00
} ) ;
}
@Override
public void projectRspReceived ( final ProjectRspMsg projectRspMsg ) {
logger . fine ( " a ProjectRspMsg received " ) ;
Platform . runLater ( new Runnable ( ) {
2015-10-27 12:18:22 +01:00
@Override
public void run ( ) {
if ( projectRspMsg . error ! = null ) {
2015-10-23 13:44:11 +00:00
logger . severe ( " Server responded on the project request with the following error message: " + projectRspMsg . error ) ;
2015-10-27 12:18:22 +01:00
selectProjectDialog . setProject ( null ) ;
2015-10-23 13:44:11 +00:00
if ( projectSelectionWindow ! = null ) {
projectSelectionWindow . setErrorMessage ( " ERROR: " + projectRspMsg . error ) ;
projectSelectionWindow . showOnStage ( mainStage ) ;
return ;
} else {
2015-10-27 12:18:22 +01:00
selectProjectDialog . setErrorMessage ( " ERROR: " + projectRspMsg . error ) ;
selectProjectDialog . showOnStage ( mainStage ) ;
2015-10-23 13:44:11 +00:00
return ;
}
} else {
if ( projectSelectionWindow ! = null ) {
projectSelectionWindow . setErrorMessage ( " " ) ;
}
2015-11-02 16:55:48 +01:00
Properties projectConfig = projectRspMsg . config ;
2015-10-27 12:18:22 +01:00
String projectDescription = projectRspMsg . description ;
List < String > projectFileList = projectRspMsg . fileList ;
String projectName = projectRspMsg . name ;
String projectType = projectRspMsg . type ;
2015-10-23 13:44:11 +00:00
//TODO: handle msg
}
2015-10-27 12:18:22 +01:00
}
2015-10-23 13:44:11 +00:00
} ) ;
}
@Override
public void projectTypeRspReceived ( final Map < String , ConfigData > projectTypeRsp ) {
logger . fine ( " a ProjectTypeRspMsg received " ) ;
Platform . runLater ( new Runnable ( ) {
2015-10-27 12:18:22 +01:00
@Override
public void run ( ) {
for ( String typeName : projectTypeRsp . keySet ( ) ) {
ConfigData typeData = projectTypeRsp . get ( typeName ) ;
newProjectDialog . addProjectTypeToList ( typeName , typeData ) ;
}
}
2015-10-21 14:23:00 +00:00
} ) ;
}
2015-10-20 15:52:23 +00:00
} ) ;
2015-10-21 14:23:00 +00:00
}
2015-10-27 12:18:22 +01:00
2015-10-21 14:23:00 +00:00
private void setupSelectProjectDialog ( ) throws IOException {
this . selectProjectDialog = new SelectProjectDialog ( ) ;
2015-10-20 14:26:58 +00:00
this . selectProjectDialog . addSelectProjectDialogListener ( new SelectProjectDialogListener ( ) {
@Override
public void willShow ( ) {
2015-10-28 12:58:33 +01:00
logger . fine ( " about to show select project dialog on main stage " ) ;
2015-10-20 14:26:58 +00:00
selectProjectDialog . clearProjectList ( ) ;
2015-10-27 12:18:22 +01:00
if ( ! selectProjectDialog . isProjectSelected ( ) ) {
2015-10-22 14:08:31 +00:00
sendProjectListReq ( ) ;
}
2015-10-21 14:23:00 +00:00
}
@Override
2015-10-22 14:08:31 +00:00
public void open ( String selectedProjectName ) {
2015-10-23 13:44:11 +00:00
projectSelectionWindow = selectProjectDialog ;
2015-10-21 14:23:00 +00:00
editorWindow . showOnStage ( mainStage ) ;
}
@Override
public void newProject ( ) {
2015-10-27 12:18:22 +01:00
selectProjectDialog . setProject ( null ) ;
2015-10-23 13:44:11 +00:00
newProjectDialog . showOnStage ( mainStage ) ;
2015-10-21 14:23:00 +00:00
}
@Override
public void cancel ( ) {
2015-10-28 13:26:27 +01:00
loginDialog . setPassword ( null ) ;
2015-10-27 12:18:22 +01:00
selectServerDialog . setServerAddress ( null ) ;
2015-10-21 14:23:00 +00:00
selectServerDialog . showOnStage ( mainStage ) ;
}
@Override
public void refresh ( ) {
selectProjectDialog . clearProjectList ( ) ;
sendProjectListReq ( ) ;
}
private void sendProjectListReq ( ) {
2015-10-20 14:26:58 +00:00
//send a request for a new list of projects
CoderMessage msg = new CoderMessage ( ) ;
msg . ProjectListReq = new ProjectListReqMsg ( ) ;
try {
session . send ( msg ) ;
} catch ( IOException e ) {
logger . log ( Level . SEVERE , " Unable to send ProjectListReqMsg " , e ) ;
closeCurrentSession ( ) ;
}
}
2015-10-21 14:23:00 +00:00
} ) ;
}
2015-10-27 12:18:22 +01:00
2015-10-23 13:44:11 +00:00
private void setupNewProjectDialog ( ) throws IOException {
this . newProjectDialog = new NewProjectDialog ( ) ;
this . newProjectDialog . addNewProjectDialogListener ( new NewProjectDialogListener ( ) {
@Override
public void willShow ( ) {
2015-10-28 12:58:33 +01:00
logger . fine ( " about to show new project dialog on main stage " ) ;
2015-10-23 13:44:11 +00:00
newProjectDialog . clearProjectTypeList ( ) ;
sendProjectTypeReqMsg ( ) ;
}
@Override
public void create ( String newProjectName , String projectType ) {
projectSelectionWindow = newProjectDialog ;
sendProjectCreateReqMsg ( newProjectName , projectType ) ;
2015-10-27 12:18:22 +01:00
selectProjectDialog . setProject ( newProjectName ) ;
2015-10-23 13:44:11 +00:00
editorWindow . showOnStage ( mainStage ) ;
}
private void sendProjectTypeReqMsg ( ) {
CoderMessage msg = new CoderMessage ( ) ;
msg . ProjectTypeReq = new ProjectTypeReqMsg ( ) ;
try {
session . send ( msg ) ;
} catch ( IOException e ) {
logger . log ( Level . SEVERE , " Unable to send ProjectTypeReq " , e ) ;
closeCurrentSession ( ) ;
}
}
private void sendProjectCreateReqMsg ( String projectName , String projectType ) {
CoderMessage msg = new CoderMessage ( ) ;
msg . ProjectCreateReq = new ProjectCreateReqMsg ( ) ;
msg . ProjectCreateReq . name = projectName ;
msg . ProjectCreateReq . type = projectType ;
try {
session . send ( msg ) ;
} catch ( IOException e ) {
logger . log ( Level . SEVERE , " Unable to send ProjectCreateReq " , e ) ;
closeCurrentSession ( ) ;
}
}
@Override
public void cancel ( ) {
2015-10-27 12:18:22 +01:00
selectProjectDialog . setProject ( null ) ;
2015-10-23 13:44:11 +00:00
selectProjectDialog . showOnStage ( mainStage ) ;
}
} ) ;
}
2015-10-27 12:18:22 +01:00
2015-10-21 14:23:00 +00:00
private void setupEditWindow ( ) throws IOException {
this . editorWindow = new EditorWindow ( ) ;
this . editorWindow . addEditorWindowListener ( new EditorWindowListener ( ) {
2015-10-20 14:26:58 +00:00
@Override
2015-10-21 14:23:00 +00:00
public void willShow ( ) {
2015-10-28 12:58:33 +01:00
logger . fine ( " about to show edit window on main stage " ) ;
2015-10-23 13:44:11 +00:00
sendProjectReqMsg ( ) ;
2015-10-20 14:26:58 +00:00
}
@Override
2015-10-21 14:23:00 +00:00
public void compile ( ) {
2015-10-20 14:26:58 +00:00
//TODO
}
@Override
2015-10-21 14:23:00 +00:00
public void run ( ) {
2015-10-20 15:52:23 +00:00
//TODO
2015-10-20 14:26:58 +00:00
}
2015-10-23 13:44:11 +00:00
private void sendProjectReqMsg ( ) {
2015-10-27 12:18:22 +01:00
if ( ! selectProjectDialog . isProjectSelected ( ) ) {
logger . severe ( " Cannot send a project request when no project is selected " ) ;
return ;
}
2015-10-23 13:44:11 +00:00
CoderMessage msg = new CoderMessage ( ) ;
msg . ProjectReq = new ProjectReqMsg ( ) ;
2015-10-27 12:18:22 +01:00
msg . ProjectReq . name = selectProjectDialog . getSelectedProject ( ) ;
2015-10-23 13:44:11 +00:00
try {
session . send ( msg ) ;
} catch ( IOException e ) {
logger . log ( Level . SEVERE , " Unable to send ProjectReqMsg " , e ) ;
closeCurrentSession ( ) ;
}
}
@Override
public void changeProject ( ) {
2015-10-27 12:18:22 +01:00
selectProjectDialog . setProject ( null ) ;
2015-10-23 13:44:11 +00:00
selectProjectDialog . showOnStage ( mainStage ) ;
}
2015-10-20 14:26:58 +00:00
} ) ;
}
2015-10-27 12:18:22 +01:00
2015-10-22 14:08:31 +00:00
private void setupSSDPClient ( ) throws IOException {
this . ssdpClient = new SSDPClient ( ) ;
ssdpClient . setListener ( new SSDPServiceListener ( ) {
@Override
public void newService ( final StandardSSDPInfo service ) {
if ( selectServerDialog ! = null ) {
Platform . runLater ( new Runnable ( ) {
2015-10-27 12:18:22 +01:00
@Override
public void run ( ) {
2015-10-22 14:08:31 +00:00
String ip = service . getInetAddress ( ) . getHostAddress ( ) ;
selectServerDialog . addServerToList ( ip ) ;
2015-10-27 12:18:22 +01:00
}
2015-10-22 14:08:31 +00:00
} ) ;
2015-10-28 12:56:22 +01:00
} else {
logger . warning ( " New Service found ( " + service . getLocation ( ) + " ) when stage closed. " ) ;
}
2015-10-22 14:08:31 +00:00
}
} ) ;
ssdpClient . start ( ) ;
}
2015-10-27 12:18:22 +01:00
2015-10-20 14:26:58 +00:00
private void closeCurrentSession ( ) {
if ( this . session ! = null ) {
2015-10-21 16:13:45 +00:00
logger . info ( " disconnecting from server " ) ;
2015-10-20 14:26:58 +00:00
session . close ( ) ;
session = null ;
}
}
2015-10-09 13:37:45 +00:00
}