package com.fzzy.gateway.hx2023.websocket;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Component;
|
|
import javax.websocket.*;
|
import javax.websocket.server.PathParam;
|
import javax.websocket.server.ServerEndpoint;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
*
|
*/
|
@Slf4j
|
@Component
|
@ServerEndpoint(value = "/mqtt")
|
public class WebSocketMqtt {
|
|
private static Map<String, Session> sessionPool = new HashMap<>();
|
|
// 与某个客户端的连接会话,需要通过它来给客户端发送数据
|
private Session session;
|
private String key;
|
|
|
@OnOpen
|
public void onOpen(Session session,
|
@PathParam("keepalive") String keepalive,
|
@PathParam("clientId") String clientId,
|
@PathParam("protocolId") String protocolId,
|
@PathParam("protocolVersion") String protocolVersion,
|
@PathParam("clean") String clean,
|
@PathParam("reconnectPeriod") String reconnectPeriod,
|
@PathParam("reconnectTimeout") String reconnectTimeout
|
) throws Exception {
|
|
this.session = session;
|
|
key = clientId;
|
|
sessionPool.put(key, session);
|
|
|
log.info("new webSocket,clientId={}", key);
|
}
|
|
@OnClose
|
public void onClose() {
|
|
sessionPool.remove(key);
|
|
log.info("WebSocket连接关闭={}", key);
|
|
}
|
|
/**
|
* 收到前端发送的信息
|
*
|
* @param message
|
* @param session
|
*/
|
@OnMessage
|
public void onMessage(String message, Session session) {
|
|
log.info("来自客户端信息:\n" + message);
|
}
|
|
@OnError
|
public void onError(Session session, Throwable error) {
|
log.error("发生错误");
|
|
sessionPool.remove(key);
|
|
error.printStackTrace();
|
}
|
|
}
|