mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 19:33:59 +00:00
66 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|