package com.skyline.electricity.controller;
|
|
import javax.websocket.server.*;
|
import org.springframework.stereotype.*;
|
import java.util.concurrent.atomic.*;
|
import java.util.concurrent.*;
|
import javax.annotation.*;
|
import javax.websocket.*;
|
import java.io.*;
|
import java.util.*;
|
import org.slf4j.*;
|
|
@ServerEndpoint("/ws/asset")
|
@Component
|
public class WebSocketServer
|
{
|
private static Logger log;
|
private static final AtomicInteger OnlineCount;
|
private static CopyOnWriteArraySet<Session> SessionSet;
|
|
@PostConstruct
|
public void init() {
|
// System.out.println("websocket 加载");
|
}
|
|
@OnOpen
|
public void onOpen(final Session session) {
|
WebSocketServer.SessionSet.add(session);
|
final int cnt = WebSocketServer.OnlineCount.incrementAndGet();
|
WebSocketServer.log.info("有连接加入,当前连接数为:{}", (Object)cnt);
|
SendMessage(session, "连接成功");
|
}
|
|
@OnClose
|
public void onClose(final Session session) {
|
WebSocketServer.SessionSet.remove(session);
|
final int cnt = WebSocketServer.OnlineCount.decrementAndGet();
|
WebSocketServer.log.info("有连接关闭,当前连接数为:{}", (Object)cnt);
|
}
|
|
@OnMessage
|
public void onMessage(final String message, final Session session) {
|
WebSocketServer.log.info("来自客户端的消息:{}", (Object)message);
|
SendMessage(session, "收到消息,消息内容:" + message);
|
}
|
|
@OnError
|
public void onError(final Session session, final Throwable error) {
|
WebSocketServer.log.error("发生错误:{},Session ID: {}", (Object)error.getMessage(), (Object)session.getId());
|
error.printStackTrace();
|
}
|
|
public static void SendMessage(final Session session, final String message) {
|
try {
|
session.getBasicRemote().sendText(String.format("%s", message));
|
}
|
catch (IOException e) {
|
WebSocketServer.log.error("发送消息出错:{}", (Object)e.getMessage());
|
e.printStackTrace();
|
}
|
}
|
|
public static void BroadCastInfo(final String message) throws IOException {
|
|
for (final Session session : WebSocketServer.SessionSet) {
|
if (session.isOpen()) {
|
SendMessage(session, message);
|
}
|
}
|
}
|
|
public static void SendMessage(final String message, final String sessionId) throws IOException {
|
Session session = null;
|
|
for (final Session s : WebSocketServer.SessionSet) {
|
if (s.getId().equals(sessionId)) {
|
session = s;
|
break;
|
}
|
}
|
if (session != null) {
|
SendMessage(session, message);
|
}
|
else {
|
WebSocketServer.log.warn("没有找到你指定ID的会话:{}", (Object)sessionId);
|
}
|
}
|
|
static {
|
WebSocketServer.log = LoggerFactory.getLogger((Class)WebSocketServer.class);
|
OnlineCount = new AtomicInteger(0);
|
WebSocketServer.SessionSet = new CopyOnWriteArraySet<Session>();
|
}
|
}
|