Make char savedata persistent

This commit is contained in:
Andrew Gutekanst
2020-02-03 14:07:33 -05:00
parent 0893f75c3f
commit 773429ce15
4 changed files with 36 additions and 6 deletions

View File

@@ -0,0 +1,6 @@
BEGIN;
ALTER TABLE characters
DROP COLUMN savedata;
END;

View File

@@ -0,0 +1,6 @@
BEGIN;
ALTER TABLE characters
ADD COLUMN savedata bytea;
END;

View File

@@ -6,7 +6,9 @@ import (
) )
// MsgMhfLoaddata represents the MSG_MHF_LOADDATA // MsgMhfLoaddata represents the MSG_MHF_LOADDATA
type MsgMhfLoaddata struct{} type MsgMhfLoaddata struct {
AckHandle uint32
}
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
func (m *MsgMhfLoaddata) Opcode() network.PacketID { func (m *MsgMhfLoaddata) Opcode() network.PacketID {
@@ -15,10 +17,11 @@ func (m *MsgMhfLoaddata) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfLoaddata) Parse(bf *byteframe.ByteFrame) error { func (m *MsgMhfLoaddata) Parse(bf *byteframe.ByteFrame) error {
panic("Not implemented") m.AckHandle = bf.ReadUint32()
return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.
func (m *MsgMhfLoaddata) Build(bf *byteframe.ByteFrame) error { func (m *MsgMhfLoaddata) Build(bf *byteframe.ByteFrame) error {
panic("Not implemented") panic("Not implemented")
} }

View File

@@ -5,7 +5,6 @@ import (
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"log"
"strings" "strings"
"time" "time"
@@ -633,12 +632,28 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSavedata) pkt := p.(*mhfpacket.MsgMhfSavedata)
err := ioutil.WriteFile(fmt.Sprintf("savedata\\%d.bin", time.Now().Unix()), pkt.RawDataPayload, 0644) err := ioutil.WriteFile(fmt.Sprintf("savedata\\%d.bin", time.Now().Unix()), pkt.RawDataPayload, 0644)
if err != nil { if err != nil {
log.Fatal(err) s.logger.Fatal("Error dumping savedata", zap.Error(err))
} }
_, err = s.server.db.Exec("UPDATE characters SET is_new_character=false, savedata=$1 WHERE id=$2", pkt.RawDataPayload, s.charID)
if err != nil {
s.logger.Fatal("Failed to update savedata in db", zap.Error(err))
}
s.QueueAck(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) s.QueueAck(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfLoaddata)
var data []byte
err := s.server.db.QueryRow("SELECT savedata FROM characters WHERE id = $1", s.charID).Scan(&data)
if err != nil {
s.logger.Fatal("Failed to get savedata from db", zap.Error(err))
}
doSizedAckResp(s, pkt.AckHandle, data)
}
func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) {}