You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.2 KiB
Go
99 lines
3.2 KiB
Go
2 years ago
|
package msg_handler
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"git.noahlan.cn/northlan/ntools-go/kafka"
|
||
|
"git.noahlan.cn/northlan/ntools-go/logger"
|
||
|
"github.com/jinzhu/now"
|
||
|
"live-gateway/config"
|
||
|
"live-gateway/pb"
|
||
|
kfk "live-gateway/pkg/kafka"
|
||
|
"live-gateway/pkg/timex"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
type GuardBuyOfficial struct {
|
||
|
UserInfo userInfo `json:"user_info"` // 用户信息
|
||
|
GuardLevel int64 `json:"guard_level"` // 大航海等级 1总督 2提督 3舰长
|
||
|
GuardNum int64 `json:"guard_num"` // 大航海数量
|
||
|
GuardUnit string `json:"guard_unit"` // 大航海单位 (个月)
|
||
|
FansMedalLevel int64 `json:"fans_medal_level"` // 粉丝勋章等级
|
||
|
FansMedalName string `json:"fans_medal_name"` // 粉丝勋章名
|
||
|
FansMedalWearingStatus bool `json:"fans_medal_wearing_status"` // 佩戴的粉丝勋章佩戴状态
|
||
|
RoomId int64 `json:"room_id"` // 房间号
|
||
|
MsgId string `json:"msg_id"` // 消息唯一id
|
||
|
Timestamp int64 `json:"timestamp"` // 上舰时间秒级时间戳
|
||
|
}
|
||
|
|
||
|
type userInfo struct {
|
||
|
Uid int64 `json:"uid"` // 用户uid
|
||
|
Uname string `json:"uname"` // 用户昵称
|
||
|
Uface string `json:"uface"` // 用户头像
|
||
|
}
|
||
|
|
||
|
type GuardBuyOfficialHandler struct {
|
||
|
producer *kafka.Producer
|
||
|
liveRoomId int64
|
||
|
}
|
||
|
|
||
|
func NewGuardBuyOfficialHandler(liveRoomId int64) *GuardBuyOfficialHandler {
|
||
|
cfg := config.Config.Kafka.GuardBuy
|
||
|
return &GuardBuyOfficialHandler{
|
||
|
producer: kafka.NewKafkaProducer(kfk.DefaultProducerConfig, cfg.Addr, cfg.Topic),
|
||
|
liveRoomId: liveRoomId,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (h *GuardBuyOfficialHandler) CMD() string {
|
||
|
return "GUARD_BUY"
|
||
|
}
|
||
|
|
||
|
func (h *GuardBuyOfficialHandler) HandlerMessage(data []byte) {
|
||
|
var baseMsg struct {
|
||
|
CMD string `json:"cmd"`
|
||
|
Data *GuardBuyOfficial `json:"data"`
|
||
|
}
|
||
|
if err := json.Unmarshal(data, &baseMsg); err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
d := baseMsg.Data
|
||
|
|
||
|
logger.SLog.Infof("%s 购买 %d %d%s", d.UserInfo.Uname, d.GuardLevel, d.GuardNum, d.GuardUnit)
|
||
|
|
||
|
dmMsg := &pbMq.MqNobilityBuy{
|
||
|
Platform: pbMq.Platform_name[int32(pbMq.Platform_bilibili)],
|
||
|
LiveRoomId: h.liveRoomId,
|
||
|
Uid: d.UserInfo.Uid,
|
||
|
Uname: d.UserInfo.Uname,
|
||
|
Avatar: d.UserInfo.Uface,
|
||
|
MsgId: d.MsgId,
|
||
|
NobilityLevel: d.GuardLevel,
|
||
|
Price: 0, // 自己算
|
||
|
StartTime: d.Timestamp,
|
||
|
EndTime: 0, // 自己算
|
||
|
FansMedalWearingStatus: d.FansMedalWearingStatus,
|
||
|
FansMedalName: d.FansMedalName,
|
||
|
FansMedalLevel: d.FansMedalLevel,
|
||
|
}
|
||
|
switch d.GuardLevel {
|
||
|
case 1:
|
||
|
dmMsg.Price = 19998 * 1000 // 金瓜子
|
||
|
case 2:
|
||
|
dmMsg.Price = 1998 * 1000
|
||
|
case 3:
|
||
|
dmMsg.Price = 138 * 1000 // 应该没有人会不用连续包月然后取消吧?
|
||
|
}
|
||
|
// 计算时间
|
||
|
switch d.GuardUnit {
|
||
|
case "月":
|
||
|
dmMsg.EndTime = now.With(timex.TimestampToTime(d.Timestamp)).
|
||
|
AddDate(0, 1, 0).Unix()
|
||
|
case "年":
|
||
|
dmMsg.EndTime = now.With(timex.TimestampToTime(d.Timestamp)).
|
||
|
AddDate(1, 0, 0).Unix()
|
||
|
}
|
||
|
|
||
|
_ = h.producer.SendMessageAsync(dmMsg, strconv.FormatInt(dmMsg.Uid, 10))
|
||
|
}
|