using Yuanshen.Gameserver.Controllers.Attributes; using Yuanshen.Gameserver.Controllers.Result; using Yuanshen.Gameserver.Game; using Yuanshen.Protocol; using Microsoft.Extensions.Logging; namespace Yuanshen.Gameserver.Controllers; [NetController] internal sealed class GmTalkController : ControllerBase { private static readonly char[] Separators = { ';', '\n', '\r' }; [NetCommand(CmdType.GmTalkReq)] public async ValueTask OnGmTalkReq(GmCommandService gm, ILogger logger) { GmTalkReq req = Packet!.DecodeBody(); string message = req.Msg ?? string.Empty; logger.LogInformation("GmTalk: {message}", message); List reply = new(); foreach (string part in message.Split(Separators, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)) reply.AddRange(await gm.ExecuteAsync(part)); return Response(CmdType.GmTalkRsp, new GmTalkRsp { Retcode = Retcode.RET_SUCC, Msg = message, Retmsg = string.Join('\n', reply) }); } }