333 lines
11 KiB
Go
333 lines
11 KiB
Go
![]() |
package logic
|
||
|
|
||
|
//type reportEvent struct {
|
||
|
// req any
|
||
|
// path string
|
||
|
//}
|
||
|
//
|
||
|
//type gravityEvent struct {
|
||
|
// clientId string
|
||
|
// clientIp string
|
||
|
// event *gravity.Event
|
||
|
// reporter gravity.Reporter
|
||
|
//}
|
||
|
//
|
||
|
//type EventManager struct {
|
||
|
// manager
|
||
|
//
|
||
|
// wg sync.WaitGroup
|
||
|
//
|
||
|
// httpRpcClient *rpc.HttpRpcClient
|
||
|
//
|
||
|
// eventFuns int
|
||
|
// eventChan chan *reportEvent
|
||
|
//
|
||
|
// gravityEventFuns int
|
||
|
// gravityEventChan chan *gravityEvent
|
||
|
//}
|
||
|
//
|
||
|
//func NewEventManager(svr server.Server, rpcClient *rpc.HttpRpcClient) *EventManager {
|
||
|
// return &EventManager{manager: manager{logger: svr.Logger(), server: svr}, httpRpcClient: rpcClient}
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) Init() error {
|
||
|
// this.eventChan = make(chan *reportEvent, 4096)
|
||
|
// this.gravityEventChan = make(chan *gravityEvent, 4096)
|
||
|
// for i := 0; i < 8; i++ {
|
||
|
// go this.eventHandler()
|
||
|
// }
|
||
|
// for i := 0; i < 8; i++ {
|
||
|
// go this.gravityEventHandler()
|
||
|
// }
|
||
|
// return nil
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) Close() error {
|
||
|
// close(this.eventChan)
|
||
|
// close(this.gravityEventChan)
|
||
|
// this.wg.Wait()
|
||
|
// return nil
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) eventHandler() {
|
||
|
// this.wg.Add(1)
|
||
|
// this.eventFuns += 1
|
||
|
// defer func() {
|
||
|
// this.wg.Done()
|
||
|
// this.eventFuns -= 1
|
||
|
// }()
|
||
|
// for {
|
||
|
// event, ok := <-this.eventChan
|
||
|
// if !ok {
|
||
|
// return
|
||
|
// }
|
||
|
//
|
||
|
// if this.logger.IsDebugEnabled() {
|
||
|
// this.logger.Debugf("Log event report, url: %s, req: %s", event.path, util.ToJsonString(event.req))
|
||
|
// }
|
||
|
//
|
||
|
// _, err := this.httpRpcClient.RandPost("event", event.path, nil, event.req, nil)
|
||
|
// if err != nil {
|
||
|
// this.logger.Error("Log event report failed, ", err)
|
||
|
// }
|
||
|
//
|
||
|
// if this.eventFuns > 8 && len(this.eventChan) < 2000 {
|
||
|
// return
|
||
|
// }
|
||
|
// }
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) gravityEventHandler() {
|
||
|
// this.wg.Add(1)
|
||
|
// this.gravityEventFuns += 1
|
||
|
// defer func() {
|
||
|
// this.wg.Done()
|
||
|
// this.gravityEventFuns -= 1
|
||
|
// }()
|
||
|
// for {
|
||
|
// event, ok := <-this.gravityEventChan
|
||
|
// if !ok {
|
||
|
// return
|
||
|
// }
|
||
|
//
|
||
|
// if this.logger.IsDebugEnabled() {
|
||
|
// this.logger.Debugf("Gravity event report, clientId: %s, clientIp: %s, event: %s", event.clientId, event.clientIp, util.ToJsonString(event.event))
|
||
|
// }
|
||
|
// var err = event.reporter(event.clientId, event.clientIp, event.event)
|
||
|
// if err != nil {
|
||
|
// this.logger.Error("Gravity event report failed, ", err)
|
||
|
// }
|
||
|
//
|
||
|
// if this.gravityEventFuns > 8 && len(this.gravityEventChan) < 2000 {
|
||
|
// return
|
||
|
// }
|
||
|
// }
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) reportEvent(path string, req any) {
|
||
|
// this.eventChan <- &reportEvent{req: req, path: path}
|
||
|
// if len(this.eventChan) > 4000 {
|
||
|
// this.logger.Warn("The log event channel is going to be full, length: ", len(this.eventChan))
|
||
|
// go this.eventHandler()
|
||
|
// }
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) ServerOperate(logType LogType, serverId, operate uint32) {
|
||
|
// this.reportEvent("/log/server/operate", &proto.MsgEventServerOperateReq{
|
||
|
// LogType: uint32(logType),
|
||
|
// ServerId: serverId,
|
||
|
// Operate: operate,
|
||
|
// Version: server.Version(),
|
||
|
// ProgramHash: server.ProgramHash,
|
||
|
// DataHash: server.DataHash,
|
||
|
// ConfigHash: server.ConfigHash,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) ServerOnline(logType LogType, serverId, create, online, offline, maxOnline uint32, maxOnlineTime int64) {
|
||
|
// this.reportEvent("/log/server/online", &proto.MsgEventServerOnlineReq{
|
||
|
// LogType: uint32(logType),
|
||
|
// ServerId: serverId,
|
||
|
// Create: create,
|
||
|
// Online: online,
|
||
|
// Offlines: offline,
|
||
|
// MaxOnline: maxOnline,
|
||
|
// MaxOnlineTime: maxOnlineTime,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) buildEventPlayer(player *Player) *proto.EventPlayer {
|
||
|
// return &proto.EventPlayer{
|
||
|
// Platform: player.Platform,
|
||
|
// Channel: player.Channel,
|
||
|
// ServerId: player.ServerId,
|
||
|
// UserId: player.PlayerId,
|
||
|
// RoleId: player.PlayerId,
|
||
|
// Machine: player.Temp.Machine,
|
||
|
// Version: player.Temp.Version,
|
||
|
// }
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerCommon(logType LogType, player *Player, param1, param2, param3 int32, paramStr string) {
|
||
|
// this.reportEvent("/log/player/common", &proto.MsgEventPlayerCommonReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// Param1: param1,
|
||
|
// Param2: param2,
|
||
|
// Param3: param3,
|
||
|
// ParamStr: paramStr,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerCreate(player *Player, logType LogType) {
|
||
|
// this.reportEvent("/log/player/create", &proto.MsgEventPlayerCreateReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerLogin(player *Player, logType LogType, optionType uint32, loginIp string) {
|
||
|
// this.reportEvent("/log/player/login", &proto.MsgEventPlayerLoginReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// OptionType: optionType,
|
||
|
// LoginIp: loginIp,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerRecharge(player *Player, logType LogType, chargeId uint32, currType uint32, count uint32, added uint32, logSubtype uint32, money uint32, addTime int64, status uint32) {
|
||
|
// this.reportEvent("/log/player/charge", &proto.MsgEventPlayerRechargeReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// ChargeId: chargeId,
|
||
|
// CurrType: currType,
|
||
|
// Count: count,
|
||
|
// Added: added,
|
||
|
// LogSubtype: logSubtype,
|
||
|
// Money: money,
|
||
|
// AddTime: addTime,
|
||
|
// Status: status,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerLevelUpgrade(player *Player, logType LogType, preLevel uint32, curLevel uint32) {
|
||
|
// this.reportEvent("/log/player/level/upgrade", &proto.MsgEventPlayerLevelUpgradeReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// PreLevel: preLevel,
|
||
|
// CurLevel: curLevel,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerItemObtain(player *Player, logType LogType, itemId, itemNum uint32) {
|
||
|
// this.reportEvent("/log/player/item/obtain", &proto.MsgEventPlayerItemObtainReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// ItemId: itemId,
|
||
|
// ItemNum: itemNum,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerItemConsume(player *Player, logType LogType, itemId, itemNum uint32) {
|
||
|
// this.reportEvent("/log/player/item/Consume", &proto.MsgEventPlayerItemConsumeReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// ItemId: itemId,
|
||
|
// ItemNum: itemNum,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerMoneyObtain(player *Player, logType LogType, moneyType, amount, curAmount uint32) {
|
||
|
// this.reportEvent("/log/player/money/obtain", &proto.MsgEventPlayerMoneyObtainReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// MoneyType: moneyType,
|
||
|
// Amount: amount,
|
||
|
// CurAmount: curAmount,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerMoneyConsume(player *Player, logType LogType, moneyType uint32, amount, curAmount uint32) {
|
||
|
// this.reportEvent("/log/player/money/consume", &proto.MsgEventPlayerMoneyConsumeReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// MoneyType: moneyType,
|
||
|
// Amount: amount,
|
||
|
// CurAmount: curAmount,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerMailLog(player *Player, logType LogType, mailId uint64, mailType, rewardType uint32, title, content string, itemId, itemNum []uint32, senderId uint64, senderTime int64) {
|
||
|
// var attachments []string
|
||
|
// for i := range itemId {
|
||
|
// attachments = append(attachments, fmt.Sprintf("%d,%d", itemId[i], itemNum[i]))
|
||
|
// }
|
||
|
// this.reportEvent("/log/player/mail", &proto.MsgEventPlayerMailLogReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// MailId: mailId,
|
||
|
// MailType: mailType,
|
||
|
// RewardType: rewardType,
|
||
|
// Title: title,
|
||
|
// Content: content,
|
||
|
// Attachment: strings.Join(attachments, "|"),
|
||
|
// SenderId: senderId,
|
||
|
// SenderTime: senderTime,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerTaskLog(player *Player, logType LogType, taskId uint32, param1, param2, param3 []int) {
|
||
|
// this.reportEvent("/log/player/task", &proto.MsgEventPlayerTaskLogReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// TaskId: taskId,
|
||
|
// Param1: param1,
|
||
|
// Param2: param2,
|
||
|
// Param3: param3,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerShopLog(player *Player, logType LogType, shopType, itemId, itemNum uint32, priceType int32, price uint32) {
|
||
|
// this.reportEvent("/log/player/shop", &proto.MsgEventPlayerShopLogReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// ShopType: shopType,
|
||
|
// ItemId: itemId,
|
||
|
// ItemNum: itemNum,
|
||
|
// PriceType: priceType,
|
||
|
// Price: price,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) PlayerActivity(player *Player, logType LogType, activityType, status uint32) {
|
||
|
// this.reportEvent("/log/player/activity", &proto.MsgEventPlayerActivityReq{
|
||
|
// EventPlayer: this.buildEventPlayer(player),
|
||
|
// LogType: uint32(logType),
|
||
|
// ActivityType: activityType,
|
||
|
// Status: status,
|
||
|
// })
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) WechatGravityEvent(player *Player, event *gravity.Event) {
|
||
|
// this.gravityEventChan <- &gravityEvent{clientId: player.Username, clientIp: player.Temp.Address, event: event, reporter: gravity.WechatEventCollect}
|
||
|
// if len(this.gravityEventChan) > 4000 {
|
||
|
// this.logger.Warn("The gravity event channel is going to be full, length: ", len(this.gravityEventChan))
|
||
|
// go this.gravityEventHandler()
|
||
|
// }
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) TapTapGravityEvent(player *Player, event *gravity.Event) {
|
||
|
// this.gravityEventChan <- &gravityEvent{clientId: player.Username, clientIp: player.Temp.Address, event: event, reporter: gravity.TapTapEventCollect}
|
||
|
// if len(this.gravityEventChan) > 4000 {
|
||
|
// this.logger.Warn("The gravity event channel is going to be full, length: ", len(this.gravityEventChan))
|
||
|
// go this.gravityEventHandler()
|
||
|
// }
|
||
|
//}
|
||
|
//
|
||
|
//func (this *EventManager) ChargeGravityEvent(player *Player, order *PlayerChargeOrder, chargeTable *data.Charge, chargeDesc *data.Language) {
|
||
|
// var properties = gravity.Properties{}
|
||
|
//
|
||
|
// properties.Add("lib_version", "1.0")
|
||
|
// properties.Add("lib", "api")
|
||
|
// properties.Add("system_language", "zh_CN")
|
||
|
// properties.Add("pay_amount", order.Price)
|
||
|
// properties.Add("pay_type", "CNY")
|
||
|
// properties.Add("order_id", order.Id)
|
||
|
// properties.Add("is_first_pay", false)
|
||
|
// properties.Add("ip", player.Temp.Address)
|
||
|
// if chargeDesc != nil {
|
||
|
// properties.Add("pay_reason", chargeDesc.Lang1)
|
||
|
// } else {
|
||
|
// properties.Add("pay_reason", util.IntegerToString(chargeTable.ItemName))
|
||
|
// }
|
||
|
//
|
||
|
// switch proto.PaymentType(order.PaymentType) {
|
||
|
// case proto.PaymentTypeQuickGameAndroid, proto.PaymentTypeQuickGameIOS:
|
||
|
// properties.Add("pay_method", "QuickGame")
|
||
|
// this.TapTapGravityEvent(player, gravity.NewEvent(gravity.EventTypeTrack, gravity.EventNameCharge, properties))
|
||
|
// case proto.PaymentTypeWechatVirtual2, proto.PaymentTypeWechatIOSPayment1:
|
||
|
// properties.Add("pay_method", "微信")
|
||
|
// this.WechatGravityEvent(player, gravity.NewEvent(gravity.EventTypeTrack, gravity.EventNameCharge, properties))
|
||
|
// }
|
||
|
//}
|