package com.fzzy.gateway.hx2023.websocket;
|
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
|
import javax.websocket.*;
|
import javax.websocket.server.PathParam;
|
import javax.websocket.server.ServerEndpoint;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
|
@Component
|
@CrossOrigin
|
@Service
|
@ServerEndpoint(value = "/mqtt")
|
public class SocketService {
|
|
/**
|
* 用来存放每个客户端对应的MyWebSocket对象。
|
**/
|
private static CopyOnWriteArraySet<SocketService> socketSet = new CopyOnWriteArraySet<>();
|
/**
|
* 与某个客户端的连接会话,需要通过它来给客户端发送数据
|
**/
|
private Session session;
|
/**
|
* 用户名称
|
**/
|
private String nickname;
|
/**
|
* 用来记录sessionId和该session进行绑定
|
**/
|
private static Map<String,Session> map = new HashMap<String, Session>();
|
|
/**
|
* 连接建立成功调用的方法
|
*/
|
@OnOpen
|
public void onOpen(Session session,@PathParam("nickname") String nickname) {
|
this.session = session;
|
this.nickname=nickname;
|
|
map.put(nickname, session);
|
socketSet.add(this);
|
|
System.out.println("有新连接加入:"+nickname+",当前在线人数为" + socketSet.size());
|
}
|
|
/**
|
* 连接关闭调用的方法
|
*/
|
@OnClose
|
public void onClose() {
|
socketSet.remove(this);
|
List<String> nickname = this.session.getRequestParameterMap().get("nickname");
|
for(String nick:nickname) {
|
map.remove(nick);
|
}
|
System.out.println("有一连接关闭!当前在线人数为" + socketSet.size());
|
}
|
|
/**
|
* 收到客户端消息后调用的方法
|
*/
|
@OnMessage
|
public void onMessage(String message, Session session,@PathParam("nickname") String nickname) {
|
System.out.println("来自客户端的消息-->"+nickname+": " + message);
|
//将mqtt发送过来的数据返回给前端
|
try {
|
// JSONObject parse = JSONObject.parse(message);
|
// Map<String,Object> valuesMap = (Map<String, Object>) parse.getByPath("values");
|
// String tag1 = valuesMap.get("tag1").toString();
|
// String replace = tag1.replace("\r\n", "");
|
// String substring = replace.substring(replace.indexOf(":") + 1).trim().replace(" ",":");
|
// String tag2 = valuesMap.get("tag2").toString();
|
// String substring1=substring+"tag2:"+tag2;
|
// String result="{"+substring1+"}";
|
// //发送给前端,用作页面渲染
|
// Session fromSession = map.get(nickname);
|
// fromSession.getAsyncRemote().sendText(result);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 发生错误时调用
|
*/
|
@OnError
|
public void onError(Session session, Throwable error) {
|
System.out.println("发生错误");
|
error.printStackTrace();
|
}
|
|
|
}
|