coder-client/src/com/coder/client/session/SessionHandler.java
dcollin 5a9e709ae8 Refactoring: Moving GUI program logic from CoderClient to each controller class
-Removing the Session Guard
-Adding a SessionHandler
-Adding a ProjectHandler
2015-11-11 16:16:34 +01:00

107 lines
2.7 KiB
Java

package com.coder.client.session;
import java.io.IOException;
import java.util.HashSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import zutil.log.LogUtil;
import com.coder.server.message.CoderMessage;
public class SessionHandler{
public static final Logger logger = LogUtil.getLogger();
private Session session;
private HashSet<SessionListener> sessionListeners = new HashSet<SessionListener>();
private HashSet<ProjectMessageListener> messageListeners = new HashSet<ProjectMessageListener>();
public boolean setupConnection(String url, int port){
if(session != null && session.isConnected()){
session.close();
}
session = Session.setupConnection(url, port);
if(session != null){
for(ProjectMessageListener listener : messageListeners){
session.addMessageListener(listener);
}
for(SessionListener listener : sessionListeners){
listener.sessionConnectionSuccess();
}
return true;
}else{
for(SessionListener listener : sessionListeners){
listener.sessionConnectionFailure();
}
return false;
}
}
public boolean authenticateSession(String username, char[] clearTextPassword){
if(session == null){
return false;
}else{
boolean success = session.authenticate(username, clearTextPassword);
if(success){
for(SessionListener listener : sessionListeners){
listener.sessionAuthenticationSuccess();
}
session.start();
return true;
}else{
for(SessionListener listener : sessionListeners){
listener.sessionAuthenticationFailure();
}
return false;
}
}
}
public boolean sendMessage(CoderMessage msg){
logger.fine("sending a message");
if(session != null){
try {
session.send(msg);
} catch (IOException e) {
logger.log(Level.SEVERE, "unable to send message", e);
closeCurrentSession(true);
return false;
}
logger.fine("successfully sent the meessage");
return true;
}
return false;
}
public void closeCurrentSession(boolean retry){
if(session != null){
logger.info("closing session to server");
session.close();
session = null;
for(SessionListener listener : sessionListeners){
listener.sessionDisconnected(retry);
}
}else{
logger.fine("cannot close current session: session already terminated");
}
}
public void addSessionListener(SessionListener listener){
this.sessionListeners.add(listener);
}
public void addMessageListener(ProjectMessageListener listener) {
messageListeners.add(listener);
if(session != null){
session.addMessageListener(listener);
}
}
public void authenticationCancel() {
closeCurrentSession(false);
for(SessionListener listener : sessionListeners){
listener.sessionAuthenticationCancel();
}
}
}