using Microsoft.Extensions.DependencyInjection; using RPG.Network.Proto; using RPG.Services.Core.Network; using RPG.Services.Core.Session; using RPG.Services.Gameserver.Modules; namespace RPG.Services.Gameserver.Session; internal class PlayerSession : RPGSession { private readonly IServiceScope _scope; private readonly ModuleManager _moduleManager; public PlayerSession(ulong sessionId, ServiceBox serviceBox, IServiceScopeFactory scopeFactory) : base(sessionId, serviceBox) { _scope = scopeFactory.CreateScope(); _moduleManager = _scope.ServiceProvider.GetRequiredService(); } public async Task HandleGmTalkCommand(string cmd) => await _moduleManager.HandleGmCommandAsync(this, cmd.Split(' ')); public async Task HandleGameCommand(ushort cmdType, ReadOnlyMemory body) => await _moduleManager.HandleAsync(this, (CmdType)cmdType, body); public override void Dispose() => _scope.Dispose(); }