public InMessage(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
/**
* 消息推送实体
*/
public class OutMessage {
private String content;
public OutMessage() {
}
public OutMessage(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}
/**
* Created by baiguantao on 2017/8/4.
* 用户session记录类
*/
public class SocketSessionRegistry{
//this map save every session
//这个集合存储session
private final ConcurrentMap<String, Set<String>> userSessionIds = new ConcurrentHashMap();
private final Object lock = new Object();
public SocketSessionRegistry() {
}
/**
*
* 获取sessionId
* @param user
* @return
*/
public Set<String> getSessionIds(String user) {
Set set = (Set)this.userSessionIds.get(user);
return set != null?set: Collections.emptySet();
}
/**
* register session
* @param user
* @param sessionId
*/
public void registerSessionId(String user, String sessionId) {
Assert.notNull(user, "User must not be null");
Assert.notNull(sessionId, "Session ID must not be null");
Object var3 = this.lock;
synchronized(this.lock) {
Object set = (Set)this.userSessionIds.get(user);
if(set == null) {
set = new CopyOnWriteArraySet();
this.userSessionIds.put(user, (Set<String>) set);
}
// 当最迟登陆的时间和当前时间的年月日不匹配的时候清空session缓存
User userLogin = UserInfo.getUser();
if(userLogin!=null){
if(!DateUtil.format(userLogin.getLastLoginDate(), DatePattern.NORM_DATE_FORMAT).equalsIgnoreCase(DateUtil.format(new Date(), DatePattern.NORM_DATE_FORMAT))){
set = new CopyOnWriteArraySet();
this.userSessionIds.put(user, (Set<String>) set);
}
}
((Set)set).add(sessionId);
}
}
public void unregisterSessionId(String userName, String sessionId) {
Assert.notNull(userName, "User Name must not be null");
Assert.notNull(sessionId, "Session ID must not be null");
Object var3 = this.lock;
synchronized(this.lock) {
Set set = (Set)this.userSessionIds.get(userName);
if(set != null && set.remove(sessionId) && set.isEmpty()) {
this.userSessionIds.remove(userName);
}
}
}
}
/**
* Created by baiguantao on 2017/8/4.
* STOMP监听类
* 用于session注册 以及key值获取
*/
public class STOMPConnectEventListener implements ApplicationListener<SessionConnectEvent> {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ricky-websocket").withSockJS();
}
@Bean
public SocketSessionRegistry SocketSessionRegistry(){
return new SocketSessionRegistry();
}
@Bean
public STOMPConnectEventListener STOMPConnectEventListener(){
return new STOMPConnectEventListener();
}