/
SocketEvent.java
143 lines (125 loc) · 3.61 KB
/
SocketEvent.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
* Copyright 2017 OmniFaces
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package org.omnifaces.cdi.push;
import static java.lang.String.format;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.io.Serializable;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.Objects;
import javax.enterprise.event.Observes;
import javax.inject.Qualifier;
import javax.websocket.CloseReason.CloseCode;
/**
* <p>
* This web socket event will be fired by {@link SocketSessionManager} when a new socket has been
* <code>@</code>{@link Opened} or <code>@</code>{@link Closed}. An application scoped CDI bean can
* <code>@</code>{@link Observes} them.
* <p>
* For detailed usage instructions, see {@link Socket} javadoc.
*
* @author Bauke Scholtz
* @see Socket
* @since 2.3
*/
public final class SocketEvent implements Serializable {
private static final long serialVersionUID = 1L;
private final String channel;
private final Serializable user;
private final CloseCode code;
SocketEvent(String channel, Serializable user, CloseCode code) {
this.channel = channel;
this.user = user;
this.code = code;
}
/**
* Returns the <code><o:socket channel></code>.
* @return The web socket channel name.
*/
public String getChannel() {
return channel;
}
/**
* Returns the <code><o:socket user></code>, if any.
* @param <S> The generic type of the user identifier.
* @return The web socket user identifier, if any.
* @throws ClassCastException When <code>S</code> is of wrong type.
*/
@SuppressWarnings("unchecked")
public <S extends Serializable> S getUser() {
return (S) user;
}
/**
* Returns the close code.
* If this returns <code>null</code>, then it was {@link Opened}.
* If this returns non-<code>null</code>, then it was {@link Closed}.
* @return The close code.
*/
public CloseCode getCloseCode() {
return code;
}
@Override
public int hashCode() {
return super.hashCode() + Objects.hash(channel, user, code);
}
@Override
public boolean equals(Object object) {
if (object == null || getClass() != object.getClass()) {
return false;
}
SocketEvent other = (SocketEvent) object;
return Objects.equals(channel, other.channel)
&& Objects.equals(user, other.user)
&& Objects.equals(code, other.code);
}
@Override
public String toString() {
return format("SocketEvent[channel=%s, user=%s, closeCode=%s]", channel, user, code);
}
/**
* <p>
* Indicates that a socket has opened.
* <p>
* For detailed usage instructions, see {@link Socket} javadoc.
*
* @author Bauke Scholtz
* @see Socket
* @since 2.3
*/
@Qualifier
@Target(PARAMETER)
@Retention(RUNTIME)
@Documented
public @interface Opened {
//
}
/**
* <p>
* Indicates that a socket has closed.
* <p>
* For detailed usage instructions, see {@link Socket} javadoc.
*
* @author Bauke Scholtz
* @see Socket
* @since 2.3
*/
@Qualifier
@Target(PARAMETER)
@Retention(RUNTIME)
@Documented
public @interface Closed {
//
}
}