From 2aff309853de146e0a3c72be77a7a181cf6fb020 Mon Sep 17 00:00:00 2001 From: bynt <13586541001@163.com> Date: Fri, 5 Jul 2024 10:44:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 0 pom.xml | 373 ++++++++++++++++++ .../CustomerServiceWebsocketApplication.java | 15 + .../websocket/netty/NettyConnectionUtil.java | 183 +++++++++ .../eco/websocket/netty/WebSocketServer.java | 83 ++++ .../netty/async/AsyncTaskService.java | 57 +++ .../eco/websocket/netty/common/Constant.java | 16 + .../common/listener/HttpEventListener.java | 33 ++ .../websocket/netty/decoder/SelfDecoder.java | 62 +++ .../websocket/netty/decoder/SelfEncoder.java | 32 ++ .../netty/handler/JsonMessageHandler.java | 8 + .../netty/handler/MessageHandler.java | 8 + .../netty/handler/WebSocketJsonHandler.java | 63 +++ ...tFriendAddRequestTaskWebsocketHandler.java | 43 ++ .../AccountLogoutNoticeWebsocketHandler.java | 41 ++ ...iendFromPhonebookTaskWebsocketHandler.java | 40 ++ ...dFriendInChatRoomTaskWebsocketHandler.java | 40 ++ ...ddFriendWithSceneTaskWebsocketHandler.java | 40 ++ .../AddFriendsTaskWebsocketHandler.java | 40 ++ ...AgreeJoinChatRoomTaskWebsocketHandler.java | 29 ++ .../ChatRoomActionTaskWebsocketHandler.java | 45 +++ ...RoomInviteApproveTaskWebsocketHandler.java | 40 ++ ...rcleCommentDeleteTaskWebsocketHandler.java | 42 ++ ...ircleCommentReplyTaskWebsocketHandler.java | 42 ++ .../CircleLikeTaskWebsocketHandler.java | 40 ++ .../CircleMsgClearTaskWebsocketHandler.java | 40 ++ .../CircleMsgReadTaskWebsocketHandler.java | 38 ++ .../ClearAllChatMsgTaskWebsocketHandler.java | 40 ++ ...BoardTalkToFriendTaskWebsocketHandler.java | 60 +++ ...ontactLabelDeleteTaskWebsocketHandler.java | 40 ++ .../ContactLabelTaskWebsocketHandler.java | 46 +++ .../ContactSetLabelTaskWebsocketHandler.java | 40 ++ .../DeleteFriendTaskWebsocketHandler.java | 40 ++ .../DeleteSNSNewsTaskWebsocketHandler.java | 41 ++ .../DeviceAuthReqWebsocketHandler.java | 187 +++++++++ .../FindContactTaskWebsocketHandler.java | 41 ++ ...dMessageByContentTaskWebsocketHandler.java | 40 ++ .../ForwardMessageTaskWebsocketHandler.java | 41 ++ ...rwardMultiMessageTaskWebsocketHandler.java | 39 ++ .../GetContactInfoTaskWebsocketHandler.java | 40 ++ ...GetFriendDetectResultWebsocketHandler.java | 40 ++ .../HeartBeatReqWebsocketHandler.java | 33 ++ .../JoinGroupByQrTaskWebsocketHandler.java | 44 +++ .../ModifyFriendMemoTaskWebsocketHandler.java | 46 +++ .../MsgReceivedAckWebsocketHandler.java | 28 ++ .../OneKeyLikeTaskWebsocketHandler.java | 43 ++ .../PhoneActionTaskWebsocketHandler.java | 40 ++ .../PhoneStateTaskWebsocketHandler.java | 40 ++ .../PostFriendDetectTaskWebsocketHandler.java | 42 ++ .../PostSNSNewsTaskWebsocketHandler.java | 43 ++ ...tStopFriendDetectTaskWebsocketHandler.java | 41 ++ ...ullChatRoomQrCodeTaskWebsocketHandler.java | 41 ++ .../PullCircleDetailTaskWebsocketHandler.java | 41 ++ .../PullEmojiInfoTaskWebsocketHandler.java | 40 ++ ...lFriendAddReqListTaskWebsocketHandler.java | 41 ++ .../PullFriendCircleTaskWebsocketHandler.java | 41 ++ .../PullWeChatQrCodeTaskWebsocketHandler.java | 42 ++ .../QueryHbDetailTaskWebsocketHandler.java | 41 ++ .../RemittanceTaskWebsocketHandler.java | 41 ++ ...questChatRoomInfoTaskWebsocketHandler.java | 46 +++ ...questContactsInfoTaskWebsocketHandler.java | 46 +++ ...equestTalkContentTaskWebsocketHandler.java | 34 ++ ...RequestTalkDetailTaskWebsocketHandler.java | 48 +++ .../RevokeMessageTaskWebsocketHandler.java | 41 ++ .../SendFriendVerifyTaskWebsocketHandler.java | 40 ++ .../SendJielongTaskWebsocketHandler.java | 41 ++ .../SendLuckyMoneyTaskWebsocketHandler.java | 47 +++ .../SendMultiPictureTaskWebsocketHandler.java | 41 ++ .../TakeLuckyMoneyTaskWebsocketHandler.java | 42 ++ .../TalkToFriendTaskWebsocketHandler.java | 59 +++ ...gerBizContactPushTaskWebsocketHandler.java | 40 ++ ...iggerChatroomPushTaskWebsocketHandler.java | 49 +++ ...ggerCircleMsgPushTaskWebsocketHandler.java | 40 ++ ...TriggerCirclePushTaskWebsocketHandler.java | 44 +++ ...rConversationPushTaskWebsocketHandler.java | 46 +++ ...TriggerFriendPushTaskWebsocketHandler.java | 46 +++ ...gerHistoryMsgPushTaskWebsocketHandler.java | 45 +++ ...riggerMessageReadTaskWebsocketHandler.java | 47 +++ .../TriggerUnReadTaskWebsocketHandler.java | 40 ++ ...TriggerWechatPushTaskWebsocketHandler.java | 41 ++ .../VoiceTransTextTaskWebsocketHandler.java | 40 ++ .../WeChatGroupSendTaskWesocketHandler.java | 41 ++ .../WechatLogoutTaskWebsocketHandler.java | 40 ++ .../WechatSettingTaskWebsocketHandler.java | 40 ++ .../processor/WebSocketMessageProcessor.java | 72 ++++ .../netty/utils/ByteStringToString.java | 45 +++ .../websocket/netty/utils/MessageUtil.java | 138 +++++++ .../websocket/netty/utils/MsgIdBuilder.java | 28 ++ .../eco/websocket/utils/PropertyUtils.java | 54 +++ src/main/resources/bootstrap.yml | 62 +++ src/main/resources/logback-client.xml | 69 ++++ 91 files changed, 4508 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/eco/websocket/CustomerServiceWebsocketApplication.java create mode 100644 src/main/java/com/eco/websocket/netty/NettyConnectionUtil.java create mode 100644 src/main/java/com/eco/websocket/netty/WebSocketServer.java create mode 100644 src/main/java/com/eco/websocket/netty/async/AsyncTaskService.java create mode 100644 src/main/java/com/eco/websocket/netty/common/Constant.java create mode 100644 src/main/java/com/eco/websocket/netty/common/listener/HttpEventListener.java create mode 100644 src/main/java/com/eco/websocket/netty/decoder/SelfDecoder.java create mode 100644 src/main/java/com/eco/websocket/netty/decoder/SelfEncoder.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/JsonMessageHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/MessageHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/WebSocketJsonHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/AcceptFriendAddRequestTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/AccountLogoutNoticeWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendFromPhonebookTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendInChatRoomTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendWithSceneTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendsTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/AgreeJoinChatRoomTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomActionTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomInviteApproveTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentDeleteTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentReplyTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/CircleLikeTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgClearTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgReadTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ClearAllChatMsgTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ClipBoardTalkToFriendTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelDeleteTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ContactSetLabelTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/DeleteFriendTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/DeleteSNSNewsTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/DeviceAuthReqWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/FindContactTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageByContentTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMultiMessageTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/GetContactInfoTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/GetFriendDetectResultWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/HeartBeatReqWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/JoinGroupByQrTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/ModifyFriendMemoTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/MsgReceivedAckWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/OneKeyLikeTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PhoneActionTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PhoneStateTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PostFriendDetectTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PostSNSNewsTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PostStopFriendDetectTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PullChatRoomQrCodeTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PullCircleDetailTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PullEmojiInfoTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendAddReqListTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendCircleTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/PullWeChatQrCodeTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/QueryHbDetailTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/RemittanceTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/RequestChatRoomInfoTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/RequestContactsInfoTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkContentTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkDetailTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/RevokeMessageTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/SendFriendVerifyTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/SendJielongTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/SendLuckyMoneyTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/SendMultiPictureTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TakeLuckyMoneyTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TalkToFriendTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerBizContactPushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerChatroomPushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCircleMsgPushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCirclePushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerConversationPushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerFriendPushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerHistoryMsgPushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerMessageReadTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerUnReadTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/TriggerWechatPushTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/VoiceTransTextTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/WeChatGroupSendTaskWesocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/WechatLogoutTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/handler/websocket/WechatSettingTaskWebsocketHandler.java create mode 100644 src/main/java/com/eco/websocket/netty/processor/WebSocketMessageProcessor.java create mode 100644 src/main/java/com/eco/websocket/netty/utils/ByteStringToString.java create mode 100644 src/main/java/com/eco/websocket/netty/utils/MessageUtil.java create mode 100644 src/main/java/com/eco/websocket/netty/utils/MsgIdBuilder.java create mode 100644 src/main/java/com/eco/websocket/utils/PropertyUtils.java create mode 100644 src/main/resources/bootstrap.yml create mode 100644 src/main/resources/logback-client.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..39dbaab --- /dev/null +++ b/pom.xml @@ -0,0 +1,373 @@ + + + 4.0.0 + com.eco + customer-service-websocket + 0.0.1 + customer-service-websocket + customer-service-websocket + + + org.springframework.boot + spring-boot-starter-parent + 2.0.4.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + Finchley.RELEASE + + + + + + + com.googlecode.protobuf-java-format + protobuf-java-format + 1.2 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.nacos + nacos-client + 2.1.0 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + + org.springframework.boot + spring-boot-starter-undertow + + + io.undertow + undertow-websockets-jsr + + + + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + io.netty + netty-all + 4.1.25.Final + + + + org.projectlombok + lombok + 1.18.16 + provided + + + + commons-codec + commons-codec + + + + commons-fileupload + commons-fileupload + 1.3.1 + + + + + com.github.binarywang + java-emoji-converter + 0.1.1 + + + + org.apache.httpcomponents + httpclient + + + + cn.hutool + hutool-all + 5.8.5 + + + + + jaxen + jaxen + 1.2.0 + + + + net.sf.json-lib + json-lib + 2.2.2 + jdk15 + + + + xom + xom + 1.2.5 + + + + xom + xom + 1.2.5 + sources + + + + ws.schild + jave-all-deps + 3.1.1 + + + + com.jcraft + jsch + 0.1.54 + + + + com.eco.common + fission-base + 0.0.1 + + + org.apache.dubbo + dubbo-registry-nacos + + + org.apache.dubbo + dubbo-spring-boot-starter + + + hutool-all + cn.hutool + + + mybatis-plus-boot-starter + com.baomidou + + + + + + org.apache.dubbo + dubbo-registry-nacos + 2.7.4.1 + + + + org.apache.dubbo + dubbo-spring-boot-starter + 2.7.3 + + + com.github.ben-manes.caffeine + caffeine + 2.5.5 + + + + com.eco.common + common-job + 0.0.1 + + + hutool-all + cn.hutool + + + + + + org.springframework.retry + spring-retry + + + + io.minio + minio + 8.5.2 + + + + com.squareup.okhttp3 + okhttp + 4.2.2 + + + + com.eco + common + 0.0.1 + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + 2.0.0.RELEASE + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + repackage + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + UTF-8 + + @ + ${*} + + false + + + + + + + src/main/resources + true + + + + + + + local + + local + 172.18.0.228:8848 + d5123679-020d-46d6-8ac8-f17bdd08e8e2 + + + + true + + + + + inner + + inner + 172.18.0.228:8848 + d5123679-020d-46d6-8ac8-f17bdd08e8e2 + + + + true + + + + + prod + + prod + 192.168.1.2:8848 + 8c3bab0f-c9b4-4f4d-a833-487f7c1977db + classpath:logback-client.xml + + + + + prod_wss + + prod_wss + 192.168.1.2:8848 + 8c3bab0f-c9b4-4f4d-a833-487f7c1977db + classpath:logback-client.xml + + + + + + + + diff --git a/src/main/java/com/eco/websocket/CustomerServiceWebsocketApplication.java b/src/main/java/com/eco/websocket/CustomerServiceWebsocketApplication.java new file mode 100644 index 0000000..c654d8b --- /dev/null +++ b/src/main/java/com/eco/websocket/CustomerServiceWebsocketApplication.java @@ -0,0 +1,15 @@ +package com.eco.websocket; + +import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDubbo +@SpringBootApplication +public class CustomerServiceWebsocketApplication { + + public static void main(String[] args) { + SpringApplication.run(CustomerServiceWebsocketApplication.class, args); + } + +} diff --git a/src/main/java/com/eco/websocket/netty/NettyConnectionUtil.java b/src/main/java/com/eco/websocket/netty/NettyConnectionUtil.java new file mode 100644 index 0000000..a937de1 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/NettyConnectionUtil.java @@ -0,0 +1,183 @@ +package com.eco.websocket.netty; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.eco.common.rpc.CommunityCustomerInfoService; +import com.eco.common.rpc.NettyConnectionService; +import com.eco.websocket.netty.utils.MessageUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_PROTOCOL; + +@Slf4j +@Service +@org.apache.dubbo.config.annotation.Service(protocol = DUBBO_PROTOCOL, timeout = 10000) +public class NettyConnectionUtil implements NettyConnectionService { + + /** + * key 为deviceid + * value 为channel 用于存贮通道 + */ + public static Map deviceid_nettyChannel = new ConcurrentHashMap<>(); + + /** + * key userId 微信唯一id 或者 pc端账号名 + * value ChannelHandlerContext + */ + public static Map userId_nettyChannel = new ConcurrentHashMap<>(); + + @Reference(check = false) + private CommunityCustomerInfoService communityCustomerInfoService; + + /** + * 存储通道 + */ + public synchronized void saveDeviceChannel(ChannelHandlerContext cx, String deviceid) { + ChannelHandlerContext cc = getNettyChannelByDeviceId(deviceid); + if (null != cc) { + deviceid_nettyChannel.remove(deviceid); + } + deviceid_nettyChannel.put(deviceid, cx); + } + + /** + * 注册真实用户,客户端以imei为准、pc端以账号用户名为准 + */ + public synchronized void registerUserid(String account, ChannelHandlerContext cx) { + log.info("register:当前netty通道连接数:{},有效通道连接数:{}", deviceid_nettyChannel.size(), userId_nettyChannel.size()); + ChannelHandlerContext chc = userId_nettyChannel.get(account); + if (null != chc) { + userId_nettyChannel.remove(account); + } + userId_nettyChannel.put(account, cx); + + + // 更新客服上线 + communityCustomerInfoService.updateOnlineStatus(account, true); + } + + + /** + * 通过deviceid获取通道 + * + * @return + */ + public static synchronized ChannelHandlerContext getNettyChannelByDeviceId(String deviceid) { + return deviceid_nettyChannel.get(deviceid); + } + + /** + * 删除通道 + */ + public synchronized void removeChannel(ChannelHandlerContext cx) { + // 清除设备通道 + try { + String nettyId = getNettyId(cx); + if (!StringUtils.isEmpty(nettyId)) { + String deviceid = getDeviceIdByNettyId(nettyId); + if (null != deviceid && !"".equals(deviceid)) { + deviceid_nettyChannel.remove(deviceid); + } + + // 清除微信通道 + String userId = getUserIdByNettyId(nettyId); + if (!StringUtils.isEmpty(userId)) { + userId_nettyChannel.remove(userId); + } + + // 更新客服下线 + communityCustomerInfoService.updateOnlineStatus(userId, false); + + } + } catch (Exception e) { + log.error("error --> ", e);; + } + } + + /** + * 客户端退出时调用,清理数据 + */ + public synchronized void exit(ChannelHandlerContext ctx) { + try { + log.info("exit:当前netty通道连接数:{},有效通道连接数:{}", deviceid_nettyChannel.size(), userId_nettyChannel.size()); + removeChannel(ctx); + ctx.close(); + } catch (Exception e) { + log.error("error --> ", e);; + } + + } + + /** + * 通过userId获取nettyId + */ + public synchronized String getUserIdByNettyId(String nettyId) { + return getKey(userId_nettyChannel, nettyId); + } + + /** + * 根据通道获取用户id + * + * @param cx 通道 + * @return + */ + public synchronized String getUserIdByNettyId(ChannelHandlerContext cx) { + return getUserIdByNettyId(cx.channel().id().asShortText()); + } + + /** + * 通过nettyid获取deviceid + */ + public synchronized String getDeviceIdByNettyId(String nettyId) { + return getKey(deviceid_nettyChannel, nettyId); + } + + public synchronized ChannelHandlerContext getClientChannelHandlerContextByUserId(String userId) { + if (userId == null) { + return null; + } + return userId_nettyChannel.get(userId); + } + + @Override + public boolean containsKey(String userId) { + + return userId_nettyChannel.containsKey(userId); + } + + public synchronized String getNettyId(ChannelHandlerContext cx) { + return cx.channel().id().asShortText(); + } + + /** + * 根据map的value获取map的key + */ + private synchronized String getKey(Map map, String value) { + for (Map.Entry entry : map.entrySet()) { + if (StrUtil.equals(value, getNettyId(entry.getValue()))) { + return entry.getKey(); + } + } + return null; + } + + @Override + public void accountPush(String account, String enumMsgType, String refMsgId, JSONObject object) { + ChannelHandlerContext chxOther = getClientChannelHandlerContextByUserId(account); + if (null != chxOther) { + if (StringUtils.isNotEmpty(refMsgId)) { + MessageUtil.sendJsonStringMsg(chxOther, enumMsgType, getNettyId(chxOther), refMsgId, object); + } else { + MessageUtil.sendJsonStringMsg(chxOther, enumMsgType, getNettyId(chxOther), null, object); + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/WebSocketServer.java b/src/main/java/com/eco/websocket/netty/WebSocketServer.java new file mode 100644 index 0000000..f4c1593 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/WebSocketServer.java @@ -0,0 +1,83 @@ +package com.eco.websocket.netty; + +import com.eco.websocket.netty.handler.WebSocketJsonHandler; +import com.eco.websocket.utils.PropertyUtils; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.codec.http.HttpObjectAggregator; +import io.netty.handler.codec.http.HttpServerCodec; +import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; +import io.netty.handler.stream.ChunkedWriteHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + +@Service +@Slf4j +public class WebSocketServer { + + @Resource + private Environment env; + + @Autowired + private WebSocketJsonHandler webSocketFrameHandler; + + // 程序初始方法入口注解,提示spring这个程序先执行这里 + @PostConstruct + public void nettyMain() { + new Thread(() -> { + // 1 创建线两个程组 + // 一个是用于处理服务器端接收客户端连接的 + // 一个是进行网络通信的(网络读写的) + EventLoopGroup bossGroup = new NioEventLoopGroup(); + EventLoopGroup workerGroup = new NioEventLoopGroup(); + try { + // 2 创建辅助工具类,用于服务器通道的一系列配置 + ServerBootstrap b = new ServerBootstrap(); + b.group(bossGroup, workerGroup); + b.channel(NioServerSocketChannel.class);// 指定NIO的模式 +// b.option(ChannelOption.SO_KEEPALIVE, true); // 保持连接 + b.childHandler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + //websocket协议本身是基于http协议的,所以这边也要使用http解编码器 + pipeline.addLast(new HttpServerCodec()); + //以块的方式来写的处理器 + pipeline.addLast(new ChunkedWriteHandler()); + //netty是基于分段请求的,HttpObjectAggregator的作用是将请求分段再聚合,参数是聚合字节的最大长度 + pipeline.addLast(new HttpObjectAggregator(65536)); + pipeline.addLast(new WebSocketServerProtocolHandler("/")); + pipeline.addLast(webSocketFrameHandler); + } + }); + + + // 3、绑定端口 同步等待成功 + Integer port = PropertyUtils.getNettyWebsocketPort(env); + ChannelFuture f = b.bind(port).sync(); + log.info("netty启动成功。。。" + "websocket占用端口" + port); + + // 4、等待服务端监听端口关闭 + f.channel().closeFuture().sync(); + + } catch (Exception e) { + log.info("netty启动失败 -- > ", e); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + }).start(); + } + +} diff --git a/src/main/java/com/eco/websocket/netty/async/AsyncTaskService.java b/src/main/java/com/eco/websocket/netty/async/AsyncTaskService.java new file mode 100644 index 0000000..0d771e8 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/async/AsyncTaskService.java @@ -0,0 +1,57 @@ +package com.eco.websocket.netty.async; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.google.protobuf.Message; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +@Service +@EnableAsync +@Slf4j +public class AsyncTaskService { + + + /** + * 转发消息给手机客户端 + */ + @Async + public void msgSend2Phone(ChannelHandlerContext ctx, String wechatId, TransportMessageOuterClass.EnumMsgType type, TransportMessageOuterClass.TransportMessage vo, Message req) throws Exception { + + try { + log.info(LocalDateTime.now() + " msgSend2Phone 对应的线程名: " + Thread.currentThread().getName()); + + if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.TalkToFriendTask.getNumber()) { + // 客服发送消息给客户 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.TriggerConversationPushTask.getNumber()) { + // 会话列表 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.TriggerHistoryMsgPushTask.getNumber()) { + // 历史聊天记录 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.RequestTalkDetailTask.getNumber()) { + // 同步视频、图片、音频资源 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.ModifyFriendMemoTask.getNumber()) { + // 备注、电话 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.ContactLabelTask.getNumber()) { + // 打标签 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.TriggerFriendPushTask.getNumber()) { + // 通讯录 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.TriggerChatroomPushTask.getNumber()) { + // 群聊通讯录 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.TriggerMessageReadTask.getNumber()) { + // 消息已读 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.RequestChatRoomInfoTask.getNumber()) { + // 请求具体群聊的详细信息 + } else if (type.getNumber() == TransportMessageOuterClass.EnumMsgType.RequestContactsInfoTask.getNumber()) { + // 获取联系人详细信息(不一定是好友,如群聊成员) + } + + } catch (Throwable e) { + log.error("error --> ", e);; + } + } + +} diff --git a/src/main/java/com/eco/websocket/netty/common/Constant.java b/src/main/java/com/eco/websocket/netty/common/Constant.java new file mode 100644 index 0000000..7d3648d --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/common/Constant.java @@ -0,0 +1,16 @@ +package com.eco.websocket.netty.common; + +public class Constant { + + public static final String ERROR_MSG_ILLEGALDEVICE = "非法设备"; + public static final String ERROR_MSG_DECODFAIL = "服务器繁忙"; + public static final String ERROR_MSG_VERIFYWAY = "认证方式不支持"; + public static final String ERROR_MSG_LOGINFAIL = "账号密码错误"; + public static final String ERROR_MSG_NOT_ACCOUNT = "账号不存在或账号密码错误"; + public static final String ERROR_MSG_NOTONLINE = "对方不在线"; + public static final String ERROR_MSG_PARAMERROR = "参数传入错误"; + public static final String ERROR_MSG_LOGINNORIGHT = "登录账号无权限"; + public static final String ERROR_MSG_ELSEWHERELOGINN = "账号已在别处登录"; + public static final String ERROR_MSG_DATABASENOTBIND = "数据库未绑定"; + +} diff --git a/src/main/java/com/eco/websocket/netty/common/listener/HttpEventListener.java b/src/main/java/com/eco/websocket/netty/common/listener/HttpEventListener.java new file mode 100644 index 0000000..09a9ae3 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/common/listener/HttpEventListener.java @@ -0,0 +1,33 @@ +package com.eco.websocket.netty.common.listener; + +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.context.WebServerInitializedEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +/** + * @author qp + * @date 2023/5/31 12:03 + */ +@Slf4j +@Component +public class HttpEventListener implements ApplicationListener { + private volatile boolean isServerStarted = false; + + public boolean isServerStarted() { + return isServerStarted; + } + + @Override + public void onApplicationEvent(@NonNull WebServerInitializedEvent event) { + if (event.getWebServer() == null) { + return; + } + int port = event.getWebServer().getPort(); + if (port > 0) { + log.info("http server started, port:{}", port); + isServerStarted = true; + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/decoder/SelfDecoder.java b/src/main/java/com/eco/websocket/netty/decoder/SelfDecoder.java new file mode 100644 index 0000000..6e2c829 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/decoder/SelfDecoder.java @@ -0,0 +1,62 @@ +package com.eco.websocket.netty.decoder; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.google.protobuf.MessageLite; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +import java.util.List; + +public class SelfDecoder extends ByteToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + while (in.readableBytes() > 4) { // 如果可读长度小于包头长度,退出。 + in.markReaderIndex(); + + // 获取包头中的body长度 + byte b3 = in.readByte(); + byte b2 = in.readByte(); + byte b1 = in.readByte(); + byte b0 = in.readByte(); + + int length = (b0 & 0xff) | ((b1 << 8) & 0xff00) | ((b2 << 16) & 0xff0000) | ((b3 << 24) & 0xff000000); + + + // 如果可读长度小于body长度,恢复读指针,退出。 + if (in.readableBytes() < length) { + in.resetReaderIndex(); + return; + } + + // 读取body + ByteBuf bodyByteBuf = in.readBytes(length); + + byte[] array; + int offset; + + int readableLen = bodyByteBuf.readableBytes(); + if (bodyByteBuf.hasArray()) { + array = bodyByteBuf.array(); + offset = bodyByteBuf.arrayOffset() + bodyByteBuf.readerIndex(); + } else { + array = new byte[readableLen]; + bodyByteBuf.getBytes(bodyByteBuf.readerIndex(), array, 0, readableLen); + offset = 0; + } + + //反序列化 + MessageLite result = decodeBody(array, offset, readableLen); + out.add(result); + + bodyByteBuf.release();//待验证 + } + } + + public MessageLite decodeBody(byte[] array, int offset, int length) throws Exception { + + return TransportMessageOuterClass.TransportMessage.getDefaultInstance(). + getParserForType().parseFrom(array, offset, length); + + } +} diff --git a/src/main/java/com/eco/websocket/netty/decoder/SelfEncoder.java b/src/main/java/com/eco/websocket/netty/decoder/SelfEncoder.java new file mode 100644 index 0000000..c28b60e --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/decoder/SelfEncoder.java @@ -0,0 +1,32 @@ +package com.eco.websocket.netty.decoder; + +import com.google.protobuf.MessageLite; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; + +public class SelfEncoder extends MessageToByteEncoder { + + @Override + protected void encode(ChannelHandlerContext ctx, MessageLite msg, ByteBuf out) throws Exception { + + byte[] body = msg.toByteArray(); + byte[] header = encodeHeader(msg, body.length); + + out.writeBytes(header); + out.writeBytes(body); + + } + + private byte[] encodeHeader(MessageLite msg, int value) { + + byte[] src = new byte[4]; + src[0] = (byte) ((value >> 24) & 0xFF); + src[1] = (byte) ((value >> 16) & 0xFF); + src[2] = (byte) ((value >> 8) & 0xFF); + src[3] = (byte) (value & 0xFF); + + return src; + + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/JsonMessageHandler.java b/src/main/java/com/eco/websocket/netty/handler/JsonMessageHandler.java new file mode 100644 index 0000000..9e3b12e --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/JsonMessageHandler.java @@ -0,0 +1,8 @@ +package com.eco.websocket.netty.handler; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import io.netty.channel.ChannelHandlerContext; + +public interface JsonMessageHandler { + void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) throws Exception; +} diff --git a/src/main/java/com/eco/websocket/netty/handler/MessageHandler.java b/src/main/java/com/eco/websocket/netty/handler/MessageHandler.java new file mode 100644 index 0000000..5e22e22 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/MessageHandler.java @@ -0,0 +1,8 @@ +package com.eco.websocket.netty.handler; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import io.netty.channel.ChannelHandlerContext; + +public interface MessageHandler { + void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo); +} diff --git a/src/main/java/com/eco/websocket/netty/handler/WebSocketJsonHandler.java b/src/main/java/com/eco/websocket/netty/handler/WebSocketJsonHandler.java new file mode 100644 index 0000000..835ab48 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/WebSocketJsonHandler.java @@ -0,0 +1,63 @@ +package com.eco.websocket.netty.handler; + +import com.eco.websocket.netty.processor.WebSocketMessageProcessor; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +@Sharable +@Slf4j +public class WebSocketJsonHandler extends SimpleChannelInboundHandler { + + @Autowired + private NettyConnectionUtil nettyConnectionUtil; + + @Autowired + private WebSocketMessageProcessor messageProcessor; + + /** + * 覆盖了 channelRead0() 事件处理方法。 每当从服务端读到客户端写入信息时, 其中如果你使用的是 Netty 5.x 版本时, 需要把 + * channelRead0() 重命名为messageReceived() + */ + @Override + protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception { + String text = msg.text(); + log.debug("收到消息:{}", text); + + messageProcessor.handler(ctx, msg); + ctx.flush(); + } + + /** + * 每当从服务端收到新的客户端连接时 + */ + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + // 打印出channel唯一值,asLongText方法是channel的id的全名 + log.info("handlerAdded:" + ctx.channel().id().asLongText()); + } + + /** + * 每当从服务端收到客户端断开时 + */ + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + log.info("handlerRemoved:" + ctx.channel().id().asLongText()); + //NettyConnectionUtil.exit(ctx); + nettyConnectionUtil.exit(ctx); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + log.error("websocket exception exit{}", cause.toString()); + //NettyConnectionUtil.exit(ctx); + nettyConnectionUtil.exit(ctx); + } + +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/AcceptFriendAddRequestTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/AcceptFriendAddRequestTaskWebsocketHandler.java new file mode 100644 index 0000000..8f19f5f --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/AcceptFriendAddRequestTaskWebsocketHandler.java @@ -0,0 +1,43 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.AcceptFriendAddRequestTask.AcceptFriendAddRequestTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class AcceptFriendAddRequestTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 接受微信好友请求 + */ + @Async + @Override + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + AcceptFriendAddRequestTaskMessage.Builder bd = AcceptFriendAddRequestTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + AcceptFriendAddRequestTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.AcceptFriendAddRequestTask, vo, req); + + } + catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/AccountLogoutNoticeWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/AccountLogoutNoticeWebsocketHandler.java new file mode 100644 index 0000000..98c4e13 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/AccountLogoutNoticeWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class AccountLogoutNoticeWebsocketHandler implements JsonMessageHandler { + + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * pc客户端退出通知 + */ + @Override + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// AccountLogoutNoticeMessage.Builder bd = AccountLogoutNoticeMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// AccountLogoutNoticeMessage req = bd.build(); + + //3、告诉客户端消息已收到 + MessageUtil.sendJsonMsg(ctx, TransportMessageOuterClass.EnumMsgType.DeviceExitNotice, vo.getAccessToken(), vo.getId(), null); + //关闭连接 + nettyConnectionUtil.exit(ctx); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendFromPhonebookTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendFromPhonebookTaskWebsocketHandler.java new file mode 100644 index 0000000..a19e72f --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendFromPhonebookTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.AddFriendFromPhonebookTask.AddFriendFromPhonebookTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class AddFriendFromPhonebookTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信通讯录加好友 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + AddFriendFromPhonebookTaskMessage.Builder bd = AddFriendFromPhonebookTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + AddFriendFromPhonebookTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.AddFriendFromPhonebookTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendInChatRoomTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendInChatRoomTaskWebsocketHandler.java new file mode 100644 index 0000000..fffd115 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendInChatRoomTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.AddFriendInChatRoomTask.AddFriendInChatRoomTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class AddFriendInChatRoomTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信群内加好友 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + AddFriendInChatRoomTaskMessage.Builder bd = AddFriendInChatRoomTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + AddFriendInChatRoomTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.AddFriendInChatRoomTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendWithSceneTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendWithSceneTaskWebsocketHandler.java new file mode 100644 index 0000000..5d7a3a5 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendWithSceneTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.AddFriendWithSceneTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class AddFriendWithSceneTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 微信各场景加好友 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + AddFriendWithSceneTask.AddFriendWithSceneTaskMessage.Builder bd = AddFriendWithSceneTask.AddFriendWithSceneTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + AddFriendWithSceneTask.AddFriendWithSceneTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.AddFriendWithSceneTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendsTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendsTaskWebsocketHandler.java new file mode 100644 index 0000000..e78036b --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/AddFriendsTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.AddFriendsTask.AddFriendsTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class AddFriendsTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信添加好友任务 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + AddFriendsTaskMessage.Builder bd = AddFriendsTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + AddFriendsTaskMessage req = bd.build(); + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.AddFriendsTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/AgreeJoinChatRoomTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/AgreeJoinChatRoomTaskWebsocketHandler.java new file mode 100644 index 0000000..0a16901 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/AgreeJoinChatRoomTaskWebsocketHandler.java @@ -0,0 +1,29 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class AgreeJoinChatRoomTaskWebsocketHandler implements JsonMessageHandler { + + /** + * 同意微信加入群聊 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.info("同意微信加入群聊:{}", contentJsonStr); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomActionTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomActionTaskWebsocketHandler.java new file mode 100644 index 0000000..a2979e0 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomActionTaskWebsocketHandler.java @@ -0,0 +1,45 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.ChatRoomActionTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ChatRoomActionTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private ChatRoomActionTaskService chatRoomActionTaskService; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * 微信群聊管理 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// ChatRoomActionTaskMessage.Builder bd = ChatRoomActionTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// ChatRoomActionTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + //将消息转发送给手机客户端 + chatRoomActionTaskService.chatRoomActionTask(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomInviteApproveTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomInviteApproveTaskWebsocketHandler.java new file mode 100644 index 0000000..7994dab --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ChatRoomInviteApproveTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.ChatRoomInviteApproveTask.ChatRoomInviteApproveTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ChatRoomInviteApproveTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信群主通过入群申请 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + ChatRoomInviteApproveTaskMessage.Builder bd = ChatRoomInviteApproveTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + ChatRoomInviteApproveTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.ChatRoomInviteApproveTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentDeleteTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentDeleteTaskWebsocketHandler.java new file mode 100644 index 0000000..ffddbba --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentDeleteTaskWebsocketHandler.java @@ -0,0 +1,42 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.CircleCommentDeleteTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class CircleCommentDeleteTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信朋友圈评论删除 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + CircleCommentDeleteTask.CircleCommentDeleteTaskMessage.Builder bd = CircleCommentDeleteTask.CircleCommentDeleteTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + CircleCommentDeleteTask.CircleCommentDeleteTaskMessage req = bd.build(); + // CircleCommentDeleteTaskMessage req = + // vo.getContent().unpack(CircleCommentDeleteTaskMessage.class); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.CircleCommentDeleteTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentReplyTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentReplyTaskWebsocketHandler.java new file mode 100644 index 0000000..99fb707 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleCommentReplyTaskWebsocketHandler.java @@ -0,0 +1,42 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.CircleCommentReplyTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class CircleCommentReplyTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信朋友圈评论回复 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + CircleCommentReplyTask.CircleCommentReplyTaskMessage.Builder bd = CircleCommentReplyTask.CircleCommentReplyTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + CircleCommentReplyTask.CircleCommentReplyTaskMessage req = bd.build(); + // CircleCommentReplyTaskMessage req = vo.getContent().unpack(CircleCommentReplyTaskMessage.class); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.CircleCommentReplyTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/CircleLikeTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleLikeTaskWebsocketHandler.java new file mode 100644 index 0000000..7e0c79c --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleLikeTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.CircleLikeTask.CircleLikeTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class CircleLikeTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信朋友圈点赞 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + CircleLikeTaskMessage.Builder bd = CircleLikeTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + CircleLikeTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.CircleLikeTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgClearTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgClearTaskWebsocketHandler.java new file mode 100644 index 0000000..2b4bfce --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgClearTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.CircleMsgClearTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class CircleMsgClearTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 清除朋友圈消息 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + CircleMsgClearTask.CircleMsgClearTaskMessage.Builder bd = CircleMsgClearTask.CircleMsgClearTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + CircleMsgClearTask.CircleMsgClearTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.CircleMsgClearTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgReadTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgReadTaskWebsocketHandler.java new file mode 100644 index 0000000..08b62bb --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/CircleMsgReadTaskWebsocketHandler.java @@ -0,0 +1,38 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.CircleMsgReadTask.CircleMsgReadTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class CircleMsgReadTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 朋友圈消息已读 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + CircleMsgReadTaskMessage.Builder bd = CircleMsgReadTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + CircleMsgReadTaskMessage req = bd.build(); + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.CircleMsgReadTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ClearAllChatMsgTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ClearAllChatMsgTaskWebsocketHandler.java new file mode 100644 index 0000000..6e7e9b0 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ClearAllChatMsgTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.ClearAllChatMsgTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ClearAllChatMsgTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 清空微信聊天记录 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + ClearAllChatMsgTask.ClearAllChatMsgTaskMessage.Builder bd = ClearAllChatMsgTask.ClearAllChatMsgTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + ClearAllChatMsgTask.ClearAllChatMsgTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.ClearAllChatMsgTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ClipBoardTalkToFriendTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ClipBoardTalkToFriendTaskWebsocketHandler.java new file mode 100644 index 0000000..f186334 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ClipBoardTalkToFriendTaskWebsocketHandler.java @@ -0,0 +1,60 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.alibaba.fastjson.JSONObject; +import com.eco.common.base.dto.WeChatChatRoomDto; +import com.eco.common.rpc.helper.ClipBoardTalkToFriendTaskService; +import com.eco.common.rpc.helper.qw.QwClipBoardTalkToFriendTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 剪切板信息发送 + * + * @author qp + */ +@Service +@Slf4j +public class ClipBoardTalkToFriendTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private ClipBoardTalkToFriendTaskService clipBoardTalkToFriendTaskHelper; + @Reference(check = false) + private QwClipBoardTalkToFriendTaskService qwClipBoardTalkToFriendTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + /** + * 给微信好友发消息 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + // 发送信息 + JSONObject jsonObject = JSONObject.parseObject(contentJsonStr); + String weChatId = jsonObject.getString("WeChatId"); + if (WeChatChatRoomDto.isEnterpriseId(weChatId)) { + qwClipBoardTalkToFriendTaskHelper.clipBoardTalkToFriendTask(contentJsonStr, account); + } else { + clipBoardTalkToFriendTaskHelper.clipBoardTalkToFriendTask(contentJsonStr, account); + + } + } catch (Exception e) { + log.error("ClipBoardTalkToFriendTaskWebsocketHandler -> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelDeleteTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelDeleteTaskWebsocketHandler.java new file mode 100644 index 0000000..98c5a3c --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelDeleteTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.ContactLabelDeleteTask.ContactLabelDeleteTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ContactLabelDeleteTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 删除微信标签 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + ContactLabelDeleteTaskMessage.Builder bd = ContactLabelDeleteTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + ContactLabelDeleteTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.ContactLabelDeleteTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelTaskWebsocketHandler.java new file mode 100644 index 0000000..090b1bd --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ContactLabelTaskWebsocketHandler.java @@ -0,0 +1,46 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.ContactLabelTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ContactLabelTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private ContactLabelTaskService contactLabelTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + /** + * 设置联系人标签---pc端经过服务端转发给手机端 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// ContactLabelTaskMessage.Builder bd = ContactLabelTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// ContactLabelTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + //将消息转发送给手机客户端 + contactLabelTaskHelper.ContactLabelTask(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ContactSetLabelTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ContactSetLabelTaskWebsocketHandler.java new file mode 100644 index 0000000..4697907 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ContactSetLabelTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.ContactSetLabelTask.ContactSetLabelTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ContactSetLabelTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 设置用户标签 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + ContactSetLabelTaskMessage.Builder bd = ContactSetLabelTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + ContactSetLabelTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.ContactSetLabelTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/DeleteFriendTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/DeleteFriendTaskWebsocketHandler.java new file mode 100644 index 0000000..aebbc6c --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/DeleteFriendTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.DeleteFriendTask.DeleteFriendTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class DeleteFriendTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 删除好友 ---pc端经过服务端转发给手机端 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + DeleteFriendTaskMessage.Builder bd = DeleteFriendTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + DeleteFriendTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.DeleteFriendTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/DeleteSNSNewsTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/DeleteSNSNewsTaskWebsocketHandler.java new file mode 100644 index 0000000..c597271 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/DeleteSNSNewsTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.DeleteSNSNewsTask.DeleteSNSNewsTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class DeleteSNSNewsTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 删除微信朋友圈 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + DeleteSNSNewsTaskMessage.Builder bd = DeleteSNSNewsTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + DeleteSNSNewsTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.DeleteSNSNewsTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/DeviceAuthReqWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/DeviceAuthReqWebsocketHandler.java new file mode 100644 index 0000000..0f08b60 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/DeviceAuthReqWebsocketHandler.java @@ -0,0 +1,187 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.DeviceAuthReq.DeviceAuthReqMessage; +import Jubo.JuLiao.IM.Wx.Proto.DeviceAuthRsp.DeviceAuthRspMessage; +import Jubo.JuLiao.IM.Wx.Proto.DeviceAuthRsp.DeviceAuthRspMessage.ExtraMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.eco.common.base.dto.SupportLoginDto; +import com.eco.common.base.entity.CommunityCustomerInfo; +import com.eco.common.redis.RedisCacheHelper; +import com.eco.common.rpc.CommunityCustomerInfoService; +import com.eco.common.rpc.CommunityDockingConfigService; +import com.eco.common.utils.CacheDataUtil; +import com.eco.fission.common.param.constants.Consts; +import com.eco.fission.common.rpc.RpcCustomerVisibleRangesService; +import com.eco.websocket.netty.NettyConnectionUtil; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.common.listener.HttpEventListener; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.Base64; +import java.util.concurrent.TimeUnit; + +@Service +@Slf4j +public class DeviceAuthReqWebsocketHandler implements JsonMessageHandler { + + @Resource + private NettyConnectionUtil nettyConnectionUtil; + @Reference(check = false) + private CommunityCustomerInfoService communityCustomerInfoService; + + @Reference(check = false) + private RpcCustomerVisibleRangesService rpcCustomerVisibleRangesService; + + @Reference(check = false) + private CommunityDockingConfigService communityDockingConfigService; + @Resource + private RedisCacheHelper redisCacheHelper; + + @Autowired + HttpEventListener httpEventListener; + + /** + * 设备校验 如果校验通过存储token、账号建立连接 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + + try { + log.debug(contentJsonStr); + if (!httpEventListener.isServerStarted()) { + // http 服务还没启动 + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InternalError, Constant.ERROR_MSG_DECODFAIL); + return; + } + + DeviceAuthReqMessage.Builder bd = DeviceAuthReqMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + DeviceAuthReqMessage req = bd.build(); + // 1、校验用户信息 + byte[] byteArray = Base64.getDecoder().decode(req.getCredential()); + String str = new String(byteArray); + CommunityCustomerInfo customerInfo = null; + if (req.getAuthType().equals(DeviceAuthReqMessage.EnumAuthType.Username)) { + // 用户名密码方式(此方式Credential应传入base64(user:pwd)) + if (StringUtils.isEmpty(str)) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_PARAMERROR); + return; + } + log.debug("账号密码登录:name=" + str); + String[] strs = str.split(":"); + if (strs.length < 1 || strs[0] == null) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_PARAMERROR); + return; + } + // pc客服端 + customerInfo = communityCustomerInfoService.getByAccount(strs[0]); + if (customerInfo == null || !StrUtil.equals(customerInfo.getPwd(), strs[1])) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_NOT_ACCOUNT); + return; + } + } else if (req.getAuthType().equals(DeviceAuthReqMessage.EnumAuthType.DeviceCode)) { + // 手机端openid的方式(此方式Credential应传入base64(openid)) + if (StringUtils.isEmpty(str)) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + return; + } + String key = CacheDataUtil.getKey("SUPPORT", str); + String value = redisCacheHelper.getValueCache(key); + SupportLoginDto supportLoginDto = JSON.parseObject(value, SupportLoginDto.class); + String openId = supportLoginDto.getOpenId(); + log.debug("openid登录:openid=" + openId); + if (StrUtil.equalsIgnoreCase(openId, "null")) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_PARAMERROR); + return; + } + customerInfo = communityCustomerInfoService.getByOpenid(str); + } else { + // 暂不支持的方式 + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.NoRight, Constant.ERROR_MSG_VERIFYWAY); + return; + } + + if (customerInfo == null) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.NoRight, Constant.ERROR_MSG_NOT_ACCOUNT); + return; + } + // 账号状态正常的时候 + if (!customerInfo.getIsEnable()) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.NoRight, Constant.ERROR_MSG_LOGINNORIGHT); + return; + } + // 判断是否有登录,如果有登录直接踢下线 + ChannelHandlerContext chc = nettyConnectionUtil.getClientChannelHandlerContextByUserId(customerInfo.getAccount()); + if (null != chc) { + // 账号已在别处登录 + MessageUtil.sendJsonErrMsg(chc, TransportMessageOuterClass.EnumErrorCode.NoRight, Constant.ERROR_MSG_ELSEWHERELOGINN); + chc.close(); + } + + // 生成用户token信息 + String token = nettyConnectionUtil.getNettyId(ctx); + + // 存储 用户id 和 通道信息 + nettyConnectionUtil.saveDeviceChannel(ctx, customerInfo.getAccount()); + // 存储微信全局id 与通道 + nettyConnectionUtil.registerUserid(customerInfo.getAccount(), ctx); + + sendMsg(customerInfo, token, ctx, vo); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } + + private void sendMsg(CommunityCustomerInfo customerInfo, String token, ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo) { + + Integer supplierid = customerInfo.getUserId(); + // 商家名称 + String suppliername = customerInfo.getUserId() + "_" + customerInfo.getAccount(); + // 个人账号id + String unionid = customerInfo.getAccount(); + // 昵称 + String nickname = customerInfo.getNick(); + + ExtraMessage.Builder buider = ExtraMessage.newBuilder(); + buider.setSupplierId(supplierid); + buider.setSupplierName(suppliername); + // 账号类型 子账号 + buider.setAccountType(TransportMessageOuterClass.EnumAccountType.SubUser); + + if (!StringUtils.isEmpty(nickname)) { + buider.setUnionId(unionid); + buider.setNickName(nickname); + } + buider.setToken(token); + String cacheKeyLogin = Consts.APP_KEY_CUSTOMER + ":CUSTOMER_LOGIN:" + buider.getToken(); + redisCacheHelper.addValueCache(cacheKeyLogin, unionid, 1, TimeUnit.DAYS); + + ExtraMessage ext = buider.build(); + DeviceAuthRspMessage resp = DeviceAuthRspMessage.newBuilder().setAccessToken(token).setExtra(ext).build(); + + // 缓存此客服可见的会话、通讯录、群聊数据 + rpcCustomerVisibleRangesService.initCustomerVisibleRanges(unionid); + MessageUtil.sendJsonMsg(ctx, TransportMessageOuterClass.EnumMsgType.DeviceAuthRsp, null, vo.getId(), resp); + + // 初始化配置推送 + Integer userId = customerInfo.getUserId(); + communityDockingConfigService.pushConfig(userId, unionid); + } + +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/FindContactTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/FindContactTaskWebsocketHandler.java new file mode 100644 index 0000000..0ca1cdd --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/FindContactTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.FindContactTask.FindContactTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class FindContactTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 查找微信联系人 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + FindContactTaskMessage.Builder bd = FindContactTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + FindContactTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.FindContactTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageByContentTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageByContentTaskWebsocketHandler.java new file mode 100644 index 0000000..9d53dac --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageByContentTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.ForwardMessageByContentTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ForwardMessageByContentTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 转发微信消息内容 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + ForwardMessageByContentTask.ForwardMessageByContentTaskMessage.Builder bd = ForwardMessageByContentTask.ForwardMessageByContentTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + ForwardMessageByContentTask.ForwardMessageByContentTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.ForwardMessageByContentTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageTaskWebsocketHandler.java new file mode 100644 index 0000000..277babc --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMessageTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.ForwardMessageTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ForwardMessageTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信消息转发 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + ForwardMessageTask.ForwardMessageTaskMessage.Builder bd = ForwardMessageTask.ForwardMessageTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + ForwardMessageTask.ForwardMessageTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.ForwardMessageTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMultiMessageTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMultiMessageTaskWebsocketHandler.java new file mode 100644 index 0000000..64cf973 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ForwardMultiMessageTaskWebsocketHandler.java @@ -0,0 +1,39 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.ForwardMultiMessageTask.ForwardMultiMessageTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ForwardMultiMessageTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 转发多条微信聊天消息(逐条转发) + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + ForwardMultiMessageTaskMessage.Builder bd = ForwardMultiMessageTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + ForwardMultiMessageTaskMessage req = bd.build(); + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.ForwardMultiMessageTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/GetContactInfoTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/GetContactInfoTaskWebsocketHandler.java new file mode 100644 index 0000000..91e3ad8 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/GetContactInfoTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.GetContactInfoTask.GetContactInfoTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class GetContactInfoTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 通过指令获取信息,可获取群成员的详细信息 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + GetContactInfoTaskMessage.Builder bd = GetContactInfoTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + GetContactInfoTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.GetContactInfoTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/GetFriendDetectResultWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/GetFriendDetectResultWebsocketHandler.java new file mode 100644 index 0000000..083b9ad --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/GetFriendDetectResultWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.GetFriendDetectResult.GetFriendDetectResultMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class GetFriendDetectResultWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 获取最后一次清粉的结果 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + GetFriendDetectResultMessage.Builder bd = GetFriendDetectResultMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + GetFriendDetectResultMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.GetFriendDetectResult, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/HeartBeatReqWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/HeartBeatReqWebsocketHandler.java new file mode 100644 index 0000000..7102fb3 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/HeartBeatReqWebsocketHandler.java @@ -0,0 +1,33 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class HeartBeatReqWebsocketHandler implements JsonMessageHandler { + + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * websocket 心跳接口 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + if (!nettyConnectionUtil.getNettyId(ctx).equals(vo.getAccessToken())) { + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.NoRight, "token过期"); + nettyConnectionUtil.exit(ctx); + } else { + MessageUtil.sendJsonMsg(ctx, TransportMessageOuterClass.EnumMsgType.MsgReceivedAck, vo.getAccessToken(), vo.getId(), null); + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/JoinGroupByQrTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/JoinGroupByQrTaskWebsocketHandler.java new file mode 100644 index 0000000..a79ff2b --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/JoinGroupByQrTaskWebsocketHandler.java @@ -0,0 +1,44 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.JoinGroupByQrTask.JoinGroupByQrTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class JoinGroupByQrTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信扫二维码加群 + * + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + JoinGroupByQrTaskMessage.Builder bd = JoinGroupByQrTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + JoinGroupByQrTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.JoinGroupByQrTask, vo, req); + + } + catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/ModifyFriendMemoTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/ModifyFriendMemoTaskWebsocketHandler.java new file mode 100644 index 0000000..c10afff --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/ModifyFriendMemoTaskWebsocketHandler.java @@ -0,0 +1,46 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.ModifyFriendMemoTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class ModifyFriendMemoTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private ModifyFriendMemoTaskService modifyFriendMemoTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + /** + * 修改微信备注 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// ModifyFriendMemoTaskMessage.Builder bd = ModifyFriendMemoTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// ModifyFriendMemoTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + //将消息转发送给手机客户端 + modifyFriendMemoTaskHelper.ModifyFriendMemoTask(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/MsgReceivedAckWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/MsgReceivedAckWebsocketHandler.java new file mode 100644 index 0000000..f4bfdbe --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/MsgReceivedAckWebsocketHandler.java @@ -0,0 +1,28 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +@Service +@Slf4j +public class MsgReceivedAckWebsocketHandler implements JsonMessageHandler { + + /** + * 消息接收确认回复(接收或拒绝接收) + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + //1、校验用户信息 + //2、告诉客户端消息已收到 + MessageUtil.sendJsonMsg(ctx, TransportMessageOuterClass.EnumMsgType.MsgReceivedAck, vo.getAccessToken(), vo.getId(), null); + + } catch (Exception e) { + log.error("error --> ", e); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/OneKeyLikeTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/OneKeyLikeTaskWebsocketHandler.java new file mode 100644 index 0000000..3616214 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/OneKeyLikeTaskWebsocketHandler.java @@ -0,0 +1,43 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.OneKeyLikeTask.OneKeyLikeTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class OneKeyLikeTaskWebsocketHandler implements JsonMessageHandler { + + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信朋友圈点赞 + * + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + OneKeyLikeTaskMessage.Builder bd = OneKeyLikeTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + OneKeyLikeTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.OneKeyLikeTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PhoneActionTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PhoneActionTaskWebsocketHandler.java new file mode 100644 index 0000000..ba0fb7a --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PhoneActionTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PhoneActionTask.PhoneActionTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PhoneActionTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 操作手机指令 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PhoneActionTaskMessage.Builder bd = PhoneActionTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PhoneActionTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PhoneActionTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PhoneStateTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PhoneStateTaskWebsocketHandler.java new file mode 100644 index 0000000..07493ee --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PhoneStateTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PhoneStateTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PhoneStateTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 查询手机状态 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PhoneStateTask.PhoneStateTaskMessage.Builder bd = PhoneStateTask.PhoneStateTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PhoneStateTask.PhoneStateTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PhoneStateTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PostFriendDetectTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PostFriendDetectTaskWebsocketHandler.java new file mode 100644 index 0000000..f682999 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PostFriendDetectTaskWebsocketHandler.java @@ -0,0 +1,42 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PostFriendDetectTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PostFriendDetectTaskWebsocketHandler implements JsonMessageHandler { + + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信清粉 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PostFriendDetectTask.PostFriendDetectTaskMessage.Builder bd = PostFriendDetectTask.PostFriendDetectTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PostFriendDetectTask.PostFriendDetectTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PostFriendDetectTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PostSNSNewsTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PostSNSNewsTaskWebsocketHandler.java new file mode 100644 index 0000000..ce46e0d --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PostSNSNewsTaskWebsocketHandler.java @@ -0,0 +1,43 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PostSNSNewsTask.PostSNSNewsTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PostSNSNewsTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 发微信朋友圈 + * @author xiaoxx + */ + + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PostSNSNewsTaskMessage.Builder bd = PostSNSNewsTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PostSNSNewsTaskMessage req = bd.build(); + //PostSNSNewsTaskMessage req = vo.getContent().unpack(PostSNSNewsTaskMessage.class); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PostSNSNewsTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PostStopFriendDetectTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PostStopFriendDetectTaskWebsocketHandler.java new file mode 100644 index 0000000..3573458 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PostStopFriendDetectTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PostStopFriendDetectTask.PostStopFriendDetectTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PostStopFriendDetectTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 终止微信清粉任务 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PostStopFriendDetectTaskMessage.Builder bd = PostStopFriendDetectTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PostStopFriendDetectTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PostStopFriendDetectTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PullChatRoomQrCodeTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PullChatRoomQrCodeTaskWebsocketHandler.java new file mode 100644 index 0000000..94a0a9b --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PullChatRoomQrCodeTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PullChatRoomQrCodeTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PullChatRoomQrCodeTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 获取微信群二维码 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PullChatRoomQrCodeTask.PullChatRoomQrCodeTaskMessage.Builder bd = PullChatRoomQrCodeTask.PullChatRoomQrCodeTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PullChatRoomQrCodeTask.PullChatRoomQrCodeTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PullChatRoomQrCodeTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PullCircleDetailTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PullCircleDetailTaskWebsocketHandler.java new file mode 100644 index 0000000..62b1acb --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PullCircleDetailTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PullCircleDetailTask.PullCircleDetailTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PullCircleDetailTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 获取微信朋友圈图片 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PullCircleDetailTaskMessage.Builder bd = PullCircleDetailTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PullCircleDetailTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PullCircleDetailTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PullEmojiInfoTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PullEmojiInfoTaskWebsocketHandler.java new file mode 100644 index 0000000..95caa72 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PullEmojiInfoTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PullEmojiInfoTask.PullEmojiInfoTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PullEmojiInfoTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 推送emoji表情 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PullEmojiInfoTaskMessage.Builder bd = PullEmojiInfoTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PullEmojiInfoTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PullEmojiInfoTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendAddReqListTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendAddReqListTaskWebsocketHandler.java new file mode 100644 index 0000000..fbdd1eb --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendAddReqListTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PullFriendAddReqListTask.PullFriendAddReqListTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PullFriendAddReqListTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 获取微信加好友请求列表 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PullFriendAddReqListTaskMessage.Builder bd = PullFriendAddReqListTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PullFriendAddReqListTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PullFriendAddReqListTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendCircleTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendCircleTaskWebsocketHandler.java new file mode 100644 index 0000000..1e722ba --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PullFriendCircleTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PullFriendCircleTask.PullFriendCircleTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PullFriendCircleTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 获取微信指定好友朋友圈 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PullFriendCircleTaskMessage.Builder bd = PullFriendCircleTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PullFriendCircleTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PullFriendCircleTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/PullWeChatQrCodeTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/PullWeChatQrCodeTaskWebsocketHandler.java new file mode 100644 index 0000000..2783eec --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/PullWeChatQrCodeTaskWebsocketHandler.java @@ -0,0 +1,42 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.PullWeChatQrCodeTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class PullWeChatQrCodeTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 上传当前登录的微信二维码 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + PullWeChatQrCodeTask.PullWeChatQrCodeTaskMessage.Builder bd = PullWeChatQrCodeTask.PullWeChatQrCodeTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + PullWeChatQrCodeTask.PullWeChatQrCodeTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.PullWeChatQrCodeTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/QueryHbDetailTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/QueryHbDetailTaskWebsocketHandler.java new file mode 100644 index 0000000..3d68637 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/QueryHbDetailTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.QueryHbDetailTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class QueryHbDetailTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 请求微信红包详情 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + QueryHbDetailTask.QueryHbDetailTaskMessage.Builder bd = QueryHbDetailTask.QueryHbDetailTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + QueryHbDetailTask.QueryHbDetailTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.QueryHbDetailTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/RemittanceTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/RemittanceTaskWebsocketHandler.java new file mode 100644 index 0000000..f2469cb --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/RemittanceTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.RemittanceTask.RemittanceTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class RemittanceTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 微信转账 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + RemittanceTaskMessage.Builder bd = RemittanceTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + RemittanceTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.RemittanceTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/RequestChatRoomInfoTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestChatRoomInfoTaskWebsocketHandler.java new file mode 100644 index 0000000..77cc221 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestChatRoomInfoTaskWebsocketHandler.java @@ -0,0 +1,46 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.RequestChatRoomInfoTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class RequestChatRoomInfoTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private RequestChatRoomInfoTaskService requestChatRoomInfoTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + /** + * 请求微信群聊的详细信息 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// RequestChatRoomInfoTaskMessage.Builder bd = RequestChatRoomInfoTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// RequestChatRoomInfoTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + // 将消息转发送给手机客户端 + requestChatRoomInfoTaskHelper.ChatRoomAddNotice(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/RequestContactsInfoTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestContactsInfoTaskWebsocketHandler.java new file mode 100644 index 0000000..a09a119 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestContactsInfoTaskWebsocketHandler.java @@ -0,0 +1,46 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.RequestContactsInfoTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class RequestContactsInfoTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private RequestContactsInfoTaskService requestContactsInfoTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + /** + * 获取微信联系人详细信息(不一定是好友,如群聊成员) + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// RequestContactsInfoTaskMessage.Builder bd = RequestContactsInfoTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// RequestContactsInfoTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + // 将消息转发送给手机客户端 + requestContactsInfoTaskHelper.FriendChangeNotice(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkContentTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkContentTaskWebsocketHandler.java new file mode 100644 index 0000000..bc262a1 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkContentTaskWebsocketHandler.java @@ -0,0 +1,34 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.RequestTalkContentTask.RequestTalkContentTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class RequestTalkContentTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 获取微信聊天消息的原始内容(主要是xml内容) + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) throws Exception { + log.debug(contentJsonStr); + RequestTalkContentTaskMessage.Builder bd = RequestTalkContentTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + RequestTalkContentTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.RequestTalkContentTask, vo, req); + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkDetailTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkDetailTaskWebsocketHandler.java new file mode 100644 index 0000000..c7e9673 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/RequestTalkDetailTaskWebsocketHandler.java @@ -0,0 +1,48 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.RequestTalkDetailTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class RequestTalkDetailTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private RequestTalkDetailTaskService requestTalkDetailTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * 请求微信图片或视频消息的详细内容 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// RequestTalkDetailTaskMessage.Builder bd = RequestTalkDetailTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// RequestTalkDetailTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + //将消息转发送给手机客户端 + requestTalkDetailTaskHelper.RequestTalkDetailTask(contentJsonStr, account); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/RevokeMessageTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/RevokeMessageTaskWebsocketHandler.java new file mode 100644 index 0000000..832d097 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/RevokeMessageTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.RevokeMessageTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class RevokeMessageTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private RevokeMessageTaskService revokeMessageTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + /** + * 微信消息撤回 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + // 将消息转发送给手机客户端 + revokeMessageTaskHelper.revoke(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/SendFriendVerifyTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/SendFriendVerifyTaskWebsocketHandler.java new file mode 100644 index 0000000..b0e989f --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/SendFriendVerifyTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.SendFriendVerifyTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class SendFriendVerifyTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信聊天界面发送朋友验证 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + SendFriendVerifyTask.SendFriendVerifyTaskMessage.Builder bd = SendFriendVerifyTask.SendFriendVerifyTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + SendFriendVerifyTask.SendFriendVerifyTaskMessage req = bd.build(); + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.SendFriendVerifyTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/SendJielongTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/SendJielongTaskWebsocketHandler.java new file mode 100644 index 0000000..14ac210 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/SendJielongTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.SendJielongTask.SendJielongTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class SendJielongTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 微信发接龙消息,任务结果TalkToFriendTaskResultNotice + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + SendJielongTaskMessage.Builder bd = SendJielongTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + SendJielongTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.SendJielongTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/SendLuckyMoneyTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/SendLuckyMoneyTaskWebsocketHandler.java new file mode 100644 index 0000000..86e6ab6 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/SendLuckyMoneyTaskWebsocketHandler.java @@ -0,0 +1,47 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.SendLuckyMoneyTask.SendLuckyMoneyTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class SendLuckyMoneyTaskWebsocketHandler implements JsonMessageHandler { + + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信发红包 + * + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + SendLuckyMoneyTaskMessage.Builder bd = SendLuckyMoneyTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + SendLuckyMoneyTaskMessage req = bd.build(); + + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.SendLuckyMoneyTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/SendMultiPictureTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/SendMultiPictureTaskWebsocketHandler.java new file mode 100644 index 0000000..ce87ffb --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/SendMultiPictureTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.SendMultiPictureTask; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class SendMultiPictureTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 微信聊天发送多张图片 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + SendMultiPictureTask.SendMultiPictureTaskMessage.Builder bd = SendMultiPictureTask.SendMultiPictureTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + SendMultiPictureTask.SendMultiPictureTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.SendMultiPictureTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TakeLuckyMoneyTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TakeLuckyMoneyTaskWebsocketHandler.java new file mode 100644 index 0000000..4d39f04 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TakeLuckyMoneyTaskWebsocketHandler.java @@ -0,0 +1,42 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TakeLuckyMoneyTask.TakeLuckyMoneyTaskMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TakeLuckyMoneyTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信领取红包或转账 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + TakeLuckyMoneyTaskMessage.Builder bd = TakeLuckyMoneyTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + TakeLuckyMoneyTaskMessage req = bd.build(); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.TakeLuckyMoneyTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TalkToFriendTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TalkToFriendTaskWebsocketHandler.java new file mode 100644 index 0000000..318872f --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TalkToFriendTaskWebsocketHandler.java @@ -0,0 +1,59 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.alibaba.fastjson.JSONObject; +import com.eco.common.base.dto.WeChatChatRoomDto; +import com.eco.common.rpc.helper.TalkToFriendTaskService; +import com.eco.common.rpc.helper.qw.QwTalkToFriendTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TalkToFriendTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private TalkToFriendTaskService talkToFriendTaskHelper; + @Reference(check = false) + private QwTalkToFriendTaskService qwTalkToFriendTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * 给微信好友发消息 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// TalkToFriendTaskMessage.Builder bd = TalkToFriendTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// TalkToFriendTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + // 消息记录数据库 + // 将消息转发送给手机客户端 + JSONObject jsonObject = JSONObject.parseObject(contentJsonStr); + String weChatId = jsonObject.getString("WeChatId"); + if (WeChatChatRoomDto.isEnterpriseId(weChatId)) { + qwTalkToFriendTaskHelper.talkToFriendTask(contentJsonStr, account); + } else { + talkToFriendTaskHelper.TalkToFriendTask(contentJsonStr, account); + } + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerBizContactPushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerBizContactPushTaskWebsocketHandler.java new file mode 100644 index 0000000..3d3edb6 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerBizContactPushTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.TriggerBizContactPushTask.TriggerBizContactPushTaskMessage; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerBizContactPushTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 获取公众号列表 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + TriggerBizContactPushTaskMessage.Builder bd = TriggerBizContactPushTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + TriggerBizContactPushTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.TriggerBizContactPushTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerChatroomPushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerChatroomPushTaskWebsocketHandler.java new file mode 100644 index 0000000..bf1550d --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerChatroomPushTaskWebsocketHandler.java @@ -0,0 +1,49 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.TriggerChatroomPushTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerChatroomPushTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private TriggerChatroomPushTaskService triggerChatroomPushTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * 触发推送微信群聊列表 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// TriggerChatRoomPushTaskMessage.Builder bd = TriggerChatRoomPushTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// TriggerChatRoomPushTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + // 将消息转发送给手机客户端 +// triggerChatroomPushTaskHelper.TriggerChatroomPushTask(contentJsonStr, account); + triggerChatroomPushTaskHelper.TriggerChatroomPushTaskForPage(contentJsonStr, account); + } + catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCircleMsgPushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCircleMsgPushTaskWebsocketHandler.java new file mode 100644 index 0000000..1b97e4d --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCircleMsgPushTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.TriggerCircleMsgPushTask; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerCircleMsgPushTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 触发朋友圈消息列表推送 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + TriggerCircleMsgPushTask.TriggerCircleMsgPushTaskMessage.Builder bd = TriggerCircleMsgPushTask.TriggerCircleMsgPushTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + TriggerCircleMsgPushTask.TriggerCircleMsgPushTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.TriggerCircleMsgPushTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCirclePushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCirclePushTaskWebsocketHandler.java new file mode 100644 index 0000000..04cdcad --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerCirclePushTaskWebsocketHandler.java @@ -0,0 +1,44 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.TriggerCirclePushTask.TriggerCirclePushTaskMessage; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerCirclePushTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 触发推送朋友圈列表 + * @author xiaoxx + * startTime传秒 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + TriggerCirclePushTaskMessage.Builder bd = TriggerCirclePushTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + TriggerCirclePushTaskMessage req = bd.build(); + // TriggerCirclePushTaskMessage req = + // vo.getContent().unpack(TriggerCirclePushTaskMessage.class); + // 将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.TriggerCirclePushTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerConversationPushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerConversationPushTaskWebsocketHandler.java new file mode 100644 index 0000000..55cc00a --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerConversationPushTaskWebsocketHandler.java @@ -0,0 +1,46 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.TriggerConversationPushTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerConversationPushTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private TriggerConversationPushTaskService triggerConversationPushTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + /** + * 触发推送微信会话列表 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// TriggerConversationPushTaskMessage.Builder bd = TriggerConversationPushTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// TriggerConversationPushTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); +// triggerConversationPushTaskHelper.ConversationPushNotice(contentJsonStr, account); + triggerConversationPushTaskHelper.conversationPushNoticeV2(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerFriendPushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerFriendPushTaskWebsocketHandler.java new file mode 100644 index 0000000..c8cf0a4 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerFriendPushTaskWebsocketHandler.java @@ -0,0 +1,46 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.TriggerFriendPushTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerFriendPushTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private TriggerFriendPushTaskService triggerFriendPushTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * 触发手机推送微信好友列表任 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// TriggerFriendPushTaskMessage.Builder bd = TriggerFriendPushTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// TriggerFriendPushTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + //将消息转发送给手机客户端 + triggerFriendPushTaskHelper.FriendPushNotice(contentJsonStr, account); +// triggerFriendPushTaskHelper.FriendPushNoticeForPage(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerHistoryMsgPushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerHistoryMsgPushTaskWebsocketHandler.java new file mode 100644 index 0000000..906c2dd --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerHistoryMsgPushTaskWebsocketHandler.java @@ -0,0 +1,45 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.TriggerHistoryMsgPushTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerHistoryMsgPushTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private TriggerHistoryMsgPushTaskService triggerHistoryMsgPushTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * 触发微信推送聊天记录 + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// TriggerHistoryMsgPushTaskMessage.Builder bd = TriggerHistoryMsgPushTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// TriggerHistoryMsgPushTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + // 将消息转发送给手机客户端 + triggerHistoryMsgPushTaskHelper.HistoryMsgPushNotice(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerMessageReadTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerMessageReadTaskWebsocketHandler.java new file mode 100644 index 0000000..16d288d --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerMessageReadTaskWebsocketHandler.java @@ -0,0 +1,47 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.eco.common.rpc.helper.TriggerMessageReadTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.eco.websocket.netty.NettyConnectionUtil; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerMessageReadTaskWebsocketHandler implements JsonMessageHandler { + + @Reference(check = false) + private TriggerMessageReadTaskService triggerMessageReadTaskHelper; + @Resource + private NettyConnectionUtil nettyConnectionUtil; + + /** + * 通知微信将某个聊天窗口置为已读 + * + * @author xiaoxx + */ + @Override + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); +// TriggerMessageReadTaskMessage.Builder bd = TriggerMessageReadTaskMessage.newBuilder(); +// JsonFormat.parser().merge(contentJsonStr, bd); +// TriggerMessageReadTaskMessage req = bd.build(); + String account = nettyConnectionUtil.getUserIdByNettyId(ctx); + //将消息转发送给手机客户端 + triggerMessageReadTaskHelper.MessageRead(contentJsonStr, account); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerUnReadTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerUnReadTaskWebsocketHandler.java new file mode 100644 index 0000000..f9ee08a --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerUnReadTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.TriggerUnReadTask.TriggerUnReadTaskMessage; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerUnReadTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 已读置未读 + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + TriggerUnReadTaskMessage.Builder bd = TriggerUnReadTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + TriggerUnReadTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.TriggerUnReadTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerWechatPushTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerWechatPushTaskWebsocketHandler.java new file mode 100644 index 0000000..7db1385 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/TriggerWechatPushTaskWebsocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.TriggerWechatPushTask; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class TriggerWechatPushTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 触发微信上线通知,用于更新微信账号的信息 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + TriggerWechatPushTask.TriggerWechatPushTaskMessage.Builder bd = TriggerWechatPushTask.TriggerWechatPushTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + TriggerWechatPushTask.TriggerWechatPushTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.TriggerWechatPushTask, vo, req); + + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/VoiceTransTextTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/VoiceTransTextTaskWebsocketHandler.java new file mode 100644 index 0000000..f5713c3 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/VoiceTransTextTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.VoiceTransTextTask.VoiceTransTextTaskMessage; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class VoiceTransTextTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 微信语音消息转文字 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + VoiceTransTextTaskMessage.Builder bd = VoiceTransTextTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + VoiceTransTextTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.VoiceTransTextTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/WeChatGroupSendTaskWesocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/WeChatGroupSendTaskWesocketHandler.java new file mode 100644 index 0000000..9d54d3d --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/WeChatGroupSendTaskWesocketHandler.java @@ -0,0 +1,41 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.WeChatGroupSendTask.WeChatGroupSendTaskMessage; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class WeChatGroupSendTaskWesocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + + /** + * 微信群发消息 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + WeChatGroupSendTaskMessage.Builder bd = WeChatGroupSendTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + WeChatGroupSendTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.WeChatGroupSendTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/WechatLogoutTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/WechatLogoutTaskWebsocketHandler.java new file mode 100644 index 0000000..68b6ee6 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/WechatLogoutTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.WechatLogoutTask.WechatLogoutTaskMessage; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class WechatLogoutTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 微信账号登出 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + WechatLogoutTaskMessage.Builder bd = WechatLogoutTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + WechatLogoutTaskMessage req = bd.build(); + //将消息转发送给手机客户端 + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.WechatLogoutTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/handler/websocket/WechatSettingTaskWebsocketHandler.java b/src/main/java/com/eco/websocket/netty/handler/websocket/WechatSettingTaskWebsocketHandler.java new file mode 100644 index 0000000..762b596 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/handler/websocket/WechatSettingTaskWebsocketHandler.java @@ -0,0 +1,40 @@ +package com.eco.websocket.netty.handler.websocket; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import Jubo.JuLiao.IM.Wx.Proto.WechatSettingTask.WechatSettingTaskMessage; +import com.eco.websocket.netty.async.AsyncTaskService; +import com.eco.websocket.netty.common.Constant; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class WechatSettingTaskWebsocketHandler implements JsonMessageHandler { + @Resource + private AsyncTaskService asyncTaskService; + /** + * 微信改昵称,头像 + * @author xiaoxx + */ + @Async + public void handleMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.TransportMessage vo, String contentJsonStr) { + try { + log.debug(contentJsonStr); + WechatSettingTaskMessage.Builder bd = WechatSettingTaskMessage.newBuilder(); + JsonFormat.parser().merge(contentJsonStr, bd); + WechatSettingTaskMessage req = bd.build(); + + asyncTaskService.msgSend2Phone(ctx, req.getWeChatId(), TransportMessageOuterClass.EnumMsgType.WechatSettingTask, vo, req); + } catch (Exception e) { + log.error("error --> ", e);; + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/eco/websocket/netty/processor/WebSocketMessageProcessor.java b/src/main/java/com/eco/websocket/netty/processor/WebSocketMessageProcessor.java new file mode 100644 index 0000000..e66eeff --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/processor/WebSocketMessageProcessor.java @@ -0,0 +1,72 @@ +package com.eco.websocket.netty.processor; + +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.eco.common.commonbase.exception.ServiceException; +import com.eco.websocket.netty.handler.JsonMessageHandler; +import com.eco.websocket.netty.utils.MessageUtil; +import com.googlecode.protobuf.format.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Map; + +/** + * 消息处理分发器 + */ +@Service +@Slf4j +public class WebSocketMessageProcessor { + + @Autowired + private Map handlers; + + public void handler(ChannelHandlerContext ctx, TextWebSocketFrame msg) { + String text = msg.text(); + if (!StringUtils.isEmpty(text)) { + try { + JSONObject jsonObject = JSONObject.parseObject(text); + Object objMsgType = jsonObject.get("MsgType"); + if (null == objMsgType) { + log.error("MsgType消息类型传入错误!"); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, "MsgType消息类型传入错误"); + return; + } + + String contentJsonStr = jsonObject.getString("Content"); + if (StringUtils.isEmpty(contentJsonStr)) { + log.error("Content消息类型传入错误!"); + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, "Content消息类型传入错误"); + return; + } + + TransportMessageOuterClass.TransportMessage.Builder builder = TransportMessageOuterClass.TransportMessage.newBuilder(); + String jsonFormat = jsonObject.toJSONString(); + log.debug("请求json:" + jsonFormat); + JsonFormat.merge(jsonFormat, builder); + TransportMessageOuterClass.TransportMessage vo = builder.build(); + + String msgtype = StrUtil.lowerFirst(objMsgType + "WebsocketHandler"); + log.debug("websocket:" + msgtype); + if (handlers.containsKey(msgtype)) { + handlers.get(msgtype).handleMsg(ctx, vo, contentJsonStr); + } + } catch (Exception e) { + log.error("WebSocketMessageProcessor --> ", e); + String errMsg = "参数传入错误"; + if (e instanceof ServiceException) { + // 系统抛出异常 + errMsg = e.getMessage(); + } + MessageUtil.sendJsonErrMsg(ctx, TransportMessageOuterClass.EnumErrorCode.InvalidParam, errMsg); + } + } + text = null;// 清空一下 + } + +} diff --git a/src/main/java/com/eco/websocket/netty/utils/ByteStringToString.java b/src/main/java/com/eco/websocket/netty/utils/ByteStringToString.java new file mode 100644 index 0000000..0bc8415 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/utils/ByteStringToString.java @@ -0,0 +1,45 @@ +package com.eco.websocket.netty.utils; + +import com.google.protobuf.ByteString; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; + +public class ByteStringToString { + public static String bytesToString(ByteString src, String charSet) { + if (StringUtils.isEmpty(charSet)) { + charSet = "GB2312"; + } + return bytesToString(src.toByteArray(), charSet); + } + + private static String bytesToString(byte[] input, String charSet) { + if (ArrayUtils.isEmpty(input)) { + return StringUtils.EMPTY; + } + + ByteBuffer buffer = ByteBuffer.allocate(input.length); + buffer.put(input); + buffer.flip(); + + Charset charset = null; + CharsetDecoder decoder = null; + CharBuffer charBuffer = null; + + try { + charset = Charset.forName(charSet); + decoder = charset.newDecoder(); + charBuffer = decoder.decode(buffer.asReadOnlyBuffer()); + + return charBuffer.toString(); + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/eco/websocket/netty/utils/MessageUtil.java b/src/main/java/com/eco/websocket/netty/utils/MessageUtil.java new file mode 100644 index 0000000..f792aff --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/utils/MessageUtil.java @@ -0,0 +1,138 @@ +package com.eco.websocket.netty.utils; + +import Jubo.JuLiao.IM.Wx.Proto.ErrorMessageOuterClass.ErrorMessage; +import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass; +import com.alibaba.fastjson.JSONObject; +import com.google.protobuf.Any; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.Message; +import com.google.protobuf.util.JsonFormat; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class MessageUtil { + + /** + * 发送消息 + */ + public static void sendMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.EnumMsgType msgType, String accessToken, Long refMsgId, + Message resp) { + Message msg = MessageUtil.getMessage(msgType, accessToken, refMsgId, resp); + ctx.channel().writeAndFlush(msg); + } + + /** + * json 形式 + */ + private static void sendJsonStringMsg(ChannelHandlerContext ctx, String msgType, String accessToken, String refMsgId, + String object) { + JSONObject obj = new JSONObject(); + obj.put("msgType", msgType); + obj.put("accessToken", accessToken); + obj.put("refMsgId", refMsgId); + obj.put("message", object); + log.debug("发送消息:{}", obj.toJSONString()); + + //if (object != null) { + // JSONObject encryptValueByKey = encryptValueByKey(JSON.parseObject(object), "FriendId"); + // obj.put("message", encryptValueByKey.toJSONString()); + // log.info("加密后JSON:{}", obj.toJSONString()); + //} + + ctx.channel().writeAndFlush(new TextWebSocketFrame(obj.toJSONString())); + } + + /** + * json 形式 + */ + private static void sendJsonStringMsg(ChannelHandlerContext ctx, String msgType, String accessToken, Long refMsgId, + String object) { + //JSONObject obj = new JSONObject(); + //obj.put("msgType", msgType); + //obj.put("accessToken", accessToken); + //obj.put("refMsgId", refMsgId); + //obj.put("message", object); + //ctx.channel().writeAndFlush(new TextWebSocketFrame(obj.toJSONString())); + sendJsonStringMsg(ctx, msgType, accessToken, String.valueOf(refMsgId), object); + } + + /** + * 发送json字符串消息 + */ + public static void sendJsonMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.EnumMsgType msgType, String accessToken, Long refMsgId, + Message resp) { + String json = null; + if (null != resp) { + try { + json = JsonFormat.printer().print(resp); + } catch (InvalidProtocolBufferException e) { + log.error("error --> ", e);; + } + } + sendJsonStringMsg(ctx, msgType, accessToken, refMsgId, json); + } + + /** + * json 形式 + */ + public static void sendJsonStringMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.EnumMsgType msgType, String accessToken, Long refMsgId, + String object) { + sendJsonStringMsg(ctx, msgType.name(), accessToken, refMsgId, object); + } + + /** + * json 形式 + */ + public static void sendJsonStringMsg(ChannelHandlerContext ctx, String msgType, String accessToken, String refMsgId, + JSONObject object) { + sendJsonStringMsg(ctx, msgType, accessToken, refMsgId, object.toJSONString()); + } + + /** + * 发送错误消息 + */ + public static void sendErrMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.EnumErrorCode errorCode, Long refMsgId, String errMsg) { + ErrorMessage resp = MessageUtil.getErrMessage(errorCode, errMsg); + sendMsg(ctx, TransportMessageOuterClass.EnumMsgType.Error, null, refMsgId, resp); + } + + /** + * 发送json错误消息 + */ + public static void sendJsonErrMsg(ChannelHandlerContext ctx, TransportMessageOuterClass.EnumErrorCode errorCode, String errMsg) { + ErrorMessage resp = MessageUtil.getErrMessage(errorCode, errMsg); + sendJsonMsg(ctx, TransportMessageOuterClass.EnumMsgType.Error, null, null, resp); + } + + /** + * 封装错误消息消息体 + */ + private static ErrorMessage getErrMessage(TransportMessageOuterClass.EnumErrorCode errorCode, String errorMsg) { + return ErrorMessage.newBuilder().setErrorCode(errorCode).setErrorMsg(errorMsg).build(); + } + + /** + * 封装base消息体 + */ + private static Message getMessage(TransportMessageOuterClass.EnumMsgType type, String accessToken, Long refMsgId, Message resp) { + TransportMessageOuterClass.TransportMessage.Builder builder = TransportMessageOuterClass.TransportMessage.newBuilder(); + + builder.setId(MsgIdBuilder.getId()); + + if (null != accessToken) { + builder.setAccessToken(accessToken); + } + if (null != type) { + builder.setMsgType(type); + } + if (null != refMsgId) { + builder.setRefMessageId(refMsgId); + } + if (null != resp) { + builder.setContent(Any.pack(resp)); + } + return builder.build(); + } +} diff --git a/src/main/java/com/eco/websocket/netty/utils/MsgIdBuilder.java b/src/main/java/com/eco/websocket/netty/utils/MsgIdBuilder.java new file mode 100644 index 0000000..5570927 --- /dev/null +++ b/src/main/java/com/eco/websocket/netty/utils/MsgIdBuilder.java @@ -0,0 +1,28 @@ +package com.eco.websocket.netty.utils; + +import java.util.Random; + +public class MsgIdBuilder { + private static Long id = null; + + private MsgIdBuilder(){} + public static synchronized Long getId(){ + if(id == null){ + id = Math.abs(new Random().nextLong()); + }else{ + id = id + 1; + } + + return id; + } public static synchronized String getId2(){ + + return String.valueOf(getId()); + } + + + public static void main(String[] args) { + for(int i =0;i<1000;i++){ + System.out.println(MsgIdBuilder.getId()); + } + } +} diff --git a/src/main/java/com/eco/websocket/utils/PropertyUtils.java b/src/main/java/com/eco/websocket/utils/PropertyUtils.java new file mode 100644 index 0000000..47bfc5a --- /dev/null +++ b/src/main/java/com/eco/websocket/utils/PropertyUtils.java @@ -0,0 +1,54 @@ +package com.eco.websocket.utils; + +import org.springframework.core.env.Environment; + +public class PropertyUtils { + private static final String HTTP_PORT = "server.port"; + private static final String SOCKET_PORT = "com.eco.socket.port"; + private static final String WEBSOCKET_PORT = "com.eco.websocket.port"; + private static final String UPLOAD_URL = "com.eco.upload.url"; + private static final String SERVER_IP = "com.eco.upload.ip"; + private static final String FILE_PATH = "com.eco.upload.filePath"; + private static final String PREFIX_FILE_PATH = "com.eco.upload.prefixFilePath"; + private static final String SILK_V3_DECODER_PATH = "client.silkV3DecoderPath"; + + // http端口 + public static Integer getHttpPort(Environment env) { + return Integer.valueOf(env.getProperty(HTTP_PORT)); + } + + // socket端口 + public static Integer getNettySocketPort(Environment env) { + return Integer.valueOf(env.getProperty(SOCKET_PORT)); + } + + // websocket端口 + public static Integer getNettyWebsocketPort(Environment env) { + return Integer.valueOf(env.getProperty(WEBSOCKET_PORT)); + } + + // 全局上传网络地址 + public static String getUploadUrl(Environment env) { + return env.getProperty(UPLOAD_URL); + } + + // 服务器ip + public static String getServerIp(Environment env) { + return env.getProperty(SERVER_IP); + } + + // 服务器文件存储地址 + public static String getServerFilePath(Environment env) { + return env.getProperty(FILE_PATH); + } + + // silkV3DecoderPath + public static String getSilkV3DecoderPath(Environment env) { + return env.getProperty(SILK_V3_DECODER_PATH); + } + + // 服务器文件访问前缀 + public static String getServerPrefixFilePath(Environment env) { + return env.getProperty(PREFIX_FILE_PATH); + } +} diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..2f94ad3 --- /dev/null +++ b/src/main/resources/bootstrap.yml @@ -0,0 +1,62 @@ +server: + max-http-header-size: 102400 + undertow: + buffer-size: 8192 + direct-buffers: true + io-threads: 8 + worker-threads: 128 +spring: + application: + name: ${spring.cloud.nacos.discovery.service}-@activatedProperties@ + profiles: + active: @activatedProperties@ + cloud: + nacos: + discovery: + server-addr: @addr@ + service: customer-service-websocket + namespace: @namespace@ + config: + namespace: @namespace@ + server-addr: @addr@ + file-extension: yml + ext-config: + - data-id: customer_core_redis.yml + - data-id: fission_v2_job.yml + - data-id: customer-websocket.yml + refresh: true + + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + thymeleaf: + check-template: false + check-template-location: false + mvc: + servlet: + load-on-startup: 1 + +dubbo: + application: + name: ${spring.cloud.nacos.discovery.service} + protocol: + id: dubbo + # host: 192.168.6.201 + port: -1 + registry: + address: nacos://@addr@ + parameters: + namespace: @namespace@ + metadata-report: + address: nacos://@addr@ +management: + endpoints: + web: + exposure: + include: '*' + +logging: + config: @logfile@ + level: + root: info diff --git a/src/main/resources/logback-client.xml b/src/main/resources/logback-client.xml new file mode 100644 index 0000000..f61fbc6 --- /dev/null +++ b/src/main/resources/logback-client.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + ${LOG_PATTERN} + + UTF-8 + + + + + + + ${APP_HOME}/${APP_NAME}.log + + + + ${LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log + + 1024MB + 3 + 5000MB + true + + + + + + ${LOG_PATTERN} + + UTF-8 + + + + INFO + + + + + + + + + + + + + + \ No newline at end of file