Files
MikuSB/GameServer/Server/Packet/Recv/Player/HandlerReqRename.cs
2026-04-28 16:12:27 +09:00

66 lines
1.7 KiB
C#

using Google.Protobuf;
using MikuSB.Database;
using MikuSB.Proto;
namespace MikuSB.GameServer.Server.Packet.Recv.Login;
[Opcode(CmdIds.ReqRename)]
public class HandlerReqRename : Handler
{
public override async Task OnHandle(Connection connection, byte[] data, ushort seqNo)
{
var player = connection.Player;
if (player != null)
{
var requestedName = ParseDisplayName(data);
player.SetDisplayName(requestedName);
DatabaseHelper.UpdateInstance(player.Data);
await player.OnHeartBeat();
}
await connection.SendPacket(CmdIds.RspRename);
}
private static string? ParseDisplayName(byte[] data)
{
if (data.Length == 0)
return null;
try
{
var input = new CodedInputStream(data);
while (!input.IsAtEnd)
{
var tag = input.ReadTag();
if (tag == 0)
break;
if (WireFormat.GetTagWireType(tag) == WireFormat.WireType.LengthDelimited)
{
var value = input.ReadString();
if (!string.IsNullOrWhiteSpace(value))
return value;
}
else
{
input.SkipLastField();
}
}
}
catch
{
// Fall back to raw UTF-8 payload handling below.
}
try
{
var rawText = System.Text.Encoding.UTF8.GetString(data).Trim('\0', ' ', '\r', '\n', '\t');
return string.IsNullOrWhiteSpace(rawText) ? null : rawText;
}
catch
{
return null;
}
}
}