private Task ProcessCommand([NotNull] NavigatorCommand command) { if (command == null) { throw new ArgumentNullException(nameof(command)); } switch (command) { case NavigatorCommand.Pop _: return(BackInternal()); case NavigatorCommand.PopTo backTo: return(BackToInternal(backTo)); case NavigatorCommand.Push forward: return(ForwardScreenInternal(forward)); case NavigatorCommand.Replace replace: return(ReplaceScreenInternal(replace)); } Debug.LogWarning($"Unexpected navigator command: {command.GetType().Name}"); return(Task.CompletedTask); }
static void Main(string[] args) { System.Console.WriteLine("Assumindo uma posição original (x,y), a aplicação irá receber vetores de coordenadas na seguinte forma:"); System.Console.WriteLine("[Direção, Intensidade], sendo que Direção pode ser N,S,L,O (Norte, Sul, Leste e Oeste) e intensidade é um inteiro."); Coordinate coordinate = new Coordinate(1, 1); CoordinateNavigator navigator = new CoordinateNavigator(coordinate); CoordinateNavigatorCommandParser parser = new CoordinateNavigatorCommandParser(); while (true) { System.Console.WriteLine($"A coordenada atual é {navigator.Coordinate.ToString()}, digite o comando [Direção, Intensidade] na linha abaixo: "); string command = System.Console.ReadLine(); try { NavigatorCommand navigatorCommand = parser.Parse(command); navigator.Navigate(navigatorCommand); } catch (Exception ex) { System.Console.WriteLine(ex.Message); } } }
private ICommand EnsureCommand(ECommandId idCommand) { NavigatorCommand command = null; lock (mSyncRoot) { command = mCachedCommands[(int)idCommand]; if (command == null) { switch (idCommand) { case ECommandId.NullRecord: break; case ECommandId.NextRecord: command = new NextItemCommand(mViewDataManipulator); break; case ECommandId.PreviousRecord: command = new PrevItemCommand(mViewDataManipulator); break; case ECommandId.FirstRecord: command = new FirstItemCommand(mViewDataManipulator); break; case ECommandId.LastRecord: command = new LastItemCommand(mViewDataManipulator); break; case ECommandId.GoToRecord: break; case ECommandId.AddRecord: command = new AddItemCommand(mViewDataManipulator); break; case ECommandId.Save: command = new SaveItemCommand(mViewDataManipulator); break; case ECommandId.DeleteRecord: command = new DeleteItemCommand(mViewDataManipulator); break; default: throw new ArgumentOutOfRangeException(nameof(idCommand), idCommand, null); } if (command != null) { mCachedCommands[(int)idCommand] = command; } } } return(command); }