package com.myselia.stem.communication;
import com.myselia.stem.communication.handlers.ComponentHandlerBase;
import com.myselia.stem.communication.states.ConnectedConnectionState;
import com.myselia.stem.communication.states.ConnectionState;
import com.myselia.stem.communication.states.DisconnectedConnectionState;
import com.myselia.stem.communication.states.HandshakeConnectionState;
import com.myselia.stem.communication.states.HttpHandshakeConnectionState;
import com.myselia.stem.communication.states.KickedConnectionState;
public class ConnectionStateContainer {
private ConnectionState connectedState;
private ConnectionState disconnectedState;
private ConnectionState kickedState;
private ConnectionState handshakeState;
public ConnectionStateContainer(StemClientSession session) {
initializeConnectionStates(session);
}
public ConnectionState getConnectedState() {
return connectedState;
}
public void setConnectedState(ConnectionState connectedState) {
this.connectedState = connectedState;
}
public ConnectionState getDisconnectedState() {
return disconnectedState;
}
public void setDisconnectedState(ConnectionState disconnectedState) {
this.disconnectedState = disconnectedState;
}
public ConnectionState getKickedState() {
return kickedState;
}
public void setKickedState(ConnectionState kickedState) {
this.kickedState = kickedState;
}
public ConnectionState getHandshakeState() {
return handshakeState;
}
public void setHandshakeState(ConnectionState handshakeState) {
this.handshakeState = handshakeState;
}
public void setHandlers(ComponentHandlerBase handler) {
connectedState.setHandler(handler);
disconnectedState.setHandler(handler);
kickedState.setHandler(handler);
handshakeState.setHandler(handler);
}
private void initializeConnectionStates(StemClientSession session) {
connectedState = new ConnectedConnectionState();
connectedState.primeConnectionState(session);
disconnectedState = new DisconnectedConnectionState();
disconnectedState.primeConnectionState(session);
kickedState = new KickedConnectionState();
kickedState.primeConnectionState(session);
if (session.isHTTP()) {
handshakeState = new HttpHandshakeConnectionState();
handshakeState.primeConnectionState(session);
} else {
handshakeState = new HandshakeConnectionState();
handshakeState.primeConnectionState(session);
}
}
}