package com.bjsxt.server; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import com.bjsxt.vo.ContenVo; import com.bjsxt.vo.Message; import com.google.gson.Gson; @ServerEndpoint("/chatSocket") public class ChatSocket { private static Set<ChatSocket> sockets = new HashSet<ChatSocket>(); //储存所有的通信通道 private static List<String> names = new ArrayList<String>(); //储存所有的联系人下姓名 private static Map<String, Session> map = new HashMap<String, Session>(); //将联系人与通信通道同时保存 private Session session; //当前聊天人session private String username; //当前聊天人姓名 private Gson gson = new Gson(); /** * 打开通道时调用 * @param session * @throws IOException */ @SuppressWarnings("unused") @OnOpen public void open(Session session) throws Exception { this.session = session; sockets.add(this); String queryString = session.getQueryString(); //获取请求连接后面的值,输入汉字会有乱码,实际项目中使用账户ID this.username = queryString.substring(queryString.indexOf("=") + 1); names.add(this.username); map.put(this.username, session); Message message = new Message(); message.setAlert(this.username + "进入聊天室!!"); message.setNames(names); broadcast(sockets, gson.toJson(message)); } /** * 发送消息时调用 * @param session * @param msg * @throws IOException */ @OnMessage public void receive(Session session, String msg) throws Exception { ContenVo contenVo = gson.fromJson(msg, ContenVo.class); if (contenVo.getType().equals("1")) { //群聊 Message message = new Message(); message.setSendMsg(contenVo.getMsg()); message.setFrom(this.username); message.setDate(new Date().toLocaleString()); broadcast(sockets, gson.toJson(message)); }else if(contenVo.getType().equals("2")){ //单聊 String to = contenVo.getTo(); Session session2 = this.map.get(to); Message message = new Message(); message.setSendMsg("<font color=\"#FF0000\" >私聊:"+contenVo.getMsg()+"<font>"); message.setFrom(this.username); message.setDate(new Date().toLocaleString()); session.getBasicRemote().sendText(gson.toJson(message)); session2.getBasicRemote().sendText(gson.toJson(message)); } } /** * 关闭网页时调用 * @param session * @throws IOException */ @OnClose public void close(Session session) throws Exception { sockets.remove(this); names.remove(this.username); Message message = new Message(); message.setAlert(this.username + "退出聊天室!!"); message.setNames(names); broadcast(sockets, gson.toJson(message)); } /** * 群聊时将消息循环推送到前台 * @param chatSockets * @param msg * @throws IOException * @throws CloneNotSupportedException */ public void broadcast(Set<ChatSocket> chatSockets, String msg) throws Exception { for (ChatSocket chatSocket : chatSockets) { chatSocket.session.getBasicRemote().sendText(msg); } } }
最近下载更多
忘了密码来摸鱼 LV1
2023年5月29日
wenwen520_li LV1
2022年11月19日
杨豫川 LV12
2022年5月11日
912299793 LV21
2022年3月18日
berylzZz LV1
2022年3月13日
JulyMagnolia LV2
2021年11月27日
1ling1 LV2
2021年6月24日
thinkerkkk LV2
2021年6月22日
YZN212 LV3
2021年6月1日
dalamama LV1
2021年4月27日
最近浏览更多
实话大王
1月25日
暂无贡献等级
zeng1206 LV5
2023年12月28日
2568710676
2023年12月27日
暂无贡献等级
2890892945 LV2
2023年12月26日
SHDJSA
2023年12月11日
暂无贡献等级
微信网友_6762641760833536
2023年12月4日
暂无贡献等级
烧洋芋
2023年11月20日
暂无贡献等级
枳酒的歌
2023年10月3日
暂无贡献等级
阿超在大学修仙 LV1
2023年9月15日
wanfeng_233 LV4
2023年8月29日