package cn.flightfeather.supervision.socket.config
|
|
import cn.flightfeather.supervision.socket.WsSessionManager
|
import cn.flightfeather.supervision.socket.processor.WebSocketReceiver
|
import org.springframework.stereotype.Component
|
import org.springframework.web.socket.CloseStatus
|
import org.springframework.web.socket.TextMessage
|
import org.springframework.web.socket.WebSocketSession
|
import org.springframework.web.socket.handler.TextWebSocketHandler
|
|
/**
|
*
|
* @date 2024/7/19
|
* @author feiyu02
|
*/
|
@Component
|
class SPTextWebSocketHandler(private val webSocketReceiver: WebSocketReceiver) : TextWebSocketHandler() {
|
/**
|
* socket 建立成功事件
|
*
|
* @param session
|
* @throws Exception
|
*/
|
@Throws(Exception::class)
|
override fun afterConnectionEstablished(session: WebSocketSession) {
|
val sessionId = session.attributes["session_id"]
|
if (sessionId != null) {
|
// 用户连接成功,放入在线用户缓存
|
WsSessionManager.add(sessionId.toString(), session)
|
} else {
|
throw RuntimeException("用户登录已经失效!")
|
}
|
}
|
|
/**
|
* 接收消息事件
|
*
|
* @param session
|
* @param message
|
* @throws Exception
|
*/
|
@Throws(Exception::class)
|
override fun handleTextMessage(session: WebSocketSession, message: TextMessage) {
|
// 获得客户端传来的消息
|
val payload = message.payload
|
val sessionId = session.attributes["session_id"]
|
println("server 接收到 $sessionId 发送的 $payload")
|
webSocketReceiver.onReceiveMsg(payload)
|
// session.sendMessage(TextMessage("server 发送给 " + sessionId + " 消息 " + payload + " " + LocalDateTime.now()
|
// .toString()))
|
}
|
|
/**
|
* socket 断开连接时
|
*
|
* @param session
|
* @param status
|
* @throws Exception
|
*/
|
@Throws(Exception::class)
|
override fun afterConnectionClosed(session: WebSocketSession, status: CloseStatus) {
|
val sessionId = session.attributes["session_id"]
|
if (sessionId != null) {
|
// 用户退出,移除缓存
|
WsSessionManager.remove(sessionId.toString())
|
}
|
}
|
}
|