107 lines
2.7 KiB
Java
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();
|
|
}
|
|
}
|
|
|
|
}
|