mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 07:32:32 +01:00
docs: mark binary I/O and copy-paste anti-patterns as resolved
Binary I/O (#5): all 12 remaining encoding/binary calls are legitimate (zero-alloc spot-reads, random-access into game blobs). Copy-paste handlers (#8): loadCharacterData/saveCharacterData helpers now cover standard blob patterns. Also upgrades saveCharacterData to send doAckSimpleFail on oversize payloads and DB errors, and migrates handleMsgMhfSaveScenarioData to the improved helper.
This commit is contained in:
@@ -184,19 +184,7 @@ func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) {
|
||||
|
||||
func handleMsgMhfSaveScenarioData(s *Session, p mhfpacket.MHFPacket) {
|
||||
pkt := p.(*mhfpacket.MsgMhfSaveScenarioData)
|
||||
if len(pkt.RawDataPayload) > 65536 {
|
||||
s.logger.Warn("Scenario payload too large", zap.Int("len", len(pkt.RawDataPayload)))
|
||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||
return
|
||||
}
|
||||
dumpSaveData(s, pkt.RawDataPayload, "scenario")
|
||||
_, err := s.server.db.Exec("UPDATE characters SET scenariodata = $1 WHERE id = $2", pkt.RawDataPayload, s.charID)
|
||||
if err != nil {
|
||||
s.logger.Error("Failed to update scenario data in db", zap.Error(err))
|
||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||
return
|
||||
}
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||
saveCharacterData(s, pkt.AckHandle, "scenariodata", pkt.RawDataPayload, 65536)
|
||||
}
|
||||
|
||||
func handleMsgMhfLoadScenarioData(s *Session, p mhfpacket.MHFPacket) {
|
||||
|
||||
@@ -83,13 +83,15 @@ func loadCharacterData(s *Session, ackHandle uint32, column string, defaultData
|
||||
func saveCharacterData(s *Session, ackHandle uint32, column string, data []byte, maxSize int) {
|
||||
if maxSize > 0 && len(data) > maxSize {
|
||||
s.logger.Warn("Payload too large for "+column, zap.Int("len", len(data)), zap.Int("max", maxSize))
|
||||
doAckSimpleSucceed(s, ackHandle, make([]byte, 4))
|
||||
doAckSimpleFail(s, ackHandle, make([]byte, 4))
|
||||
return
|
||||
}
|
||||
dumpSaveData(s, data, column)
|
||||
_, err := s.server.db.Exec("UPDATE characters SET "+column+"=$1 WHERE id=$2", data, s.charID)
|
||||
if err != nil {
|
||||
s.logger.Error("Failed to save "+column, zap.Error(err))
|
||||
doAckSimpleFail(s, ackHandle, make([]byte, 4))
|
||||
return
|
||||
}
|
||||
doAckSimpleSucceed(s, ackHandle, make([]byte, 4))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user