90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
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
|
|
})
|
|
}
|