From 6e3316e9ea698059e39b250cf24583b364ab01ee Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Tue, 27 Aug 2024 18:53:46 +0800 Subject: [PATCH] fix: fixed revoke burnMessage panic. (#672) * feat: implement panic recovery. * update recover logic. * update log print. * feat: implment SDK log interface. * update * remove unused file. * update Panic log print. * fix: optimize delete msg local logic. * update implement. * optimize contents. * fix: fix revoke burnMessage panic. * update revoke logic. --- internal/conversation_msg/revoke.go | 32 +++++++++++++++++++-------- internal/interaction/long_conn_mgr.go | 1 + wasm/event_listener/caller.go | 3 ++- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/internal/conversation_msg/revoke.go b/internal/conversation_msg/revoke.go index ab8feeebf..02a5a5b8f 100644 --- a/internal/conversation_msg/revoke.go +++ b/internal/conversation_msg/revoke.go @@ -49,6 +49,7 @@ func (c *Conversation) revokeMessage(ctx context.Context, tips *sdkws.RevokeMsgT log.ZError(ctx, "GetMessageBySeq failed", err, "tips", &tips) return errs.Wrap(err) } + var revokerRole int32 var revokerNickname string if tips.IsAdminRevoke || tips.SesstionType == constant.SingleChatType { @@ -59,6 +60,7 @@ func (c *Conversation) revokeMessage(ctx context.Context, tips *sdkws.RevokeMsgT } else { log.ZDebug(ctx, "revoker user name", "userName", userName) } + revokerNickname = userName } else if tips.SesstionType == constant.SuperGroupChatType { conversation, err := c.db.GetConversation(ctx, tips.ConversationID) @@ -66,6 +68,7 @@ func (c *Conversation) revokeMessage(ctx context.Context, tips *sdkws.RevokeMsgT log.ZError(ctx, "GetConversation failed", err, "conversationID", tips.ConversationID) return errs.Wrap(err) } + groupMember, err := c.db.GetGroupMemberInfoByGroupIDUserID(ctx, conversation.GroupID, tips.RevokerUserID) if err != nil { log.ZError(ctx, "GetGroupMemberInfoByGroupIDUserID failed", err, "tips", &tips) @@ -134,26 +137,37 @@ func (c *Conversation) revokeMessage(ctx context.Context, tips *sdkws.RevokeMsgT log.ZError(ctx, "SearchAllMessageByContentType failed", err, "tips", &tips) return errs.Wrap(err) } + for _, v := range msgList { err = c.quoteMsgRevokeHandle(ctx, tips.ConversationID, v, m) - return errs.Wrap(err) + if err != nil { + log.ZError(ctx, "quote Msg Revoke Handle failed.", err, "chat Log content", v) + } } - return nil + return errs.Wrap(err) } func (c *Conversation) quoteMsgRevokeHandle(ctx context.Context, conversationID string, v *model_struct.LocalChatLog, revokedMsg sdk_struct.MessageRevoked) error { - s := sdk_struct.MsgStruct{} - _ = utils.JsonStringToStruct(v.Content, &s.QuoteElem) + s := sdk_struct.QuoteElem{} + if v.Content == "" { + err := errs.New("Chat Log Content not found") + return errs.Wrap(err) + } - if s.QuoteElem.QuoteMessage == nil { + if err := utils.JsonStringToStruct(v.Content, &s); err != nil { + return errs.New("ChatLog content transfer failed.") + } + + if s.QuoteMessage == nil { return errs.New("QuoteMessage is nil").Wrap() } - if s.QuoteElem.QuoteMessage.ClientMsgID != revokedMsg.ClientMsgID { + if s.QuoteMessage.ClientMsgID != revokedMsg.ClientMsgID { return errs.New("quoteMessage ClientMsgID is not revokedMsg ClientMsgID").Wrap() } - s.QuoteElem.QuoteMessage.Content = utils.StructToJsonString(revokedMsg) - s.QuoteElem.QuoteMessage.ContentType = constant.RevokeNotification - v.Content = utils.StructToJsonString(s.QuoteElem) + + s.QuoteMessage.Content = utils.StructToJsonString(revokedMsg) + s.QuoteMessage.ContentType = constant.RevokeNotification + v.Content = utils.StructToJsonString(s) if err := c.db.UpdateMessageBySeq(ctx, conversationID, v); err != nil { log.ZError(ctx, "UpdateMessage failed", err, "v", v) return errs.Wrap(err) diff --git a/internal/interaction/long_conn_mgr.go b/internal/interaction/long_conn_mgr.go index 15aec606c..a3ccb8883 100644 --- a/internal/interaction/long_conn_mgr.go +++ b/internal/interaction/long_conn_mgr.go @@ -249,6 +249,7 @@ func (c *LongConnMgr) writePump(ctx context.Context) { log.ZWarn(ctx, "writePump panic", nil, "panic info", err) } }() + log.ZDebug(ctx, "writePump start", "goroutine ID:", getGoroutineID()) defer func() { diff --git a/wasm/event_listener/caller.go b/wasm/event_listener/caller.go index 7af71eaee..2c079e1b7 100644 --- a/wasm/event_listener/caller.go +++ b/wasm/event_listener/caller.go @@ -150,7 +150,8 @@ func (r *ReflectCall) asyncCallWithOutCallback() { if r.callback == nil { r.callback = NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), nil) } - log.ZError(ctx, "test", nil, "asyncCallWithOutCallback", len(r.arguments)) + log.ZWarn(ctx, "asyncCall", nil, "asyncCallWithOutCallback", len(r.arguments)) + r.callback.SetOperationID(r.arguments[0].String()) //strings.SplitAfter() for i := 0; i < len(r.arguments); i++ {