diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 9fed99c89..3dd1fa76c 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -588,10 +588,11 @@ func handleMsgMhfEnumerateUnionItem(s *Session, p mhfpacket.MHFPacket) { bf := byteframe.NewByteFrame() err := s.server.db.QueryRow("SELECT item_box FROM users, characters WHERE characters.id = $1 AND users.id = characters.user_id", int(s.charID)).Scan(&boxContents) if err != nil { - s.logger.Fatal("Failed to get shared item box contents from db", zap.Error(err)) + s.logger.Error("Failed to get shared item box contents from db", zap.Error(err)) + bf.WriteBytes(make([]byte, 4)) } else { if len(boxContents) == 0 { - bf.WriteUint32(0x00) + bf.WriteBytes(make([]byte, 4)) } else { amount := len(boxContents) / 4 bf.WriteUint16(uint16(amount)) @@ -616,7 +617,9 @@ func handleMsgMhfUpdateUnionItem(s *Session, p mhfpacket.MHFPacket) { err := s.server.db.QueryRow("SELECT item_box FROM users, characters WHERE characters.id = $1 AND users.id = characters.user_id", int(s.charID)).Scan(&boxContents) if err != nil { - s.logger.Fatal("Failed to get shared item box contents from db", zap.Error(err)) + s.logger.Error("Failed to get shared item box contents from db", zap.Error(err)) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) + return } else { amount := len(boxContents) / 4 oldItems = make([]Item, amount) @@ -664,9 +667,9 @@ func handleMsgMhfUpdateUnionItem(s *Session, p mhfpacket.MHFPacket) { // Upload new item cache _, err = s.server.db.Exec("UPDATE users SET item_box = $1 FROM characters WHERE users.id = characters.user_id AND characters.id = $2", bf.Data(), int(s.charID)) if err != nil { - s.logger.Fatal("Failed to update shared item box contents in db", zap.Error(err)) + s.logger.Error("Failed to update shared item box contents in db", zap.Error(err)) } - doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } func handleMsgMhfGetCogInfo(s *Session, p mhfpacket.MHFPacket) {} diff --git a/server/channelserver/handlers_data.go b/server/channelserver/handlers_data.go index dfd9a56ff..62b2282d9 100644 --- a/server/channelserver/handlers_data.go +++ b/server/channelserver/handlers_data.go @@ -29,7 +29,9 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { // diffs themselves are also potentially compressed diff, err := nullcomp.Decompress(pkt.RawDataPayload) if err != nil { - s.logger.Fatal("Failed to decompress diff", zap.Error(err)) + s.logger.Error("Failed to decompress diff", zap.Error(err)) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) + return } // Perform diff. s.logger.Info("Diffing...") @@ -39,7 +41,9 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { // Regular blob update. saveData, err := nullcomp.Decompress(pkt.RawDataPayload) if err != nil { - s.logger.Fatal("Failed to decompress savedata from packet", zap.Error(err)) + s.logger.Error("Failed to decompress savedata from packet", zap.Error(err)) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) + return } s.logger.Info("Updating save with blob") characterSaveData.decompSave = saveData @@ -64,9 +68,9 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { } _, err = s.server.db.Exec("UPDATE characters SET name=$1 WHERE id=$2", characterSaveData.Name, s.charID) if err != nil { - s.logger.Fatal("Failed to update character name in db", zap.Error(err)) + s.logger.Error("Failed to update character name in db", zap.Error(err)) } - doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } func grpToGR(n uint32) uint16 { @@ -288,7 +292,7 @@ func handleMsgMhfSaveScenarioData(s *Session, p mhfpacket.MHFPacket) { 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.Fatal("Failed to update scenario data in db", zap.Error(err)) + s.logger.Error("Failed to update scenario data in db", zap.Error(err)) } // Do this ack manually because it uses a non-(0|1) error code s.QueueSendMHF(&mhfpacket.MsgSysAck{ diff --git a/server/channelserver/handlers_rengoku.go b/server/channelserver/handlers_rengoku.go index c1e8d2dbd..732cb77ef 100644 --- a/server/channelserver/handlers_rengoku.go +++ b/server/channelserver/handlers_rengoku.go @@ -19,7 +19,9 @@ func handleMsgMhfSaveRengokuData(s *Session, p mhfpacket.MHFPacket) { dumpSaveData(s, pkt.RawDataPayload, "rengoku") _, err := s.server.db.Exec("UPDATE characters SET rengokudata=$1 WHERE id=$2", pkt.RawDataPayload, s.charID) if err != nil { - s.logger.Fatal("Failed to update rengokudata savedata in db", zap.Error(err)) + s.logger.Error("Failed to save rengokudata", zap.Error(err)) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) + return } bf := byteframe.NewByteFrameFromBytes(pkt.RawDataPayload) bf.Seek(71, 0) @@ -34,7 +36,7 @@ func handleMsgMhfSaveRengokuData(s *Session, p mhfpacket.MHFPacket) { s.server.db.Exec("INSERT INTO rengoku_score (character_id) VALUES ($1)", s.charID) } s.server.db.Exec("UPDATE rengoku_score SET max_stages_mp=$1, max_points_mp=$2, max_stages_sp=$3, max_points_sp=$4 WHERE character_id=$5", maxStageMp, maxScoreMp, maxStageSp, maxScoreSp, s.charID) - doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } func handleMsgMhfLoadRengokuData(s *Session, p mhfpacket.MHFPacket) { @@ -42,7 +44,7 @@ func handleMsgMhfLoadRengokuData(s *Session, p mhfpacket.MHFPacket) { var data []byte err := s.server.db.QueryRow("SELECT rengokudata FROM characters WHERE id = $1", s.charID).Scan(&data) if err != nil { - s.logger.Fatal("Failed to get rengokudata savedata from db", zap.Error(err)) + s.logger.Error("Failed to load rengokudata", zap.Error(err)) } if len(data) > 0 { doAckBufSucceed(s, pkt.AckHandle, data)