public override bool Process(ProcessCommandLineArgs args)
        {
            var command  = args.Command;
            var platform = command.GetValue("platform", "p");

#if DEBUG
            //platform = "win";
#endif
            try
            {
                EngineInternal.Initialize(platform);
            }
            catch (Exception ex)
            {
                args.Writer.WriteLine("Error initializing platform: {0}", ex);
#if DEBUG
                throw;
#endif
            }

            mainthread = Platform.Instance.ThreadStart();

            args.Writer.WriteLine("Using {0} platform", Platform.Instance.ID);
            return(false);
        }
        public void Execute(List <string> extraWords, IAccountGrain executingAccount)
        {
            AttachedClient executingClient = AttachedClients.GetAccountFocusedClient(executingAccount);

            if (executingAccount == null || executingClient == null || !executingAccount.CanCreateNewPlayer().Result)
            {
                var errorMsgDto = new DescriptiveTextDto("The create new player command is currently unavailable.");
                executingClient?.SendDtoMessage(errorMsgDto);
                return;
            }

            if (extraWords.Count != 1)
            {
                var errorMsgDto = new DescriptiveTextDto("Wrong number of parameters.");
                executingClient?.SendDtoMessage(errorMsgDto);
                return;
            }

            if (GrainClusterClient.Universe.IsPlayerCharacterNameInUse(extraWords[0]).Result)
            {
                var errorMsgDto = new DescriptiveTextDto("This character name is already taken.");
                executingClient?.SendDtoMessage(errorMsgDto);
                return;
            }

            var newPlayerCharacter = EngineInternal.NewPlayerCreator();

            newPlayerCharacter.Name = extraWords[0];

            // Mark all player characters as needing focus to stay in the world
            newPlayerCharacter.NeedsFocus = true;
            executingAccount.AddCharacter(newPlayerCharacter.TrackingId).Wait();

            var successMsgDto = new DescriptiveTextDto("New player created.");

            executingClient?.SendDtoMessage(successMsgDto);
        }