package gameserver import ( "fmt" "sync" "time" pb "gac-hkrpg-go/protocol/proto" "google.golang.org/protobuf/proto" ) const archiveClientVersion uint32 = 4006 type cwArchiveStore struct { mu sync.RWMutex nextID uint32 entries []*pb.FAIHLAKPABN } var globalCWArchive = &cwArchiveStore{nextID: 1} func cwRecordArchive(record *pb.OEDHMAHDECC, seasonID, subSeasonID uint32) *pb.FAIHLAKPABN { if record == nil { return nil } globalCWArchive.mu.Lock() defer globalCWArchive.mu.Unlock() id := globalCWArchive.nextID globalCWArchive.nextID++ entry := &pb.FAIHLAKPABN{ BAAGDILLLME: id, OBNEAIPKGKL: time.Now().Unix(), LJNGPCKPJLF: seasonID, GEGMHOMNBDG: subSeasonID, PMBNKEFCICH: archiveClientVersion, IECKKCHJMLP: false, BFLLJJBHLDF: proto.Clone(record).(*pb.OEDHMAHDECC), } globalCWArchive.entries = append(globalCWArchive.entries, entry) if len(globalCWArchive.entries) > 50 { globalCWArchive.entries = globalCWArchive.entries[len(globalCWArchive.entries)-50:] } return entry } func init() { cwHandle("GridFightGetArchive", func(s *Session, req *pb.GridFightGetArchiveCsReq, rsp *pb.GridFightGetArchiveScRsp) error { rsp.Retcode = 0 if req != nil { rsp.Type = req.Type } globalCWArchive.mu.RLock() defer globalCWArchive.mu.RUnlock() favourOnly := req != nil && req.Type == pb.MLJIILDNDPL_MLJIILDNDPL_FAGECPGMPEH for i := len(globalCWArchive.entries) - 1; i >= 0; i-- { e := globalCWArchive.entries[i] if favourOnly && !e.IECKKCHJMLP { continue } rsp.MCGGPONOCKC = append(rsp.MCGGPONOCKC, proto.Clone(e).(*pb.FAIHLAKPABN)) } PacketLog(fmt.Sprintf("CW_GET_ARCHIVE type=%v entries=%d", rsp.Type, len(rsp.MCGGPONOCKC))) return nil }) cwHandle("FavourArchive", func(s *Session, req *pb.FavourArchiveCsReq, rsp *pb.FavourArchiveScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) if req == nil { return nil } globalCWArchive.mu.Lock() defer globalCWArchive.mu.Unlock() for _, e := range globalCWArchive.entries { if e.BAAGDILLLME == req.BAAGDILLLME { e.IECKKCHJMLP = req.IECKKCHJMLP rsp.BAAGDILLLME = req.BAAGDILLLME rsp.IECKKCHJMLP = req.IECKKCHJMLP rsp.Retcode = 0 PacketLog(fmt.Sprintf("CW_FAVOUR_ARCHIVE id=%d favour=%t", req.BAAGDILLLME, req.IECKKCHJMLP)) return nil } } return nil }) }