From 72bda06916cd29d63056a2dc2753244b4b07a5b5 Mon Sep 17 00:00:00 2001 From: wish Date: Thu, 16 Nov 2023 21:51:28 +1100 Subject: [PATCH] implement Quest caching --- config.json | 1 + config/config.go | 1 + server/channelserver/handlers_quest.go | 7 +++++++ server/channelserver/sys_channel_server.go | 6 ++++++ 4 files changed, 15 insertions(+) diff --git a/config.json b/config.json index 31629b894..a62b45325 100644 --- a/config.json +++ b/config.json @@ -12,6 +12,7 @@ "ScreenshotAPIURL": "", "DeleteOnSaveCorruption": false, "ClientMode": "ZZ", + "QuestCacheExpiry": 300, "DevMode": true, "DevModeOptions": { "AutoCreateAccount": true, diff --git a/config/config.go b/config/config.go index 65c663511..4c156d35e 100644 --- a/config/config.go +++ b/config/config.go @@ -79,6 +79,7 @@ type Config struct { DeleteOnSaveCorruption bool // Attempts to save corrupted data will flag the save for deletion ClientMode string RealClientMode Mode + QuestCacheExpiry int // Number of seconds to keep quest data cached DevMode bool DevModeOptions DevModeOptions diff --git a/server/channelserver/handlers_quest.go b/server/channelserver/handlers_quest.go index 76a615c49..2c82986e7 100644 --- a/server/channelserver/handlers_quest.go +++ b/server/channelserver/handlers_quest.go @@ -77,6 +77,11 @@ func handleMsgMhfSaveFavoriteQuest(s *Session, p mhfpacket.MHFPacket) { } func loadQuestFile(s *Session, questId int) []byte { + data, exists := s.server.questCacheData[questId] + if exists && s.server.questCacheTime[questId].Add(time.Duration(s.server.erupeConfig.QuestCacheExpiry)*time.Second).After(time.Now()) { + return data + } + file, err := os.ReadFile(filepath.Join(s.server.erupeConfig.BinPath, fmt.Sprintf("quests/%05dd0.bin", questId))) if err != nil { return nil @@ -113,6 +118,8 @@ func loadQuestFile(s *Session, questId int) []byte { } questBody.WriteBytes(newStrings.Data()) + s.server.questCacheData[questId] = questBody.Data() + s.server.questCacheTime[questId] = time.Now() return questBody.Data() } diff --git a/server/channelserver/sys_channel_server.go b/server/channelserver/sys_channel_server.go index 02ede6f29..d12d713f5 100644 --- a/server/channelserver/sys_channel_server.go +++ b/server/channelserver/sys_channel_server.go @@ -5,6 +5,7 @@ import ( "net" "strings" "sync" + "time" "erupe-ce/common/byteframe" ps "erupe-ce/common/pascalstring" @@ -73,6 +74,9 @@ type Server struct { name string raviente *Raviente + + questCacheData map[int][]byte + questCacheTime map[int]time.Time } type Raviente struct { @@ -163,6 +167,8 @@ func NewServer(config *Config) *Server { state: make([]uint32, 30), support: make([]uint32, 30), }, + questCacheData: make(map[int][]byte), + questCacheTime: make(map[int]time.Time), } // Mezeporta