Browse Source

Polishing

(cherry picked from commit 7e07f3d)
pull/701/head
Juergen Hoeller 12 years ago
parent
commit
0caeffcd54
  1. 32
      spring-websocket/src/main/java/org/springframework/web/socket/CloseStatus.java
  2. 7
      spring-websocket/src/main/java/org/springframework/web/socket/messaging/SessionConnectEvent.java
  3. 10
      spring-websocket/src/main/java/org/springframework/web/socket/messaging/SessionConnectedEvent.java
  4. 11
      spring-websocket/src/main/java/org/springframework/web/socket/messaging/SessionDisconnectEvent.java

32
spring-websocket/src/main/java/org/springframework/web/socket/CloseStatus.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,16 +16,14 @@
package org.springframework.web.socket; package org.springframework.web.socket;
import org.eclipse.jetty.websocket.api.StatusCode;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
/** /**
* Represents a WebSocket close status code and reason. Status codes in the 1xxx range are * Represents a WebSocket close status code and reason. Status codes in the 1xxx range are
* pre-defined by the protocol. Optionally, a status code may be sent with a reason. * pre-defined by the protocol. Optionally, a status code may be sent with a reason.
* <p> *
* See <a href="https://tools.ietf.org/html/rfc6455#section-7.4.1">RFC 6455, Section 7.4.1 * <p>See <a href="https://tools.ietf.org/html/rfc6455#section-7.4.1">RFC 6455, Section 7.4.1
* "Defined Status Codes"</a>. * "Defined Status Codes"</a>.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
@ -134,17 +132,16 @@ public final class CloseStatus {
*/ */
public static final CloseStatus TLS_HANDSHAKE_FAILURE = new CloseStatus(1015); public static final CloseStatus TLS_HANDSHAKE_FAILURE = new CloseStatus(1015);
/** /**
* A status code for use within the framework the indicate a session has * A status code for use within the framework the indicate a session has
* become unreliable (e.g. timed out while sending a message) and extra * become unreliable (e.g. timed out while sending a message) and extra
* care should be exercised, e.g. avoid sending any further data to the * care should be exercised, e.g. avoid sending any further data to the
* client that may be done during normal shutdown. * client that may be done during normal shutdown.
* @since 4.0.3
*/ */
public static final CloseStatus SESSION_NOT_RELIABLE = new CloseStatus(4500); public static final CloseStatus SESSION_NOT_RELIABLE = new CloseStatus(4500);
private final int code; private final int code;
private final String reason; private final String reason;
@ -164,39 +161,39 @@ public final class CloseStatus {
* @param reason the reason * @param reason the reason
*/ */
public CloseStatus(int code, String reason) { public CloseStatus(int code, String reason) {
Assert.isTrue((code >= 1000 && code < 5000), "Invalid code"); Assert.isTrue((code >= 1000 && code < 5000), "Invalid status code");
this.code = code; this.code = code;
this.reason = reason; this.reason = reason;
} }
/** /**
* Returns the status code. * Return the status code.
*/ */
public int getCode() { public int getCode() {
return this.code; return this.code;
} }
/** /**
* Returns the reason or {@code null}. * Return the reason, or {@code null} if none.
*/ */
public String getReason() { public String getReason() {
return this.reason; return this.reason;
} }
/** /**
* Crate a new {@link CloseStatus} from this one with the specified reason. * Create a new {@link CloseStatus} from this one with the specified reason.
* @param reason the reason * @param reason the reason
* @return a new {@link StatusCode} instance * @return a new {@link CloseStatus} instance
*/ */
public CloseStatus withReason(String reason) { public CloseStatus withReason(String reason) {
Assert.hasText(reason, "Reason must not be empty"); Assert.hasText(reason, "Reason must not be empty");
return new CloseStatus(this.code, reason); return new CloseStatus(this.code, reason);
} }
@Override
public int hashCode() { public boolean equalsCode(CloseStatus other) {
return this.code * 29 + ObjectUtils.nullSafeHashCode(this.reason); return (this.code == other.code);
} }
@Override @Override
@ -211,8 +208,9 @@ public final class CloseStatus {
return (this.code == otherStatus.code && ObjectUtils.nullSafeEquals(this.reason, otherStatus.reason)); return (this.code == otherStatus.code && ObjectUtils.nullSafeEquals(this.reason, otherStatus.reason));
} }
public boolean equalsCode(CloseStatus other) { @Override
return this.code == other.code; public int hashCode() {
return this.code * 29 + ObjectUtils.nullSafeHashCode(this.reason);
} }
@Override @Override

7
spring-websocket/src/main/java/org/springframework/web/socket/messaging/SessionConnectEvent.java

@ -16,7 +16,6 @@
package org.springframework.web.socket.messaging; package org.springframework.web.socket.messaging;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
/** /**
@ -33,7 +32,11 @@ import org.springframework.messaging.Message;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class SessionConnectEvent extends AbstractSubProtocolEvent { public class SessionConnectEvent extends AbstractSubProtocolEvent {
/**
* Create a new SessionConnectEvent.
* @param source the component that published the event (never {@code null})
* @param message the connect message
*/
public SessionConnectEvent(Object source, Message<byte[]> message) { public SessionConnectEvent(Object source, Message<byte[]> message) {
super(source, message); super(source, message);
} }

10
spring-websocket/src/main/java/org/springframework/web/socket/messaging/SessionConnectedEvent.java

@ -16,13 +16,11 @@
package org.springframework.web.socket.messaging; package org.springframework.web.socket.messaging;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
/** /**
* A connected event represents the server response to a client's connect request. * A connected event represents the server response to a client's connect request.
* See {@link org.springframework.web.socket.messaging.SessionConnectEvent * See {@link org.springframework.web.socket.messaging.SessionConnectEvent}.
* SessionConnectEvent}.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @since 4.0.3 * @since 4.0.3
@ -30,7 +28,11 @@ import org.springframework.messaging.Message;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class SessionConnectedEvent extends AbstractSubProtocolEvent { public class SessionConnectedEvent extends AbstractSubProtocolEvent {
/**
* Create a new SessionConnectedEvent.
* @param source the component that published the event (never {@code null})
* @param message the connected message
*/
public SessionConnectedEvent(Object source, Message<byte[]> message) { public SessionConnectedEvent(Object source, Message<byte[]> message) {
super(source, message); super(source, message);
} }

11
spring-websocket/src/main/java/org/springframework/web/socket/messaging/SessionDisconnectEvent.java

@ -16,7 +16,6 @@
package org.springframework.web.socket.messaging; package org.springframework.web.socket.messaging;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.CloseStatus;
@ -26,7 +25,7 @@ import org.springframework.web.socket.CloseStatus;
* Protocol (e.g. STOMP) as the WebSocket sub-protocol is closed. * Protocol (e.g. STOMP) as the WebSocket sub-protocol is closed.
* *
* <p>Note that this event may be raised more than once for a single session and * <p>Note that this event may be raised more than once for a single session and
* therefore event consumers should be idempotent and ignore a duplicate event.. * therefore event consumers should be idempotent and ignore a duplicate event.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @since 4.0.3 * @since 4.0.3
@ -40,7 +39,11 @@ public class SessionDisconnectEvent extends AbstractSubProtocolEvent {
/** /**
* Create a new event. * Create a new SessionDisconnectEvent.
* @param source the component that published the event (never {@code null})
* @param message the message
* @param sessionId the disconnect message
* @param closeStatus the status object
*/ */
public SessionDisconnectEvent(Object source, Message<byte[]> message, String sessionId, CloseStatus closeStatus) { public SessionDisconnectEvent(Object source, Message<byte[]> message, String sessionId, CloseStatus closeStatus) {
super(source, message); super(source, message);
@ -49,6 +52,7 @@ public class SessionDisconnectEvent extends AbstractSubProtocolEvent {
this.status = closeStatus; this.status = closeStatus;
} }
/** /**
* Return the session id. * Return the session id.
*/ */
@ -68,4 +72,5 @@ public class SessionDisconnectEvent extends AbstractSubProtocolEvent {
return "SessionDisconnectEvent[sessionId=" + this.sessionId + ", " + return "SessionDisconnectEvent[sessionId=" + this.sessionId + ", " +
(this.status != null ? this.status.toString() : "closeStatus=null") + "]"; (this.status != null ? this.status.toString() : "closeStatus=null") + "]";
} }
} }

Loading…
Cancel
Save