Просмотр исходного кода

websocket通讯调整为支持多端同步通讯

沈静伟 4 лет назад
Родитель
Сommit
6d5d4024b8

+ 4 - 1
src/dsb/com/cnd3b/common/Controller.java

@@ -9,6 +9,7 @@ import com.cnd3b.common.data.db.DBConnect;
 import com.cnd3b.common.data.db.DataPool;
 import com.cnd3b.common.parameter.parameter;
 import com.cnd3b.common.data.Row;
+import com.cnd3b.common.websocket.WebClientSocket;
 import org.apache.poi.ss.formula.functions.T;
 import p2.common.parse.J;
 import p2.p2server.P2Server;
@@ -650,7 +651,9 @@ public class Controller extends BaseClass {
         methodobject.put("type", "callmethod");
         methodobject.put("classname", classname);
         methodobject.put("method", method);
-        parameter.websocketClients.get(userid).sendSystemMessage(methodobject);
+        for (WebClientSocket webClientSocket : parameter.websocketClients.get(userid).values()) {
+            webClientSocket.sendSystemMessage(methodobject);
+        }
     }
 
 

+ 3 - 3
src/dsb/com/cnd3b/common/parameter/parameter.java

@@ -47,13 +47,13 @@ public class parameter {
      */
     public static HashMap<String, String> register_passwordmap = new HashMap<>(16);
     /**
-     *账号注册验证码、有效期
+     * 账号注册验证码、有效期
      */
     public static HashMap<String, Date> registerpassword_date = new HashMap<>(16);
 
 
-    //websocket连接池
-    public static Map<Long, WebClientSocket> websocketClients = new ConcurrentHashMap<Long, WebClientSocket>();
+    //websocket连接池 userid:(token:session)
+    public static Map<Long, ConcurrentHashMap<String, WebClientSocket>> websocketClients = new ConcurrentHashMap<Long, ConcurrentHashMap<String, WebClientSocket>>();
 
     /**
      * 方法请求次数

+ 14 - 3
src/dsb/com/cnd3b/common/websocket/WebClientSocket.java

@@ -15,6 +15,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Calendar;
+import java.util.concurrent.ConcurrentHashMap;
 
 //ws://127.0.0.1:8080/samex/webSocket/829fef9884bbf7f9fb9c51499d7b332f
 @ServerEndpoint("/webSocket/{accesstoken}")
@@ -41,14 +42,19 @@ public class WebClientSocket extends BaseClass {
             userid = parameter.tokenlist.get(accesstoken);
             userRow = parameter.userIdList.get(userid);
         } else {
-            //sendSystemMessage("");
             JSONObject methodobject = new JSONObject();
             methodobject.put("type", "err");
             methodobject.put("msg", "ÇëµÇ½");
             sendSystemMessage(methodobject);
             return;
         }
-        parameter.websocketClients.put(userid, this);
+        if (parameter.websocketClients.containsKey(userid)) {
+            parameter.websocketClients.get(userid).put(accesstoken, this);
+        } else {
+            ConcurrentHashMap<String, WebClientSocket> map = new ConcurrentHashMap<>();
+            map.put(accesstoken, this);
+            parameter.websocketClients.put(userid, map);
+        }
     }
 
     /**
@@ -58,7 +64,12 @@ public class WebClientSocket extends BaseClass {
      */
     @OnClose
     private void onClose() throws IOException {
-        parameter.websocketClients.remove(userid);
+        if (parameter.websocketClients.containsKey(userid)) {
+            parameter.websocketClients.get(userid).remove(accesstoken);
+            if (parameter.websocketClients.get(userid).isEmpty()) {
+                parameter.websocketClients.remove(userid);
+            }
+        }
     }
 
     /**

+ 2 - 9
src/dsb/com/cnd3b/restcontroller/customer/usercenter/teammsg/teammsg.java

@@ -44,18 +44,11 @@ public class teammsg extends Controller {
             Rows subuserrows = map.get(tenterprise_userid);
             String[] subusers = subuserrows.toArray("tenterprise_userid");
             row.put("subusers", subusers);
-            RowsMap headportraitRowsMap = getAttachmentUrl("tenterprise_users", subusers, "headportrait");
             for (Row subuserrow : subuserrows) {
-                subuserrow.put("attinfos", headportraitRowsMap.get(subuserrow.getString("tenterprise_userid")));
+                subuserrow.put("attinfos", attinfosMap.get(subuserrow.getString("tenterprise_userid")));
             }
             row.put("subusermsgs", subuserrows);
-
-            if (attinfosMap.containsKey(tenterprise_userid)) {
-                row.put("attinfos", attinfosMap.get(tenterprise_userid));
-            } else {
-                row.put("attinfos", "[]");
-            }
-
+            row.put("attinfos", attinfosMap.get(tenterprise_userid));
         }
         return getSucReturnObject().setData(rows).saveToDataPool().toString();
     }

+ 10 - 3
src/dsb/com/cnd3b/websocketcontroller/message/message.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.cnd3b.common.Controller;
 import com.cnd3b.common.data.SQLFactory;
 import com.cnd3b.common.parameter.parameter;
+import com.cnd3b.common.websocket.WebClientSocket;
 import com.cnd3b.utility.Encryption;
 import p2.util.P2Exception;
 
@@ -54,7 +55,9 @@ public class message extends Controller {
         ArrayList<Long> userids = getUserIds(timdialogid);
         for (long userid : userids) {
             if (parameter.websocketClients.containsKey(userid)) {
-                parameter.websocketClients.get(userid).sendDialogMessage(messageObject);
+                for (WebClientSocket webClientSocket : parameter.websocketClients.get(userid).values()) {
+                    webClientSocket.sendDialogMessage(messageObject);
+                }
             }
         }
         saveMessage(messageObject);
@@ -89,7 +92,9 @@ public class message extends Controller {
         ArrayList<Long> userids = getUserIds(timdialogid);
         for (long userid : userids) {
             if (parameter.websocketClients.containsKey(userid)) {
-                parameter.websocketClients.get(userid).sendDialogMessage(messageObject);
+                for (WebClientSocket webClientSocket : parameter.websocketClients.get(userid).values()) {
+                    webClientSocket.sendDialogMessage(messageObject);
+                }
             }
         }
         saveMessage(messageObject);
@@ -131,7 +136,9 @@ public class message extends Controller {
         ArrayList<Long> userids = getUserIds(timdialogid);
         for (long userid : userids) {
             if (parameter.websocketClients.containsKey(userid)) {
-                parameter.websocketClients.get(userid).sendDialogMessage(messageObject);
+                for (WebClientSocket webClientSocket : parameter.websocketClients.get(userid).values()) {
+                    webClientSocket.sendDialogMessage(messageObject);
+                }
             }
         }
         saveMessage(messageObject);