mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 15:43:49 +01:00
fix(channelserver): add error logging to silently ignored repo calls
19 repository calls across 8 handler files were silently discarding errors with `_ =`, making database failures invisible. Add structured logging at appropriate levels: Error for write operations where data loss may occur (guild saves, member updates), Warn for read operations where handlers continue with zero-value defaults (application checks, warehouse loads, item box queries). No control flow changes.
This commit is contained in:
@@ -338,7 +338,11 @@ func handleMsgMhfStateFestaU(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
guild, err := s.server.guildRepo.GetByCharID(s.charID)
|
guild, err := s.server.guildRepo.GetByCharID(s.charID)
|
||||||
applicant := false
|
applicant := false
|
||||||
if guild != nil {
|
if guild != nil {
|
||||||
applicant, _ = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
var appErr error
|
||||||
|
applicant, appErr = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
||||||
|
if appErr != nil {
|
||||||
|
s.logger.Warn("Failed to check guild application status", zap.Error(appErr))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err != nil || guild == nil || applicant {
|
if err != nil || guild == nil || applicant {
|
||||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||||
@@ -367,7 +371,11 @@ func handleMsgMhfStateFestaG(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
guild, err := s.server.guildRepo.GetByCharID(s.charID)
|
guild, err := s.server.guildRepo.GetByCharID(s.charID)
|
||||||
applicant := false
|
applicant := false
|
||||||
if guild != nil {
|
if guild != nil {
|
||||||
applicant, _ = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
var appErr error
|
||||||
|
applicant, appErr = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
||||||
|
if appErr != nil {
|
||||||
|
s.logger.Warn("Failed to check guild application status", zap.Error(appErr))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
resp := byteframe.NewByteFrame()
|
resp := byteframe.NewByteFrame()
|
||||||
if err != nil || guild == nil || applicant {
|
if err != nil || guild == nil || applicant {
|
||||||
|
|||||||
@@ -59,7 +59,11 @@ func handleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
guild, err := s.server.guildRepo.GetByCharID(s.charID)
|
guild, err := s.server.guildRepo.GetByCharID(s.charID)
|
||||||
applicant := false
|
applicant := false
|
||||||
if guild != nil {
|
if guild != nil {
|
||||||
applicant, _ = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
var appErr error
|
||||||
|
applicant, appErr = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
||||||
|
if appErr != nil {
|
||||||
|
s.logger.Warn("Failed to check guild application status", zap.Error(appErr))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err != nil || guild == nil || applicant {
|
if err != nil || guild == nil || applicant {
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
|
|||||||
@@ -51,13 +51,19 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
guild.LeaderCharID = guildMembers[i].CharID
|
guild.LeaderCharID = guildMembers[i].CharID
|
||||||
guildMembers[0].OrderIndex = guildMembers[i].OrderIndex
|
guildMembers[0].OrderIndex = guildMembers[i].OrderIndex
|
||||||
guildMembers[i].OrderIndex = 1
|
guildMembers[i].OrderIndex = 1
|
||||||
_ = s.server.guildRepo.SaveMember(guildMembers[0])
|
if err := s.server.guildRepo.SaveMember(guildMembers[0]); err != nil {
|
||||||
_ = s.server.guildRepo.SaveMember(guildMembers[i])
|
s.logger.Error("Failed to save former leader member data", zap.Error(err))
|
||||||
|
}
|
||||||
|
if err := s.server.guildRepo.SaveMember(guildMembers[i]); err != nil {
|
||||||
|
s.logger.Error("Failed to save new leader member data", zap.Error(err))
|
||||||
|
}
|
||||||
bf.WriteUint32(guildMembers[i].CharID)
|
bf.WriteUint32(guildMembers[i].CharID)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ = s.server.guildRepo.Save(guild)
|
if err := s.server.guildRepo.Save(guild); err != nil {
|
||||||
|
s.logger.Error("Failed to save guild after leadership resign", zap.Error(err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case mhfpacket.OperateGuildApply:
|
case mhfpacket.OperateGuildApply:
|
||||||
err = s.server.guildRepo.CreateApplication(guild.ID, s.charID, s.charID, GuildApplicationTypeApplied)
|
err = s.server.guildRepo.CreateApplication(guild.ID, s.charID, s.charID, GuildApplicationTypeApplied)
|
||||||
@@ -76,9 +82,11 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
response = 0
|
response = 0
|
||||||
} else {
|
} else {
|
||||||
_ = s.server.mailRepo.SendMail(0, s.charID, "Withdrawal",
|
if err := s.server.mailRepo.SendMail(0, s.charID, "Withdrawal",
|
||||||
fmt.Sprintf("You have withdrawn from 「%s」.", guild.Name),
|
fmt.Sprintf("You have withdrawn from 「%s」.", guild.Name),
|
||||||
0, 0, false, true)
|
0, 0, false, true); err != nil {
|
||||||
|
s.logger.Warn("Failed to send guild withdrawal notification", zap.Error(err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bf.WriteUint32(uint32(response))
|
bf.WriteUint32(uint32(response))
|
||||||
case mhfpacket.OperateGuildDonateRank:
|
case mhfpacket.OperateGuildDonateRank:
|
||||||
@@ -101,7 +109,9 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
guild.Comment, _ = stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
guild.Comment, _ = stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
||||||
_ = s.server.guildRepo.Save(guild)
|
if err := s.server.guildRepo.Save(guild); err != nil {
|
||||||
|
s.logger.Error("Failed to save guild comment", zap.Error(err))
|
||||||
|
}
|
||||||
case mhfpacket.OperateGuildUpdateMotto:
|
case mhfpacket.OperateGuildUpdateMotto:
|
||||||
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
|
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
|
||||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||||
@@ -110,7 +120,9 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
_ = pkt.Data1.ReadUint16()
|
_ = pkt.Data1.ReadUint16()
|
||||||
guild.SubMotto = pkt.Data1.ReadUint8()
|
guild.SubMotto = pkt.Data1.ReadUint8()
|
||||||
guild.MainMotto = pkt.Data1.ReadUint8()
|
guild.MainMotto = pkt.Data1.ReadUint8()
|
||||||
_ = s.server.guildRepo.Save(guild)
|
if err := s.server.guildRepo.Save(guild); err != nil {
|
||||||
|
s.logger.Error("Failed to save guild motto", zap.Error(err))
|
||||||
|
}
|
||||||
case mhfpacket.OperateGuildRenamePugi1:
|
case mhfpacket.OperateGuildRenamePugi1:
|
||||||
handleRenamePugi(s, pkt.Data2, guild, 1)
|
handleRenamePugi(s, pkt.Data2, guild, 1)
|
||||||
case mhfpacket.OperateGuildRenamePugi2:
|
case mhfpacket.OperateGuildRenamePugi2:
|
||||||
@@ -165,7 +177,9 @@ func handleRenamePugi(s *Session, bf *byteframe.ByteFrame, guild *Guild, num int
|
|||||||
default:
|
default:
|
||||||
guild.PugiName3 = name
|
guild.PugiName3 = name
|
||||||
}
|
}
|
||||||
_ = s.server.guildRepo.Save(guild)
|
if err := s.server.guildRepo.Save(guild); err != nil {
|
||||||
|
s.logger.Error("Failed to save guild pugi name", zap.Error(err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleChangePugi(s *Session, outfit uint8, guild *Guild, num int) {
|
func handleChangePugi(s *Session, outfit uint8, guild *Guild, num int) {
|
||||||
@@ -177,7 +191,9 @@ func handleChangePugi(s *Session, outfit uint8, guild *Guild, num int) {
|
|||||||
case 3:
|
case 3:
|
||||||
guild.PugiOutfit3 = outfit
|
guild.PugiOutfit3 = outfit
|
||||||
}
|
}
|
||||||
_ = s.server.guildRepo.Save(guild)
|
if err := s.server.guildRepo.Save(guild); err != nil {
|
||||||
|
s.logger.Error("Failed to save guild pugi outfit", zap.Error(err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleDonateRP(s *Session, amount uint16, guild *Guild, _type int) []byte {
|
func handleDonateRP(s *Session, amount uint16, guild *Guild, _type int) []byte {
|
||||||
@@ -299,7 +315,9 @@ func handleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||||
} else {
|
} else {
|
||||||
_ = s.server.mailRepo.SendMail(mail.SenderID, mail.RecipientID, mail.Subject, mail.Body, 0, 0, false, true)
|
if err := s.server.mailRepo.SendMail(mail.SenderID, mail.RecipientID, mail.Subject, mail.Body, 0, 0, false, true); err != nil {
|
||||||
|
s.logger.Warn("Failed to send guild member operation mail", zap.Error(err))
|
||||||
|
}
|
||||||
if s.server.Registry != nil {
|
if s.server.Registry != nil {
|
||||||
s.server.Registry.NotifyMailToCharID(pkt.CharID, s, &mail)
|
s.server.Registry.NotifyMailToCharID(pkt.CharID, s, &mail)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -148,7 +148,9 @@ func handleMsgMhfAnswerGuildScout(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
bf.WriteUint32(guild.ID)
|
bf.WriteUint32(guild.ID)
|
||||||
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
|
||||||
for _, m := range msgs {
|
for _, m := range msgs {
|
||||||
_ = s.server.mailRepo.SendMail(m.senderID, m.recipientID, m.subject, m.body, 0, 0, false, true)
|
if err := s.server.mailRepo.SendMail(m.senderID, m.recipientID, m.subject, m.body, 0, 0, false, true); err != nil {
|
||||||
|
s.logger.Warn("Failed to send guild scout response mail", zap.Error(err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -402,12 +402,14 @@ func addWarehouseItem(s *Session, item mhfitem.MHFItemStack) {
|
|||||||
|
|
||||||
func warehouseGetItems(s *Session, index uint8) []mhfitem.MHFItemStack {
|
func warehouseGetItems(s *Session, index uint8) []mhfitem.MHFItemStack {
|
||||||
initializeWarehouse(s)
|
initializeWarehouse(s)
|
||||||
var data []byte
|
|
||||||
var items []mhfitem.MHFItemStack
|
var items []mhfitem.MHFItemStack
|
||||||
if index > 10 {
|
if index > 10 {
|
||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
data, _ = s.server.houseRepo.GetWarehouseItemData(s.charID, index)
|
data, err := s.server.houseRepo.GetWarehouseItemData(s.charID, index)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Warn("Failed to load warehouse item data", zap.Error(err))
|
||||||
|
}
|
||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
box := byteframe.NewByteFrameFromBytes(data)
|
box := byteframe.NewByteFrameFromBytes(data)
|
||||||
numStacks := box.ReadUint16()
|
numStacks := box.ReadUint16()
|
||||||
@@ -420,12 +422,14 @@ func warehouseGetItems(s *Session, index uint8) []mhfitem.MHFItemStack {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func warehouseGetEquipment(s *Session, index uint8) []mhfitem.MHFEquipment {
|
func warehouseGetEquipment(s *Session, index uint8) []mhfitem.MHFEquipment {
|
||||||
var data []byte
|
|
||||||
var equipment []mhfitem.MHFEquipment
|
var equipment []mhfitem.MHFEquipment
|
||||||
if index > 10 {
|
if index > 10 {
|
||||||
return equipment
|
return equipment
|
||||||
}
|
}
|
||||||
data, _ = s.server.houseRepo.GetWarehouseEquipData(s.charID, index)
|
data, err := s.server.houseRepo.GetWarehouseEquipData(s.charID, index)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Warn("Failed to load warehouse equipment data", zap.Error(err))
|
||||||
|
}
|
||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
box := byteframe.NewByteFrameFromBytes(data)
|
box := byteframe.NewByteFrameFromBytes(data)
|
||||||
numStacks := box.ReadUint16()
|
numStacks := box.ReadUint16()
|
||||||
|
|||||||
@@ -188,9 +188,11 @@ func handleMsgMhfEnumerateOrder(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
func handleMsgMhfGetExtraInfo(s *Session, p mhfpacket.MHFPacket) {}
|
func handleMsgMhfGetExtraInfo(s *Session, p mhfpacket.MHFPacket) {}
|
||||||
|
|
||||||
func userGetItems(s *Session) []mhfitem.MHFItemStack {
|
func userGetItems(s *Session) []mhfitem.MHFItemStack {
|
||||||
var data []byte
|
|
||||||
var items []mhfitem.MHFItemStack
|
var items []mhfitem.MHFItemStack
|
||||||
data, _ = s.server.userRepo.GetItemBox(s.userID)
|
data, err := s.server.userRepo.GetItemBox(s.userID)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Warn("Failed to load user item box", zap.Error(err))
|
||||||
|
}
|
||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
box := byteframe.NewByteFrameFromBytes(data)
|
box := byteframe.NewByteFrameFromBytes(data)
|
||||||
numStacks := box.ReadUint16()
|
numStacks := box.ReadUint16()
|
||||||
@@ -247,7 +249,10 @@ func handleMsgMhfCheckWeeklyStamp(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
updated = 1
|
updated = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
total, redeemed, _ = s.server.stampRepo.GetTotals(s.charID, pkt.StampType)
|
total, redeemed, err = s.server.stampRepo.GetTotals(s.charID, pkt.StampType)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Warn("Failed to get stamp totals", zap.Error(err))
|
||||||
|
}
|
||||||
bf := byteframe.NewByteFrame()
|
bf := byteframe.NewByteFrame()
|
||||||
bf.WriteUint16(total)
|
bf.WriteUint16(total)
|
||||||
bf.WriteUint16(redeemed)
|
bf.WriteUint16(redeemed)
|
||||||
|
|||||||
@@ -212,7 +212,11 @@ func handleMsgMhfReadMercenaryW(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
var cid uint32
|
var cid uint32
|
||||||
var name string
|
var name string
|
||||||
if pactID > 0 {
|
if pactID > 0 {
|
||||||
cid, name, _ = s.server.charRepo.FindByRastaID(pactID)
|
var findErr error
|
||||||
|
cid, name, findErr = s.server.charRepo.FindByRastaID(pactID)
|
||||||
|
if findErr != nil {
|
||||||
|
s.logger.Warn("Failed to find character by rasta ID", zap.Error(findErr))
|
||||||
|
}
|
||||||
bf.WriteUint8(1) // numLends
|
bf.WriteUint8(1) // numLends
|
||||||
bf.WriteUint32(uint32(pactID))
|
bf.WriteUint32(uint32(pactID))
|
||||||
bf.WriteUint32(cid)
|
bf.WriteUint32(cid)
|
||||||
|
|||||||
@@ -202,7 +202,11 @@ func handleMsgMhfEnumerateRengokuRanking(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
guild, _ := s.server.guildRepo.GetByCharID(s.charID)
|
guild, _ := s.server.guildRepo.GetByCharID(s.charID)
|
||||||
var isApplicant bool
|
var isApplicant bool
|
||||||
if guild != nil {
|
if guild != nil {
|
||||||
isApplicant, _ = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
var appErr error
|
||||||
|
isApplicant, appErr = s.server.guildRepo.HasApplication(guild.ID, s.charID)
|
||||||
|
if appErr != nil {
|
||||||
|
s.logger.Warn("Failed to check guild application status", zap.Error(appErr))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if isApplicant {
|
if isApplicant {
|
||||||
guild = nil
|
guild = nil
|
||||||
|
|||||||
Reference in New Issue
Block a user