DefaultInvocationContext.java
package sprout.server.websocket;
import sprout.mvc.http.HttpRequest;
import sprout.server.websocket.message.MessagePayload;
import javax.annotation.Nullable;
import java.io.InputStream;
import java.util.Map;
public class DefaultInvocationContext implements InvocationContext{
private final LifecyclePhase phase;
private final HttpRequest<?> handshakeRequest;
private final WebSocketSession session;
private final Map<String, String> pathVars;
private final Map<String, String> queryParams;
private final MessagePayload messagePayload;
private final InputStream inputStream;
private final boolean isFin;
private final Throwable error;
private final CloseCode closeCode;
private final WebSocketFrame frame;
public DefaultInvocationContext(LifecyclePhase phase, HttpRequest<?> handshakeRequest, WebSocketSession session, Map<String, String> pathVars, Map<String, String> queryParams, MessagePayload messagePayload, InputStream inputStream, boolean isFin, Throwable error, CloseCode closeCode, WebSocketFrame frame) {
this.phase = phase;
this.handshakeRequest = handshakeRequest;
this.session = session;
this.pathVars = pathVars;
this.queryParams = queryParams;
this.messagePayload = messagePayload;
this.inputStream = inputStream;
this.isFin = isFin;
this.error = error;
this.closeCode = closeCode;
this.frame = frame;
}
// @OnOpen용 생성자
public DefaultInvocationContext(HttpRequest<?> handshakeRequest, WebSocketSession session, Map<String, String> pathVars) {
this(LifecyclePhase.OPEN, handshakeRequest, session, pathVars,
handshakeRequest.getQueryParams(), null, null, false, null, null, null);
}
// @MessageMapping용 생성자
public DefaultInvocationContext(WebSocketSession session, Map<String, String> pathVars, MessagePayload payload, WebSocketFrame webSocketFrame) {
this(LifecyclePhase.MESSAGE, session.getHandshakeRequest(), session, pathVars,
session.getHandshakeRequest().getQueryParams(), payload, webSocketFrame.getPayloadStream(), webSocketFrame.isFin(), null, null, webSocketFrame);
}
// @OnError용 생성자
public DefaultInvocationContext(WebSocketSession session, Map<String, String> pathVars, Throwable error) {
this(LifecyclePhase.ERROR, session.getHandshakeRequest(), session, pathVars,
session.getHandshakeRequest().getQueryParams(), null, null, false, error, null, null);
}
// @OnClose용 생성자
public DefaultInvocationContext(WebSocketSession session, Map<String, String> pathVars, CloseCode closeCode) {
this(LifecyclePhase.CLOSE, session.getHandshakeRequest(), session, pathVars,
session.getHandshakeRequest().getQueryParams(), null, null, false, null, closeCode, null);
}
@Override
public LifecyclePhase phase() { return phase; }
@Override
public HttpRequest<?> handshakeRequest() { return handshakeRequest; }
@Override
public WebSocketSession session() { return session; }
@Override
public Map<String, String> pathVars() { return pathVars; }
@Override
public Map<String, String> queryParams() { return queryParams; }
@Override
public boolean isFin() {
return isFin;
}
@Override
public @Nullable Throwable error() { return error; }
@Override
public @Nullable CloseCode getCloseCode() { return closeCode; }
@Override
public @Nullable MessagePayload getMessagePayload() { return messagePayload; }
@Override
public @Nullable InputStream getInputStream() { return inputStream; }
@Override
public @Nullable WebSocketFrame getFrame() { return frame; }
}