代码拉取完成,页面将自动刷新
package im
import (
"context"
"encoding/json"
"gitee.com/h79/goim/chat"
"gitee.com/h79/goim/internal"
"gitee.com/h79/goutils/common/logger"
"gitee.com/h79/goutils/common/result"
)
func (hub *Hub) saveChat(ctx context.Context, msg *chat.Message, option *chat.Option) error {
if !option.SaveEnabled || hub.chat == nil {
return nil
}
msgID, err := hub.chat.SaveChat(msg)
if err != nil {
logger.W("IM", "SendChat failure, msg= %v, err= %v, traceId= %s", msg, err, logger.TraceId(ctx))
return err
}
internal.Assert(msgID)
return nil
}
func (hub *Hub) SendChat(ctx context.Context, from *Session, ev *Event, option chat.Option, handler func()) error {
if hub.groupMgr == nil {
return result.Error(result.ErrNotSupport, "not support chat")
}
pack := chat.Package{}
if err := json.Unmarshal([]byte(ev.Content), &pack); err != nil {
return err
}
if err := pack.HasValid(); err != nil {
return err
}
switch pack.Event {
case chat.KChatCreateGroup:
group := pack.ToChatGroup()
if err := hub.groupMgr.CreateGroup(from, group, &option); err != nil {
logger.E("IM", "CreateGroup, create group failure, group id id= %+v, err= %v, traceId= %s", group.GroupId, err, logger.TraceId(ctx))
}
handler()
case chat.KChatJoinGroup:
group := pack.ToChatGroup()
if err := hub.groupMgr.JoinGroup(from, group, &option); err != nil {
logger.E("IM", "JoinGroup failure, group= %v, err= %v, traceId= %s", group, err, logger.TraceId(ctx))
}
handler()
case chat.KChatLeaveGroup:
group := pack.ToChatGroup()
if err := hub.groupMgr.LeaveGroup(from, group, &option); err != nil {
logger.E("IM", "LeaveGroup failure, group= %v, err= %v, traceId= %s", group, err, logger.TraceId(ctx))
}
handler()
case chat.KChatRemoveGroup:
group := pack.ToChatGroup()
if err := hub.groupMgr.DeleteGroup(from, group.GroupId, &option); err != nil {
logger.E("IM", "DeleteGroup failure, group= %#v, err= %v, traceId= %s", group, err, logger.TraceId(ctx))
}
handler()
case chat.KChatMessage:
msg := pack.ToChatMsg()
if err := msg.HasValid(); err != nil {
logger.W("IM", "SendChat failure, msg= %#v, err= %v, traceId= %s", msg, err, logger.TraceId(ctx))
return err
}
if msg.IsFriend() {
//单聊
if err := hub.saveChat(ctx, msg, &option); err != nil {
return err
}
if err := hub.SendToUser(ctx, from, &Session{AppId: from.AppId, Plat: from.Plat, UserId: msg.ToId.Int()}, ev); err != nil {
logger.E("IM", "SendChat to friend failure, msg= %#v, err= %v, traceId= %s", msg, err, logger.TraceId(ctx))
}
} else if msg.IsGroup() {
//群聊
if err := hub.groupMgr.Send(from, msg,
func(user *Session, iAmMember bool) error {
if !iAmMember {
return IAmNotMemberErr
}
return hub.saveChat(ctx, msg, &option)
}, func(groupId int64, user *Session) error {
//给每个成员发送消息
if from.UserId == user.UserId {
//不给自己发
return nil
}
return hub.SendToUser(ctx, from, user, ev)
}); err != nil {
logger.E("IM", "SendChat to group failure, msg= %#v, err= %v, traceId= %s", msg, err, logger.TraceId(ctx))
}
}
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。