From cc2946f01d24aee3638f88234dff58f228640571 Mon Sep 17 00:00:00 2001 From: hujiebin Date: Thu, 24 Aug 2023 16:23:35 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _const/redis_key/mic_k/queue.go | 10 +++++++ cron/cron.go | 3 +- cron/mic_cron/on_mic.go | 30 ++++++++++++++++++-- domain/cache/mic_c/queue.go | 41 ++++++++++++++++++++++++++++ domain/event/mic_ev/on_mic.go | 2 ++ domain/service/event_s/event_init.go | 37 ------------------------- 6 files changed, 83 insertions(+), 40 deletions(-) create mode 100644 _const/redis_key/mic_k/queue.go create mode 100644 domain/cache/mic_c/queue.go diff --git a/_const/redis_key/mic_k/queue.go b/_const/redis_key/mic_k/queue.go new file mode 100644 index 0000000..b9dbd96 --- /dev/null +++ b/_const/redis_key/mic_k/queue.go @@ -0,0 +1,10 @@ +package mic_k + +// onMic异步入库 +const ( + OnMicQueue = "onMic:hilo_group" +) + +func GetOnMicQueue() string { + return OnMicQueue +} diff --git a/cron/cron.go b/cron/cron.go index 1e2dc64..b6d716e 100644 --- a/cron/cron.go +++ b/cron/cron.go @@ -15,10 +15,11 @@ func Init() { //gift_cron.GiftRemark() // 礼物消息补偿 gift_cron.SendGiftEvent() // 礼物事件 mic_cron.OnMicCheck() // 检查上麦 + mic_cron.OnMicQueue() // 检查上麦-队列操作 group_cron.GroupPowerExpClear() // 清理家族经验/等级 group_cron.GroupPowerMonthRankAct() //group_cron.GroupInEventInit() // 进房事件 - group_cron.GroupPowerGradeExp() // 家族升级(上麦事件会用到) todo + group_cron.GroupPowerGradeExp() // 家族升级(上麦事件会用到) todo 待优化 group_cron.CreateGroup() // group_cron.CalcGroupSupport() // 群组扶持计算 } diff --git a/cron/mic_cron/on_mic.go b/cron/mic_cron/on_mic.go index 923ecd8..6b10915 100644 --- a/cron/mic_cron/on_mic.go +++ b/cron/mic_cron/on_mic.go @@ -3,8 +3,11 @@ package mic_cron import ( "git.hilo.cn/hilo-common/domain" "github.com/robfig/cron" + "hilo-group/domain/cache/mic_c" "hilo-group/domain/event/mic_ev" "hilo-group/domain/model/group_m" + "hilo-group/domain/model/mic_m" + "hilo-group/domain/service/group_mic_s" ) func OnMicCheck() { @@ -27,7 +30,7 @@ func OnMicCheck() { model.Log.Errorf("cron micIn group_m.GetMicUser err:%v", err) } if micUser != nil { - if err := mic_ev.PublishOnMicEvent(model, &mic_ev.OnMicEvent{ + if err := mic_c.QueueOnMic(model, &mic_ev.OnMicEvent{ GroupUuid: micUser.GroupUuid, I: micUser.I, ExternalId: micUser.ExternalId, @@ -35,7 +38,7 @@ func OnMicCheck() { Forbid: micUser.Forbid, Timestamp: micUser.Timestamp, }); err != nil { - model.Log.Errorf("PublishOnMicEvent fail:%v", err) + model.Log.Errorf("QueueOnMic fail:%v", err) } } } @@ -43,3 +46,26 @@ func OnMicCheck() { }) c.Start() } + +func OnMicQueue() { + go func() { + for true { + model := domain.CreateModelNil() + if onMic := mic_c.BLPopQueueOnMic(model); onMic != nil { + // 群组上麦经验 + if err := group_mic_s.NewGroupPowerService(model.MyContext).IncrGroupPowerOnMicExpAndTime(onMic.GroupUuid, onMic.UserId, onMic.Timestamp); err != nil { + model.Log.Errorf("cron micIn GroupPowerOnMicExp err:%v", err) + } else { + model.Log.Infof("cron micIn GroupPowerOnMicExp success, groupId:%v, userId:%v", onMic.GroupUuid, onMic.UserId) + } + + // 用户上麦 + if err := mic_m.IncrUserOnMic(model, onMic.UserId, onMic.Timestamp); err != nil { + model.Log.Errorf("cron micIn IncrUserOnMic err:%v", err) + } else { + model.Log.Infof("cron micIn IncrUserOnMic success,userId:%v", onMic.UserId) + } + } + } + }() +} diff --git a/domain/cache/mic_c/queue.go b/domain/cache/mic_c/queue.go new file mode 100644 index 0000000..e717b86 --- /dev/null +++ b/domain/cache/mic_c/queue.go @@ -0,0 +1,41 @@ +package mic_c + +import ( + "encoding/json" + "git.hilo.cn/hilo-common/domain" + "github.com/go-redis/redis/v8" + "hilo-group/_const/redis_key/mic_k" + "hilo-group/domain/event/mic_ev" + "time" +) + +// redis queue on mic +func QueueOnMic(model *domain.Model, onMic *mic_ev.OnMicEvent) error { + queue := mic_k.GetOnMicQueue() + onMic.Ts = time.Now().UnixNano() // 给一个时间戳 + body, _ := json.Marshal(onMic) + return model.Redis.RPush(model, queue, string(body)).Err() +} + +// redis pop on mic +func BLPopQueueOnMic(model *domain.Model) *mic_ev.OnMicEvent { + var res *mic_ev.OnMicEvent + queue := mic_k.GetOnMicQueue() + strs, err := model.Redis.BLPop(model, time.Second, queue).Result() + if err != nil { + if err != redis.Nil { + model.Log.Errorf("BLPopQueueOnMic fail:%v", err) + } + return nil + } + if len(strs) >= 2 { + content := strs[1] + res = new(mic_ev.OnMicEvent) + if err := json.Unmarshal([]byte(content), res); err != nil { + model.Log.Errorf("BLPopQueueOnMic json fail:%v", err) + return nil + } + return res + } + return nil +} diff --git a/domain/event/mic_ev/on_mic.go b/domain/event/mic_ev/on_mic.go index 881a20c..50baf1e 100644 --- a/domain/event/mic_ev/on_mic.go +++ b/domain/event/mic_ev/on_mic.go @@ -14,6 +14,8 @@ type OnMicEvent struct { UserId uint64 // 麦中的人 Forbid bool // 静音 true:静音,false:没有静音 Timestamp int64 // 上麦的的时间戳 + + Ts int64 } func AddOnMicEventSync(callback func(model *domain.Model, event interface{}) error) { diff --git a/domain/service/event_s/event_init.go b/domain/service/event_s/event_init.go index 6f9d894..c241c30 100644 --- a/domain/service/event_s/event_init.go +++ b/domain/service/event_s/event_init.go @@ -12,15 +12,12 @@ import ( "hilo-group/domain/cache/group_c" "hilo-group/domain/event/group_ev" "hilo-group/domain/event/group_power_ev" - "hilo-group/domain/event/mic_ev" "hilo-group/domain/model/diamond_m" "hilo-group/domain/model/groupPower_m" "hilo-group/domain/model/group_m" - "hilo-group/domain/model/mic_m" "hilo-group/domain/model/msg_m" "hilo-group/domain/model/task_m" "hilo-group/domain/model/user_m" - "hilo-group/domain/service/group_mic_s" "hilo-group/myerr" "strconv" "time" @@ -33,7 +30,6 @@ func EventInit() { GroupImMass() GroupTheme() //SendGift() // 送礼事件 - OnMic() // 在麦上事件 GroupInMicChangeEvent() // 用户进房推送mic位置信息 } @@ -535,36 +531,3 @@ func SendGift() { // return nil //}) } - -func OnMic() { - // 上麦经验/上麦时长 - mic_ev.AddOnMicEventAsync(func(model *domain.Model, e interface{}) error { - event, ok := e.(*mic_ev.OnMicEvent) - if !ok { - model.Log.Errorf("AddOnMicEventSync event type err") - return nil - } - if err := group_mic_s.NewGroupPowerService(model.MyContext).IncrGroupPowerOnMicExpAndTime(event.GroupUuid, event.UserId, event.Timestamp); err != nil { - model.Log.Errorf("cron micIn GroupPowerOnMicExp err:%v", err) - } else { - model.Log.Infof("cron micIn GroupPowerOnMicExp success, groupId:%v, userId:%v", event.GroupUuid, event.UserId) - } - return nil - }) - // 用户上麦时长 - mic_ev.AddOnMicEventAsync(func(model *domain.Model, e interface{}) error { - event, ok := e.(*mic_ev.OnMicEvent) - if !ok { - model.Log.Errorf("AddOnMicEventSync event type err") - return nil - } - if err := mic_m.IncrUserOnMic(model, event.UserId, event.Timestamp); err != nil { - model.Log.Errorf("cron micIn IncrUserOnMic err:%v", err) - } else { - model.Log.Infof("cron micIn IncrUserOnMic success,userId:%v", event.UserId) - } - // 处理活动数据 活动已经结束 - //go rpc.AddActPoint(model, event.UserId, 1, 0) - return nil - }) -} -- 2.22.0