pet_home_server/src/server/game/LogMgr.go
2025-01-03 15:17:36 +08:00

73 lines
1.2 KiB
Go

package game
import (
"encoding/json"
kafkaMiddleware "server/middleware/kafka"
"sync"
"github.com/robfig/cron/v3"
)
const (
Login_log = 1
LoginOut_log = 2
Event_log = 3
)
const (
PLAYROOM_LOST = "playroom_lost"
LOG_LENGTH = 10000
)
type LogMgr struct {
L []*Log
McronSave *cron.Cron
Lock sync.Mutex
}
type Log struct {
Uid int64
EventName string
Param map[string]interface{}
TimeStamp int64
}
func (L *LogMgr) InitManager() {
L.McronSave = cron.New()
L.L = make([]*Log, 0, 10)
L.McronSave.AddFunc("@every 10s", func() {
L.Lock.Lock()
defer L.Lock.Unlock()
if kafkaMiddleware.KafkaMod == nil {
if len(L.L) > LOG_LENGTH {
L.L = L.L[:0]
} else if len(L.L) > LOG_LENGTH {
L.L = L.L[len(L.L)-LOG_LENGTH:]
}
return
}
for _, v := range L.L {
value, _ := json.Marshal(v)
kafkaMiddleware.SendMsg([]byte(v.EventName), value)
}
L.L = L.L[:0]
})
L.McronSave.Start()
}
func (L *LogMgr) AddLog(logs *Log) {
L.Lock.Lock()
defer L.Lock.Unlock()
L.L = append(L.L, logs)
}
func (L *LogMgr) Close() {
L.McronSave.Stop()
L.Lock.Lock()
defer L.Lock.Unlock()
for _, v := range L.L {
value, _ := json.Marshal(v)
kafkaMiddleware.SendMsg([]byte(v.EventName), value)
}
L.L = L.L[:0]
}