首页>代码>基于springboot和websocket简单的聊天室>/chat-room-Strong-master/src/main/java/top/wonderheng/chatroom/service/WebSocket.java
package top.wonderheng.chatroom.service; import top.wonderheng.chatroom.vo.ContentVo; import top.wonderheng.chatroom.vo.Message; import com.google.gson.Gson; import org.springframework.stereotype.Component; import top.wonderheng.chatroom.vo.RandomCar; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.net.URLDecoder; import java.util.*; import java.util.concurrent.CopyOnWriteArraySet; @Component @ServerEndpoint("/webSocket") public class WebSocket { private Session session; private String username; private static CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>(); private static Map<String, String> map = new HashMap<>(); private static RandomCar randomCar = new RandomCar(); @OnOpen public void onOpen(Session session) { this.session = session; webSockets.add(this); //获取用户名 String s = session.getQueryString(); String urlUsername = s.split("=")[1]; try { username = URLDecoder.decode(urlUsername, "UTF-8"); } catch (Exception e) { e.printStackTrace(); } //把SessionID和用户名放进集合里面 map.put(session.getId(), username); System.out.println("有新的连接,总数:" + webSockets.size() + " sessionId:" + session.getId() + " " + username); String content = "\"" + username + "\" 开着超级酷炫的 \"" + randomCar.getMap() + "\" 进入了聊天室!"; Message message = new Message(content, map); send(message.toJson()); } @OnClose public void onClose() { webSockets.remove(this); map.remove(session.getId()); System.out.println("有新的断开,总数:" + webSockets.size() + " sessionId:" + session.getId()); String content = "\"" + username + "\" 离开了聊天室!"; Message message = new Message(content, map); send(message.toJson()); } private static Gson gson = new Gson(); @OnMessage public void onMessage(String json) { ContentVo contentVo = gson.fromJson(json, ContentVo.class); if (contentVo.getType() == 1) { //广播 Message message = new Message(); message.setContent(this.username, contentVo.getMsg()); message.setNames(map); send(message.toJson()); System.out.println(message.toJson()); } else { //单聊 Message message = new Message(); message.setContent(this.username, contentVo.getMsg()); message.setNames(map); String to = contentVo.getTo(); String tos[] = to.substring(0, to.length() - 1).split("-"); List<String> lists = Arrays.asList(tos); for (WebSocket webSocket : webSockets) { if (lists.contains(webSocket.session.getId()) && webSocket.session.getId() != this.session.getId()) { try { webSocket.session.getBasicRemote().sendText(message.toJson()); } catch (Exception e) { e.printStackTrace(); } } } } } public void send(String message) { for (WebSocket webSocket : webSockets) { try { webSocket.session.getBasicRemote().sendText(message); } catch (Exception e) { e.printStackTrace(); } } } }
最近下载更多
XIAXIAXIA0724 LV1
10月8日
gaoxin222 LV14
7月11日
stsunaa LV1
7月8日
周鸣郝 LV2
5月26日
qq970040477 LV24
5月26日
Xiaobaiya11 LV2
3月4日
admin_z LV22
2023年12月21日
anninghh LV1
2023年12月4日
西瓜哥哥 LV4
2023年8月9日
gzryue LV6
2023年4月25日
最近浏览更多
citybird LV4
11月18日
charleswang LV7
10月21日
微信网友_7210310843715584
10月14日
暂无贡献等级
微信网友_6786215447367680 LV5
10月8日
苏若曦 LV1
10月8日
xz2295015285
10月8日
暂无贡献等级
zzzzzzzz9999
10月8日
暂无贡献等级
xxxyyyddd
10月8日
暂无贡献等级
蓝蓝蓝说的
10月8日
暂无贡献等级
XIAXIAXIA0724 LV1
10月8日