package cn.flightfeather.supervision.websocket
|
|
import org.java_websocket.WebSocket
|
import org.java_websocket.drafts.Draft
|
import org.java_websocket.exceptions.InvalidDataException
|
import org.java_websocket.framing.CloseFrame
|
import org.java_websocket.handshake.ClientHandshake
|
import org.java_websocket.handshake.ServerHandshakeBuilder
|
import org.java_websocket.server.WebSocketServer
|
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.stereotype.Component
|
import java.net.InetSocketAddress
|
|
/**
|
* 虚拟聊天室服务端
|
* @author riku
|
* Date: 2019/11/11
|
*/
|
@Component
|
class VMRoomWebSocketServer(port: Int = 9008) : WebSocketServer(InetSocketAddress(port)) {
|
|
@Autowired
|
lateinit var processor: Processor
|
|
override fun onWebsocketHandshakeReceivedAsServer(conn: WebSocket?, draft: Draft?, request: ClientHandshake?): ServerHandshakeBuilder {
|
//请求判断,若header没有cookie项,则直接拒绝连接
|
if (request?.hasFieldValue("Cookie") == false) {
|
throw InvalidDataException(CloseFrame.POLICY_VALIDATION, "Not accepted!")
|
}
|
return super.onWebsocketHandshakeReceivedAsServer(conn, draft, request)
|
}
|
|
override fun onOpen(p0: WebSocket?, p1: ClientHandshake?) {
|
processor.register(this, p0, p1)
|
processor.startTimingServerMsg(this, p0)
|
}
|
|
override fun onMessage(p0: WebSocket?, p1: String?) {
|
//根据通道绑定的会议室,将其发送的信息广播给在该会议室的所有人
|
val msg = processor.parseToWebSocketMsg(p1, MeetingMsgVo::class.java)
|
processor.reply(p0, msg)
|
processor.broadcast(this, p0, msg, MsgType.MsgReceive)
|
processor.save(p0, msg.msgVoList)
|
|
// processor.callNameJudgement(this, p0, msg)
|
}
|
|
override fun onStart() {
|
|
}
|
|
override fun onError(p0: WebSocket?, p1: Exception?) {
|
|
}
|
|
override fun onClose(p0: WebSocket?, p1: Int, p2: String?, p3: Boolean) {
|
//todo 广播退出会议室的用户等信息
|
processor.exit(p0)
|
processor.stopTimingServerMsg(this, p0)
|
}
|
|
}
|