mirror of
https://github.com/WiiLink24/wfc-server.git
synced 2026-05-09 04:23:26 -05:00
77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package gpcm
|
|
|
|
import (
|
|
"strconv"
|
|
"wwfc/common"
|
|
"wwfc/logging"
|
|
"wwfc/qr2"
|
|
|
|
"github.com/logrusorgru/aurora/v3"
|
|
)
|
|
|
|
func (g *GameSpySession) handleWWFCReport(command common.GameSpyCommand) {
|
|
for key, value := range command.OtherValues {
|
|
logging.Info(g.ModuleName, "WiiLink Report:", aurora.Yellow(key))
|
|
|
|
keyColored := aurora.BrightCyan(key).String()
|
|
|
|
switch key {
|
|
default:
|
|
logging.Error(g.ModuleName, "Unknown record", aurora.Cyan(key).String()+":", aurora.Cyan(value))
|
|
|
|
case "wl:bad_packet":
|
|
profileId, err := strconv.ParseUint(value, 10, 32)
|
|
if err != nil {
|
|
logging.Error(g.ModuleName, "Error decoding", keyColored+":", err.Error())
|
|
continue
|
|
}
|
|
|
|
logging.Warn(g.ModuleName, "Report bad packet from", aurora.BrightCyan(strconv.FormatUint(profileId, 10)))
|
|
logging.Event("reported_bad_packet", map[string]any{
|
|
"profile_id": g.User.ProfileId,
|
|
"sender_id": profileId,
|
|
})
|
|
|
|
case "wl:stall":
|
|
profileId, err := strconv.ParseUint(value, 10, 32)
|
|
if err != nil {
|
|
logging.Error(g.ModuleName, "Error decoding", keyColored+":", err.Error())
|
|
continue
|
|
}
|
|
|
|
logging.Warn(g.ModuleName, "Room stall caused by", aurora.BrightCyan(strconv.FormatUint(profileId, 10)))
|
|
logging.Event("reported_stall", map[string]any{
|
|
"profile_id": g.User.ProfileId,
|
|
"stalling_id": profileId,
|
|
})
|
|
|
|
case "wl:mkw_user":
|
|
if g.GameName != "mariokartwii" {
|
|
logging.Warn(g.ModuleName, "Ignoring", keyColored+":", "from wrong game")
|
|
continue
|
|
}
|
|
|
|
packet, err := common.Base64DwcEncoding.DecodeString(value)
|
|
if err != nil {
|
|
logging.Error(g.ModuleName, "Error decoding", keyColored+":", err.Error())
|
|
continue
|
|
}
|
|
|
|
if len(packet) != 0xC0 {
|
|
logging.Error(g.ModuleName, "Invalid", keyColored, "record length:", len(packet))
|
|
continue
|
|
}
|
|
|
|
qr2.ProcessUSER(g.User.ProfileId, g.QR2IP, packet)
|
|
|
|
case "wl:mkw_select_course", "wl:mkw_select_cc":
|
|
if g.GameName != "mariokartwii" {
|
|
logging.Warn(g.ModuleName, "Ignoring", keyColored, "from wrong game")
|
|
continue
|
|
}
|
|
|
|
qr2.ProcessMKWSelectRecord(g.User.ProfileId, key, value)
|
|
}
|
|
}
|
|
}
|