mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 23:54:33 +01:00
Move scan loops from handlers into repository methods so that interfaces return typed slices instead of leaking database cursors. This fixes resource leaks (7 of 12 call sites never closed rows) and makes all 12 methods mockable for unit tests. Affected repos: CafeRepo, ShopRepo, EventRepo, RengokuRepo, DivaRepo, ScenarioRepo, MiscRepo, MercenaryRepo. New structs: DivaEvent, MercenaryLoan, GuildHuntCatUsage. EventRepo.GetEventQuests left as-is (requires broader Server refactor).
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"erupe-ce/common/byteframe"
|
|
"erupe-ce/network/mhfpacket"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// Scenario represents scenario counter data.
|
|
type Scenario struct {
|
|
MainID uint32
|
|
// 0 = Basic
|
|
// 1 = Veteran
|
|
// 3 = Other
|
|
// 6 = Pallone
|
|
// 7 = Diva
|
|
CategoryID uint8
|
|
}
|
|
|
|
func handleMsgMhfInfoScenarioCounter(s *Session, p mhfpacket.MHFPacket) {
|
|
pkt := p.(*mhfpacket.MsgMhfInfoScenarioCounter)
|
|
scenarios, err := s.server.scenarioRepo.GetCounters()
|
|
if err != nil {
|
|
s.logger.Error("Failed to get scenario counter info from db", zap.Error(err))
|
|
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 1))
|
|
return
|
|
}
|
|
|
|
// Trim excess scenarios
|
|
if len(scenarios) > 128 {
|
|
scenarios = scenarios[:128]
|
|
}
|
|
|
|
bf := byteframe.NewByteFrame()
|
|
bf.WriteUint8(uint8(len(scenarios)))
|
|
for _, scenario := range scenarios {
|
|
bf.WriteUint32(scenario.MainID)
|
|
// If item exchange
|
|
switch scenario.CategoryID {
|
|
case 3, 6, 7:
|
|
bf.WriteBool(true)
|
|
default:
|
|
bf.WriteBool(false)
|
|
}
|
|
bf.WriteUint8(scenario.CategoryID)
|
|
}
|
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
|
}
|