fs-danaus
2023-06-29 0099c9d4acb72274764639781bcdbd3b29835195
提交 | 用户 | age
a6a76f 1 package com.yc.sdk.WebSocketMessage.api.messagelistener;
F 2
3
55d506 4 import com.yc.sdk.WebSocketMessage.action.WebSocketMessageServer;
f959ba 5 import com.yc.sdk.WebSocketMessage.entity.MessageInfo;
349b07 6 import com.yc.sdk.WebSocketMessage.entity.MessageType;
55d506 7 import com.yc.sdk.WebSocketMessage.entity.WsMessageUserEntity;
251add 8 import com.yc.sdk.WebSocketMessage.service.*;
a6a76f 9 import org.springframework.beans.factory.annotation.Autowired;
F 10 import org.springframework.data.redis.connection.Message;
11 import org.springframework.data.redis.connection.MessageListener;
12 import org.springframework.data.redis.core.RedisTemplate;
13 import org.springframework.data.redis.serializer.RedisSerializer;
14
55d506 15 import java.util.List;
a6a76f 16
F 17 /**
18  * 接收订阅消息
55d506 19  * 发布订阅消息程序: com.yc.sdk.WebSocketMessage.action.WebSocketMessageServer.publishMessageToRedis(Message message)
a6a76f 20  *
F 21  * @author johnswang
22  */
23 public class WebSocketMessageListener implements MessageListener {
24     @Autowired
25     private RedisTemplate<String, String> redisTemplate;
55d506 26     @Autowired
f959ba 27     IMMessageIfc imMessageIfc;
55d506 28     @Autowired
ad9fb8 29     HeXiaoMessageIfc heXiaoMessageIfc;
6990b5 30     @Autowired
565fe8 31     ApiAuthMessageIfc apiAuthMessageIfc;
6990b5 32     @Autowired
J 33     RefreshPanicBuyingIfc refreshPanicBuyingIfc;
251add 34     @Autowired
F 35     AbcPayMessageIfc abcPayMessageIfc;
9cd417 36     @Autowired
F 37     TasksMessageIfc tasksMessageIfc;
5fc8e3 38     @Autowired
F 39     VersionMessageIfc versionMessageIfc;
6fe1e6 40     @Autowired
F 41     RefreshDataSourceMessageIfc refreshDataSourceMessageIfc;
3c1697 42     @Autowired
F 43     SingleAccountMessageIfc singleAccountMessageIfc;
a6a76f 44     @Override
F 45     public void onMessage(Message message, byte[] pattern) {
55d506 46         try {
F 47             RedisSerializer<?> serializer = redisTemplate.getValueSerializer();
48             Object body = serializer.deserialize(message.getBody());
49             //String channel = new String(pattern);   //取订阅频道 主题 channel
6fe1e6 50             MessageInfo msg = null;
F 51             if (body instanceof MessageInfo) {
284c55 52                 msg = (MessageInfo) body;
6fe1e6 53             } else {
284c55 54                 msg = MessageInfo.build(String.valueOf(body));
F 55             }
55d506 56             //System.out.println("订阅接收到的消息:"+msg.toString());
9cd417 57
6fe1e6 58             //群发所有小程序用户
F 59             if ((msg.getMsgType().equals(MessageType.REFRESH_PANICBUYING) && (msg.getUserCode() == null || msg.getUserCode().equals(""))) ||
60                     MessageType.NOTICE_SYSTEM_STOP.equals(msg.getMsgType())||
61                     MessageType.NOTICE_SYSTEM_START.equals(msg.getMsgType())) {
62                 List<WsMessageUserEntity> wsMessageUserEntityList = WebSocketMessageServer.getOnlineUser(msg.getDbId(), msg.getUserFromType());
63                 //只有是存在于当前的用户信息才需要处理,否则不需要处理
64                 if (wsMessageUserEntityList != null && wsMessageUserEntityList.size() != 0) {
65                     for (WsMessageUserEntity wsMessageUserEntity : wsMessageUserEntityList) {
66                         handlerMessage(msg, wsMessageUserEntity);
67                     }
68                 }
c86295 69             } else if (MessageType.REFRESH_TASK.equals(msg.getMsgType()) ||
F 70                     MessageType.REFRESH_LOCALVERSION_TASK.equals(msg.getMsgType())||
71                     MessageType.CHECK_SYSTEM_DISABLED.equals(msg.getMsgType())
72             ) {
6fe1e6 73                 //对于没用websocket接收的情况,直接处理相关消息
F 74                 handlerMessage(msg, null);
75
76             } else {
77                 List<WsMessageUserEntity> wsMessageUserEntityList = WebSocketMessageServer.getOnlineUser(msg.getDbId(), msg.getUserFromType(), msg.getUserCode());
da7436 78                 //只有是存在于当前的用户信息才需要处理,否则不需要处理
F 79                 if (wsMessageUserEntityList != null && wsMessageUserEntityList.size() != 0) {
80                     for (WsMessageUserEntity wsMessageUserEntity : wsMessageUserEntityList) {
81                         handlerMessage(msg, wsMessageUserEntity);
82                     }
83                 }
55d506 84             }
F 85         } catch (Exception e) {
86             e.printStackTrace();
87         }
a6a76f 88     }
55d506 89
f959ba 90     /**
F 91      * 根据消息类型调用不同的类处理
55d506 92      *
f959ba 93      * @return
F 94      */
55d506 95     protected void handlerMessage(MessageInfo message, WsMessageUserEntity userEntity) {
6fe1e6 96         MessageIfc messageIfc = null;
F 97         if (message != null && message.getMsgType() != null) {
55d506 98             switch (message.getMsgType()) {
c61217 99 //                case 6001:  //APP扫码登录
F 100 //                    // messageIfc=imMessageIfc;
101 //                    break;
102 //                case 6002:  //待办事宜(PC端右下角)
103 //                case 6003:  //系统级弹窗信息(要避免高密度重复弹出)
104 //                    messageIfc=imMessageIfc;
105 //                    break;
106 //                case 6004:  //收取服务费续费通知
107 //                    //messageIfc=imMessageIfc;
108 //                    break;
6fe1e6 109                 case 6005:  //检查系统是否停用,代替maintaince.do
F 110                 case 6014: //关闭系统通知
111                 case 6015: //启用系统通知
112                     messageIfc = refreshDataSourceMessageIfc;
f959ba 113                     break;
74f517 114                 case 6006:   //小程序扫码核销(扫码了,等待按“核销”按钮)
6fe1e6 115                     messageIfc = heXiaoMessageIfc;
f959ba 116                     break;
ad9fb8 117                 case 6007:  //发送即时消息 im 
55d506 118                     messageIfc = imMessageIfc;
565fe8 119                 case 6008:  //API认证消息
F 120                     messageIfc = apiAuthMessageIfc;
f959ba 121                     break;
6990b5 122                 case 6009:  //刷新小程序端活动内容  MessageType.REFRESH_PANICBUYING
6fe1e6 123                     messageIfc = refreshPanicBuyingIfc;
F 124                     break;
74f517 125                 case 6010:   //小程序扫码核销(点了“核销”按钮)
6fe1e6 126                     messageIfc = heXiaoMessageIfc;
74f517 127                     break;
251add 128                 case 6011:   //农行支付结果通知回调
6fe1e6 129                     messageIfc = abcPayMessageIfc;
251add 130                     break;
9cd417 131                 case 6012:   //刷新任务作业
6fe1e6 132                     messageIfc = tasksMessageIfc;
9cd417 133                     break;
5fc8e3 134                 case 6013:   //刷新内存版本号
6fe1e6 135                     messageIfc = versionMessageIfc;
5fc8e3 136                     break;
0099c9 137                 case 6016:   //只能存在一个账号登录
F 138                 case 6017:   //会话失效
3c1697 139                     messageIfc = singleAccountMessageIfc;
F 140                     break;
f959ba 141                 default:
F 142             }
ad9fb8 143             if (messageIfc != null) {
6fe1e6 144                 messageIfc.handlerMessage(message, userEntity);
ad9fb8 145             }
f959ba 146         }
F 147     }
55d506 148
a6a76f 149     public RedisTemplate<String, String> getRedisTemplate() {
F 150         return redisTemplate;
151     }
152
153     public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
154         this.redisTemplate = redisTemplate;
155     }
156 }