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)) // } //}