org.frameworkset.web.socket.handler.jetty.JettyWebSocketSession Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bboss-websocket Show documentation
Show all versions of bboss-websocket Show documentation
bboss is a j2ee framework include aop/ioc,mvc,persistent,taglib,rpc,event ,bean-xml serializable and so on.http://www.bbossgroups.com
package org.frameworkset.web.socket.handler.jetty;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URI;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig;
import org.frameworkset.http.HttpHeaders;
import org.frameworkset.util.ObjectUtils;
import org.frameworkset.web.socket.endpoint.AbstractWebSocketSession;
import org.frameworkset.web.socket.inf.BinaryMessage;
import org.frameworkset.web.socket.inf.CloseStatus;
import org.frameworkset.web.socket.inf.PingMessage;
import org.frameworkset.web.socket.inf.PongMessage;
import org.frameworkset.web.socket.inf.TextMessage;
import org.frameworkset.web.socket.inf.WebSocketExtension;
import org.frameworkset.web.socket.inf.WebSocketSession;
/**
* A {@link WebSocketSession} for use with the Jetty 9 WebSocket API.
*
* @author Phillip Webb
* @author Rossen Stoyanchev
* @since 4.0
*/
public class JettyWebSocketSession extends AbstractWebSocketSession {
private String id;
private URI uri;
private HttpHeaders headers;
private String acceptedProtocol;
private List extensions;
private Principal user;
/**
* Create a new {@link JettyWebSocketSession} instance.
*
* @param attributes attributes from the HTTP handshake to associate with the WebSocket session
*/
public JettyWebSocketSession(Map attributes) {
this(attributes, null);
}
/**
* Create a new {@link JettyWebSocketSession} instance associated with the given user.
*
* @param attributes attributes from the HTTP handshake to associate with the WebSocket
* session; the provided attributes are copied, the original map is not used.
* @param user the user associated with the session; if {@code null} we'll fallback on the user
* available via {@link org.eclipse.jetty.websocket.api.Session#getUpgradeRequest()}
*/
public JettyWebSocketSession(Map attributes, Principal user) {
super(attributes);
this.user = user;
}
@Override
public String getId() {
checkNativeSessionInitialized();
return this.id;
}
@Override
public URI getUri() {
checkNativeSessionInitialized();
return this.uri;
}
@Override
public HttpHeaders getHandshakeHeaders() {
checkNativeSessionInitialized();
return this.headers;
}
@Override
public String getAcceptedProtocol() {
checkNativeSessionInitialized();
return this.acceptedProtocol;
}
@Override
public List getExtensions() {
checkNativeSessionInitialized();
return this.extensions;
}
@Override
public Principal getPrincipal() {
return this.user;
}
@Override
public InetSocketAddress getLocalAddress() {
checkNativeSessionInitialized();
return getNativeSession().getLocalAddress();
}
@Override
public InetSocketAddress getRemoteAddress() {
checkNativeSessionInitialized();
return getNativeSession().getRemoteAddress();
}
@Override
public void setTextMessageSizeLimit(int messageSizeLimit) {
checkNativeSessionInitialized();
getNativeSession().getPolicy().setMaxTextMessageSize(messageSizeLimit);
}
@Override
public int getTextMessageSizeLimit() {
checkNativeSessionInitialized();
return getNativeSession().getPolicy().getMaxTextMessageSize();
}
@Override
public void setBinaryMessageSizeLimit(int messageSizeLimit) {
checkNativeSessionInitialized();
getNativeSession().getPolicy().setMaxBinaryMessageSize(messageSizeLimit);
}
@Override
public int getBinaryMessageSizeLimit() {
checkNativeSessionInitialized();
return getNativeSession().getPolicy().getMaxBinaryMessageSize();
}
@Override
public boolean isOpen() {
return ((getNativeSession() != null) && getNativeSession().isOpen());
}
@Override
public void initializeNativeSession(Session session) {
super.initializeNativeSession(session);
this.id = ObjectUtils.getIdentityHexString(getNativeSession());
this.uri = session.getUpgradeRequest().getRequestURI();
this.headers = new HttpHeaders();
this.headers.putAll(getNativeSession().getUpgradeRequest().getHeaders());
this.headers = HttpHeaders.readOnlyHttpHeaders(headers);
this.acceptedProtocol = session.getUpgradeResponse().getAcceptedSubProtocol();
List source = getNativeSession().getUpgradeResponse().getExtensions();
this.extensions = new ArrayList(source.size());
for (ExtensionConfig ec : source) {
this.extensions.add(new WebSocketExtension(ec.getName(), ec.getParameters()));
}
if (this.user == null) {
this.user = session.getUpgradeRequest().getUserPrincipal();
}
}
@Override
protected void sendTextMessage(TextMessage message) throws IOException {
getNativeSession().getRemote().sendString(message.getPayload());
}
@Override
protected void sendBinaryMessage(BinaryMessage message) throws IOException {
getNativeSession().getRemote().sendBytes(message.getPayload());
}
@Override
protected void sendPingMessage(PingMessage message) throws IOException {
getNativeSession().getRemote().sendPing(message.getPayload());
}
@Override
protected void sendPongMessage(PongMessage message) throws IOException {
getNativeSession().getRemote().sendPong(message.getPayload());
}
@Override
protected void closeInternal(CloseStatus status) throws IOException {
getNativeSession().close(status.getCode(), status.getReason());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy