From a8895d5c99c2cdd43b3dbe176f72d2b660d68ab9 Mon Sep 17 00:00:00 2001 From: SAM2O2O Date: Mon, 12 Oct 2020 23:53:28 +0800 Subject: [PATCH] sync messgae to web --- .../im/message/executor/MessageExecutor.java | 121 ++++++++---------- .../handler/U2MessageWebSyncHandler.java | 103 +++++++++++++++ 2 files changed, 158 insertions(+), 66 deletions(-) create mode 100755 windchat-message/src/main/java/com/windchat/im/message/user2/handler/U2MessageWebSyncHandler.java diff --git a/windchat-message/src/main/java/com/windchat/im/message/executor/MessageExecutor.java b/windchat-message/src/main/java/com/windchat/im/message/executor/MessageExecutor.java index d52c373..e99f6c0 100755 --- a/windchat-message/src/main/java/com/windchat/im/message/executor/MessageExecutor.java +++ b/windchat-message/src/main/java/com/windchat/im/message/executor/MessageExecutor.java @@ -1,17 +1,17 @@ -/** +/** * Copyright 2018-2028 Akaxin Group - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License. */ package com.windchat.im.message.executor; @@ -36,79 +36,68 @@ import com.windchat.im.message.sync.handler.SyncFinishHandler; import com.windchat.im.message.sync.handler.SyncGroupMessageHandler; import com.windchat.im.message.sync.handler.SyncMsgStatusHandler; import com.windchat.im.message.sync.handler.SyncU2MessageHandler; -import com.windchat.im.message.user2.handler.U2MessageImageHandler; -import com.windchat.im.message.user2.handler.U2MessageImageSecretHandler; -import com.windchat.im.message.user2.handler.U2MessageNoticeHandler; -import com.windchat.im.message.user2.handler.U2MessageTextHandler; -import com.windchat.im.message.user2.handler.U2MessageTextSecretHandler; -import com.windchat.im.message.user2.handler.U2MessageVoiceHandler; -import com.windchat.im.message.user2.handler.U2MessageVoiceSecretHandler; -import com.windchat.im.message.user2.handler.U2MessageWebHandler; -import com.windchat.im.message.user2.handler.U2MessageWebNoticeHandler; -import com.windchat.im.message.user2.handler.UserDetectionHandler; -import com.windchat.im.message.user2.handler.UserPsnHandler; -import com.windchat.im.message.user2.handler.UserPushHandler; +import com.windchat.im.message.user2.handler.*; import com.windchat.im.message.notice.handler.NoticeHandler; import com.windchat.im.message.notice.handler.NoticePushHandler; /** - * * @author Sam{@link an.guoyue254@gmail.com} * @since 2018-02-05 11:48:39 */ public class MessageExecutor { - private static AbstracteExecutor executor = new SimpleExecutor(); + private static AbstracteExecutor executor = new SimpleExecutor(); - static { - AbstractHandlerChain u2MessageChain = new SimpleHandlerChain(); - u2MessageChain.addHandler(new UserDetectionHandler()); - u2MessageChain.addHandler(new U2MessageTextHandler()); - u2MessageChain.addHandler(new U2MessageTextSecretHandler()); - u2MessageChain.addHandler(new U2MessageImageHandler()); - u2MessageChain.addHandler(new U2MessageImageSecretHandler()); - u2MessageChain.addHandler(new U2MessageVoiceHandler()); - u2MessageChain.addHandler(new U2MessageVoiceSecretHandler()); - u2MessageChain.addHandler(new U2MessageNoticeHandler()); - u2MessageChain.addHandler(new U2MessageWebHandler()); - u2MessageChain.addHandler(new U2MessageWebNoticeHandler()); - u2MessageChain.addHandler(new UserPsnHandler()); - u2MessageChain.addHandler(new UserPushHandler()); + static { + AbstractHandlerChain u2MessageChain = new SimpleHandlerChain(); + u2MessageChain.addHandler(new UserDetectionHandler()); + u2MessageChain.addHandler(new U2MessageTextHandler()); + u2MessageChain.addHandler(new U2MessageTextSecretHandler()); + u2MessageChain.addHandler(new U2MessageImageHandler()); + u2MessageChain.addHandler(new U2MessageImageSecretHandler()); + u2MessageChain.addHandler(new U2MessageVoiceHandler()); + u2MessageChain.addHandler(new U2MessageVoiceSecretHandler()); + u2MessageChain.addHandler(new U2MessageNoticeHandler()); + u2MessageChain.addHandler(new U2MessageWebHandler()); + u2MessageChain.addHandler(new U2MessageWebNoticeHandler()); + u2MessageChain.addHandler(new U2MessageWebSyncHandler()); + u2MessageChain.addHandler(new UserPsnHandler()); + u2MessageChain.addHandler(new UserPushHandler()); - AbstractHandlerChain groupMessageChain = new SimpleHandlerChain(); - groupMessageChain.addHandler(new GroupDetectionHandler()); - groupMessageChain.addHandler(new GroupMessageTextHandler()); - groupMessageChain.addHandler(new GroupMessageImageHandler()); - groupMessageChain.addHandler(new GroupMessageVoiceHandler()); - groupMessageChain.addHandler(new GroupMessageNoticeHandler()); - groupMessageChain.addHandler(new GroupMessageWebHandler()); - groupMessageChain.addHandler(new GroupMessageWebNoticeHandler()); - groupMessageChain.addHandler(new GroupPsnHandler()); - groupMessageChain.addHandler(new GroupPushHandler()); + AbstractHandlerChain groupMessageChain = new SimpleHandlerChain(); + groupMessageChain.addHandler(new GroupDetectionHandler()); + groupMessageChain.addHandler(new GroupMessageTextHandler()); + groupMessageChain.addHandler(new GroupMessageImageHandler()); + groupMessageChain.addHandler(new GroupMessageVoiceHandler()); + groupMessageChain.addHandler(new GroupMessageNoticeHandler()); + groupMessageChain.addHandler(new GroupMessageWebHandler()); + groupMessageChain.addHandler(new GroupMessageWebNoticeHandler()); + groupMessageChain.addHandler(new GroupPsnHandler()); + groupMessageChain.addHandler(new GroupPushHandler()); - AbstractHandlerChain syncMessageChain = new SimpleHandlerChain(); - syncMessageChain.addHandler(new SyncU2MessageHandler()); - syncMessageChain.addHandler(new SyncGroupMessageHandler()); + AbstractHandlerChain syncMessageChain = new SimpleHandlerChain(); + syncMessageChain.addHandler(new SyncU2MessageHandler()); + syncMessageChain.addHandler(new SyncGroupMessageHandler()); - AbstractHandlerChain noticeChain = new SimpleHandlerChain(); - noticeChain.addHandler(new NoticeHandler()); - noticeChain.addHandler(new NoticePushHandler()); + AbstractHandlerChain noticeChain = new SimpleHandlerChain(); + noticeChain.addHandler(new NoticeHandler()); + noticeChain.addHandler(new NoticePushHandler()); - // "im.cts.message.u2" - executor.addChain(RequestAction.IM_CTS_MESSAGE_U2.getName(), u2MessageChain); - // "im.cts.message.group" - executor.addChain(RequestAction.IM_CTS_MESSAGE_GROUP.getName(), groupMessageChain); - // "im.sync.message" - executor.addChain(RequestAction.IM_SYNC_MESSAGE.getName(), syncMessageChain); - // "im.sync.finish" - executor.addChain(RequestAction.IM_SYNC_FINISH.getName(), new SyncFinishHandler()); - // "im.sync.msgStatus" - executor.addChain(RequestAction.IM_SYNC_MSGSTATUS.getName(), new SyncMsgStatusHandler()); - // "im.stc.notice" - executor.addChain(RequestAction.IM_STC_NOTICE.getName(), noticeChain); - } + // "im.cts.message.u2" + executor.addChain(RequestAction.IM_CTS_MESSAGE_U2.getName(), u2MessageChain); + // "im.cts.message.group" + executor.addChain(RequestAction.IM_CTS_MESSAGE_GROUP.getName(), groupMessageChain); + // "im.sync.message" + executor.addChain(RequestAction.IM_SYNC_MESSAGE.getName(), syncMessageChain); + // "im.sync.finish" + executor.addChain(RequestAction.IM_SYNC_FINISH.getName(), new SyncFinishHandler()); + // "im.sync.msgStatus" + executor.addChain(RequestAction.IM_SYNC_MSGSTATUS.getName(), new SyncMsgStatusHandler()); + // "im.stc.notice" + executor.addChain(RequestAction.IM_STC_NOTICE.getName(), noticeChain); + } - public static AbstracteExecutor getExecutor() { - return executor; - } + public static AbstracteExecutor getExecutor() { + return executor; + } } \ No newline at end of file diff --git a/windchat-message/src/main/java/com/windchat/im/message/user2/handler/U2MessageWebSyncHandler.java b/windchat-message/src/main/java/com/windchat/im/message/user2/handler/U2MessageWebSyncHandler.java new file mode 100755 index 0000000..688ff7e --- /dev/null +++ b/windchat-message/src/main/java/com/windchat/im/message/user2/handler/U2MessageWebSyncHandler.java @@ -0,0 +1,103 @@ +/** + * Copyright 2018-2028 Akaxin Group + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.windchat.im.message.user2.handler; + +import com.akaxin.proto.core.CoreProto; +import com.akaxin.proto.site.ImCtsMessageProto; +import com.windchat.common.command.Command; +import com.windchat.common.crypto.AESCrypto; +import com.windchat.common.http.ZalyHttpClient; +import com.windchat.common.logs.LogUtils; +import com.windchat.common.utils.GsonUtils; +import com.windchat.im.message.bean.WebBean; +import com.windchat.im.storage.api.IMessageDao; +import com.windchat.im.storage.bean.U2MessageBean; +import com.windchat.im.storage.service.MessageDaoService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * sync message to web + * + * @author an.guoyue254@gmail.com + * @since 2020-10-12 22:45:20 + */ +public class U2MessageWebSyncHandler extends AbstractU2Handler { + private static final Logger logger = LoggerFactory.getLogger(U2MessageWebSyncHandler.class); + + private static final int programId = 100; + private static final String programSecret = "gXDayjtSHtTk33Tfo4ILruYmYblO7nJe"; + + public Boolean handle(Command command) { + try { + + switch (command.getMsgType()) { + case CoreProto.MsgType.TEXT_VALUE: { + ImCtsMessageProto.ImCtsMessageRequest request = ImCtsMessageProto.ImCtsMessageRequest + .parseFrom(command.getParams()); + final String siteUserId = command.getSiteUserId(); + final String proxySiteUserId = request.getText().getSiteUserId(); + final String siteFriendId = request.getText().getSiteFriendId(); + final String msgId = request.getText().getMsgId(); + final String textBody = request.getText().getText().toString(StandardCharsets.UTF_8); + + // 构建Json格式消息体 + String action = "duckchat.message.send"; + Map data = new HashMap(3) {{ + put("action", action); + put("body", new HashMap(2) {{ + put("@type", "type.googleapis.com/plugin.DuckChatMessageSendRequest"); + put("message", new HashMap(6) {{ + put("msgId", msgId); + put("fromUserId", siteUserId); + put("toUserId", siteFriendId); + put("type", "MessageText"); + put("roomType", "MessageRoomU2"); + put("text", new HashMap(1) {{ + put("body", textBody); + }}); + }}); + }}); + put("timeServer", System.currentTimeMillis()); + }}; + // 构建HTTP URL + String requestUrl = "http://localhost:8000//?action=" + action + "&body_format=json&miniProgramId=" + programId; + // AES 加密 + + byte[] encrptData = AESCrypto.encrypt(programSecret.getBytes(), GsonUtils.toJson(data).getBytes()); + + // Http Post请求 + ZalyHttpClient.getInstance().postBytes(requestUrl, encrptData); + } + break; + default: + break; + } + return true; + } catch (Exception e) { + LogUtils.requestErrorLog(logger, command, this.getClass(), e); + } + + return false; + } + +}