|
@@ -1,10 +1,7 @@
|
|
|
package org.jeecg.modules.message.websocket;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.CopyOnWriteArraySet;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
@@ -40,14 +37,14 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
*/
|
|
|
@Component
|
|
|
@Slf4j
|
|
|
-@ServerEndpoint("/websocket/{userId}/{sessionId}") //此注解相当于设置访问URL
|
|
|
+@ServerEndpoint("/websocket/{userId}/{token}") //此注解相当于设置访问URL
|
|
|
public class WebSocket {
|
|
|
|
|
|
private Session session;
|
|
|
|
|
|
private String userId;
|
|
|
|
|
|
- private String sessionId;
|
|
|
+ private String token;
|
|
|
|
|
|
|
|
|
private static final String REDIS_TOPIC_NAME = "socketHandler";
|
|
@@ -68,12 +65,13 @@ public class WebSocket {
|
|
|
|
|
|
|
|
|
@OnOpen
|
|
|
- public void onOpen(Session session, @PathParam(value = "userId") String userId, @PathParam(value = "sessionId") String sessionId) {
|
|
|
+ public void onOpen(Session session, @PathParam(value = "userId") String userId, @PathParam(value = "token") String token) {
|
|
|
try {
|
|
|
this.session = session;
|
|
|
this.userId = userId;
|
|
|
- this.sessionId=sessionId;
|
|
|
+ this.token=token;
|
|
|
webSockets.add(this);
|
|
|
+ System.out.println(userId);
|
|
|
sessionPool.put(userId, session);
|
|
|
log.info("【websocket消息】有新的连接,总数为:" + webSockets.size());
|
|
|
} catch (Exception e) {
|
|
@@ -85,7 +83,7 @@ public class WebSocket {
|
|
|
try {
|
|
|
|
|
|
webSockets.remove(this);
|
|
|
- sessionPool.remove(this.userId);
|
|
|
+ sessionPool.remove(userId);
|
|
|
log.info("【websocket消息】连接断开,总数为:" + webSockets.size());
|
|
|
} catch (Exception e) {
|
|
|
}
|
|
@@ -121,22 +119,141 @@ public class WebSocket {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void sendUser(String message){
|
|
|
+
|
|
|
+ Center c=new Center();
|
|
|
+
|
|
|
+ String sendUserno = message.split("[|]")[1];
|
|
|
+ String sendMessage = message.split("[|]")[0];
|
|
|
+ String userid=message.split("[|]")[2];
|
|
|
+ String date=message.split("[|]")[3];
|
|
|
+ String username=message.split("[|]")[4];
|
|
|
+ String useravatUrl=message.split("[|]")[5];
|
|
|
+ String sendname=message.split("[|]")[6];
|
|
|
+ String sendavatUrl=message.split("[|]")[7];
|
|
|
+ c.setCenter(sendMessage);
|
|
|
+ c.setDate(date);
|
|
|
+ c.setUserid(userid);
|
|
|
+ c.setName(username);
|
|
|
+ c.setAvatar(useravatUrl);
|
|
|
+ if (!redisUtil.hasKey(userid+"a")){
|
|
|
+ Chat chat=new Chat();
|
|
|
+ List<Center>list=new ArrayList<>();
|
|
|
+ List<Chat>userTo=new ArrayList<>();
|
|
|
+ chat.setUserid(sendUserno);
|
|
|
+ chat.setName(sendname);
|
|
|
+ chat.setAvatUrl(sendavatUrl);
|
|
|
+ list.add(c);
|
|
|
+ chat.setList(list);
|
|
|
+ userTo.add(chat);
|
|
|
+ redisUtil.set(userid+"a",userTo);
|
|
|
+
|
|
|
+
|
|
|
+ } else if (redisUtil.hasKey(userid+"a")==true){
|
|
|
+ List<Chat>taskList=(ArrayList<Chat>)redisUtil.get(userid+"a");
|
|
|
+ List<Center>list=new ArrayList<>();
|
|
|
+ Chat chat=new Chat();
|
|
|
+ if (!useLoop(taskList,sendUserno)){
|
|
|
+ chat.setUserid(sendUserno);
|
|
|
+ chat.setName(sendname);
|
|
|
+ chat.setAvatUrl(sendavatUrl);
|
|
|
+ list.add(c);
|
|
|
+ chat.setList(list);
|
|
|
+ taskList.add(chat);
|
|
|
+ }else{
|
|
|
+ for (Chat ct:taskList){
|
|
|
+ if (ct.getUserid().equals(sendUserno)){
|
|
|
+ ct.getList().add(c);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Chat> taskList1 = taskList;
|
|
|
+ redisUtil.set(userid+"a",taskList);
|
|
|
+ }if (!redisUtil.hasKey(sendUserno+"a")){
|
|
|
+ Chat chat=new Chat();
|
|
|
+ List<Center>list=new ArrayList<>();
|
|
|
+ List<Center>listwd=new ArrayList<>();
|
|
|
+ List<Chat>userTo=new ArrayList<>();
|
|
|
+ chat.setUserid(userid);
|
|
|
+ chat.setName(username);
|
|
|
+ chat.setAvatUrl(useravatUrl);
|
|
|
+ list.add(c);
|
|
|
+ listwd.add(c);
|
|
|
+ chat.setList(list);
|
|
|
+ chat.setListwd(listwd);
|
|
|
+ userTo.add(chat);
|
|
|
+ redisUtil.set(sendUserno+"a",userTo);
|
|
|
+ } else if (redisUtil.hasKey(sendUserno+"a")==true){
|
|
|
+ List<Chat>taskList=(ArrayList<Chat>)redisUtil.get(sendUserno+"a");
|
|
|
+ Chat chat=new Chat();
|
|
|
+ List<Center>list=new ArrayList<>();
|
|
|
+ List<Center>listwd=new ArrayList<>();
|
|
|
+ if (!useLoop(taskList,userid)){
|
|
|
+ chat.setUserid(userid);
|
|
|
+ chat.setName(username);
|
|
|
+ chat.setAvatUrl(useravatUrl);
|
|
|
+ list.add(c);
|
|
|
+ listwd.add(c);
|
|
|
+ chat.setList(list);
|
|
|
+ chat.setListwd(listwd);
|
|
|
+ taskList.add(chat);
|
|
|
+ }else {
|
|
|
+ for (Chat ct : taskList) {
|
|
|
+ if (ct.getUserid().equals(userid)) {
|
|
|
+ ct.getList().add(c);
|
|
|
+ if (ct.getListwd()!=null){
|
|
|
+ ct.getListwd().add(c);
|
|
|
+ }else{
|
|
|
+ listwd.add(c);
|
|
|
+ ct.setListwd(listwd);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ List<Chat> taskList1 = taskList;
|
|
|
+ redisUtil.set(sendUserno + "a", taskList);
|
|
|
+ }if (sessionPool.get(sendUserno) != null) {
|
|
|
+ String msg=sendMessage;
|
|
|
+ sessionPool.get(sendUserno).getAsyncRemote().sendText(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void sendToUser(String message) {
|
|
|
String sendUserno = message.split("[|]")[1];
|
|
|
String sendMessage = message.split("[|]")[0];
|
|
|
String userid=message.split("[|]")[2];
|
|
|
+ String date=message.split("[|]")[3];
|
|
|
List<Chat>list=new ArrayList<>();
|
|
|
Chat chat=new Chat();
|
|
|
- if (redisUtil.hasKey(sendUserno+userid)){
|
|
|
+ String key="";
|
|
|
+ if (!redisUtil.hasKey(sendUserno+userid)&&!redisUtil.hasKey(userid+sendUserno)){
|
|
|
chat.setUserid(userid);
|
|
|
chat.setCenter(sendMessage);
|
|
|
+ chat.setDate(date);
|
|
|
list.add(chat);
|
|
|
+
|
|
|
redisUtil.set(sendUserno+userid,list);
|
|
|
+ }else{
|
|
|
+ List<Chat> taskList =null;
|
|
|
+ if (redisUtil.hasKey(sendUserno+userid)){
|
|
|
+ taskList=(ArrayList<Chat>)redisUtil.get(sendUserno+userid);
|
|
|
+ key=sendUserno+userid;
|
|
|
+ }else {
|
|
|
+ taskList=(ArrayList<Chat>)redisUtil.get(userid+sendUserno);
|
|
|
+ key=userid+sendUserno;
|
|
|
+ }
|
|
|
+ chat.setUserid(userid);
|
|
|
+ chat.setDate(date);
|
|
|
+ chat.setCenter(sendMessage);
|
|
|
+ taskList.add(chat);
|
|
|
+ redisUtil.set(key,taskList);
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
if (sessionPool.get(sendUserno) != null) {
|
|
|
- sessionPool.get(sendUserno).getAsyncRemote().sendText(sendMessage);
|
|
|
+ String msg=sendMessage+"|"+date;
|
|
|
+ sessionPool.get(sendUserno).getAsyncRemote().sendText(msg);
|
|
|
} else {
|
|
|
System.out.println("当前用户不在线");
|
|
|
}
|
|
@@ -156,13 +273,9 @@ public class WebSocket {
|
|
|
for (WebSocket webSocket : webSockets) {
|
|
|
webSocket.pushMessage(message);
|
|
|
}*/
|
|
|
- if (webSockets.size()>=2){
|
|
|
- sendToUser(message);
|
|
|
- }else {
|
|
|
- for (WebSocket webSocket : webSockets) {
|
|
|
- webSocket.pushMessage(message);
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ sendUser(message);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -204,5 +317,19 @@ public class WebSocket {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ public Session session(String token){
|
|
|
+ return sessionPool.get(token);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static boolean useLoop(List<Chat> arr, String targetValue) {
|
|
|
+ for(Chat s: arr){
|
|
|
+ if(s.getUserid().equals(targetValue)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|