public async Task<AdminCommand> CreateAsync(TextReader reader, CancellationToken cancellationToken) { var json = await reader.ReadJsonAsync(cancellationToken); if (string.IsNullOrWhiteSpace(json)) { return null; } var adminCommandDto = json.FromJson<AdminCommandDto>(); switch (adminCommandDto.Type) { case AdminCommandType.StartGame: var startGameAdminCommandDto = json.FromJson<StartGameAdminCommandDto>(); return new StartGameAdminCommand(startGameAdminCommandDto.Size, _physics, _stateTracker, _playerRepository); case AdminCommandType.StopGame: return new StopGameAdminCommand(); case AdminCommandType.GetSnapshot: return new GetSnapshotAdminCommand(); case AdminCommandType.StartPushingState: return new StartPushingStateAdminCommand(); case AdminCommandType.UpdateSettings: var updateSettingsAdminCommandDto = json.FromJson<UpdateSettingsAdminCommandDto>(); var settings = Mapper.Map<WorldSettings>(updateSettingsAdminCommandDto.Settings); return new UpdateSettingsAdminCommand(settings); default: throw new ArgumentOutOfRangeException(); } }
public async Task<PlayerCommand> CreateAsync(TextReader reader, CancellationToken cancellationToken) { var json = await reader.ReadJsonAsync(cancellationToken); if (string.IsNullOrWhiteSpace(json)) { return null; } var playerCommandDto = json.FromJson<PlayerCommandDto>(); switch (playerCommandDto.Type) { case PlayerCommandType.Move: var movePlayerCommandDto = json.FromJson<MovePlayerCommandDto>(); return new MovePlayerCommand((float)movePlayerCommandDto.Dx, (float)movePlayerCommandDto.Dy); case PlayerCommandType.Join: return new JoinPlayerCommand(); case PlayerCommandType.GetView: return new GetViewPlayerCommand(_physics); case PlayerCommandType.Split: return new SplitPlayerCommand(); case PlayerCommandType.EjectMass: return new EjectMassPlayerCommand(); default: throw new ArgumentOutOfRangeException(); } }