首页>代码>基于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();
}
}
}
}
最近下载更多
Vincter LV3
2024年12月25日
haomc052829 LV4
2024年12月7日
XIAXIAXIA0724 LV1
2024年10月8日
gaoxin222 LV14
2024年7月11日
stsunaa LV1
2024年7月8日
周鸣郝 LV2
2024年5月26日
qq970040477 LV24
2024年5月26日
Xiaobaiya11 LV2
2024年3月4日
admin_z LV22
2023年12月21日
anninghh LV1
2023年12月4日
最近浏览更多
Vincter LV3
2024年12月25日
ma406805131 LV19
2024年12月23日
haomc052829 LV4
2024年12月7日
citybird LV4
2024年11月18日
charleswang LV7
2024年10月21日
微信网友_7210310843715584
2024年10月14日
暂无贡献等级
微信网友_6786215447367680 LV5
2024年10月8日
苏若曦 LV1
2024年10月8日
xz2295015285
2024年10月8日
暂无贡献等级
zzzzzzzz9999
2024年10月8日
暂无贡献等级

