示例#1
0
    void Behave()
    {
        //Sequence for going in an open door
        DebugTask         openDebug     = new DebugTask("Going through open door sequence");
        ConditionalIsTrue doorOpenCheck = new ConditionalIsTrue(door.isOpen);
        ArriveToTarget    goInRoom      = new ArriveToTarget(arrive, roomNavTarget);

        Task[] openDoorSystem = new Task[3];
        openDoorSystem[0] = openDebug;
        openDoorSystem[1] = doorOpenCheck;
        openDoorSystem[2] = goInRoom;
        Sequence doorOpenSequence = new Sequence(openDoorSystem);

        //Sequence for going in closed door
        DebugTask         closedDebug    = new DebugTask("Going through closed door sequence");
        ArriveToTarget    goToDoor       = new ArriveToTarget(arrive, doorNavTarget);
        ConditionalIsTrue tryOpeningDoor = new ConditionalIsTrue(door.TryOpening());
        OpenDoor          openTheDoorUp  = new OpenDoor(door);
        //As is, these arrives don't have timing so it will seem like just going into the room
        ArriveToTarget advanceIntoRoom = new ArriveToTarget(arrive, roomNavTarget);

        Task[] closedDoorSystem = new Task[5];
        closedDoorSystem[0] = closedDebug;
        closedDoorSystem[1] = goToDoor;
        closedDoorSystem[2] = tryOpeningDoor;
        closedDoorSystem[3] = openTheDoorUp;
        closedDoorSystem[4] = advanceIntoRoom;
        Sequence closedDoorSequence = new Sequence(closedDoorSystem);

        //Sequence for going in locked door
        //Can just reuse goToDoor!
        DebugTask          lockedDebug         = new DebugTask("Going through locked door sequence");
        ConditionalIsFalse tryOpeningDoorFalse = new ConditionalIsFalse(door.TryOpening());
        BustDoor           burstIn             = new BustDoor(door);

        //Can reuse advanceIntoRoom as well!
        Task[] lockedDoorSystem = new Task[5];
        lockedDoorSystem[0] = lockedDebug;
        lockedDoorSystem[1] = goToDoor;
        lockedDoorSystem[2] = tryOpeningDoorFalse;
        lockedDoorSystem[3] = burstIn;
        lockedDoorSystem[4] = advanceIntoRoom;
        Sequence lockedDoorSequence = new Sequence(lockedDoorSystem);

        //Make a selector to try to go in closed door before locked
        Task[] closedDoorOptions = new Task[2];
        closedDoorOptions[0] = closedDoorSequence;
        closedDoorOptions[1] = lockedDoorSequence;
        Selector closedProtocols = new Selector(closedDoorOptions);

        //Make a selector to try to go in the open door before closed ones
        Task[] overallDoorProtocols = new Task[2];
        overallDoorProtocols[0] = doorOpenSequence;
        overallDoorProtocols[1] = closedProtocols;
        Selector overallDoorOptions = new Selector(overallDoorProtocols);

        overallDoorOptions.run();
    }
        public override bool Execute()
        {
            var debug      = string.Equals("true", DebugTask?.Trim(), StringComparison.OrdinalIgnoreCase);
            var promptAuth = string.Equals("true", AlwaysPromptInteractiveAuth?.Trim(), StringComparison.OrdinalIgnoreCase);

            Config.Log.Information = x => Log.LogWarning(x);
            Config.Log.Error       = (ex, m) => Log.LogError("Error while processing secrets from keyvault. " + Environment.NewLine + ex);

            try
            {
                if (debug && !Debugger.IsAttached)
                {
                    Debugger.Launch();
                    Debugger.Break();
                }

                if (promptAuth)
                {
                    Log.LogWarning("KeyVaultBuildTask: Set to always prompting for auth information.");
                }

                var service = SecretServiceBuilder.Create()
                              .AlwaysPromptInteractiveAuth(promptAuth)
                              .WithDirectory(DirectoryId)
                              .WithServicePrincipal(ClientId, Secret);

                if (!string.IsNullOrEmpty(VaultAliases))
                {
                    foreach (var alias in VaultAliases?.Trim().Split(new [] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        var pair = alias.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                        service.WithVaultAlias(pair.First(), pair.Last());
                        Log.LogWarning("Overriding vault '{0}' with '{1}'", pair.First(), pair.Last());
                    }
                }

                var transformKey = new TransformKeys(service.Build());
                var files        = ConfigFiles.Select(file => file.GetMetadata("Fullpath")).ToArray();

                Parallel.ForEach(files, file =>
                {
                    transformKey.SaveAsFile(file);
                });
            }
            catch (Exception ex)
            {
                TokenCache.DefaultShared.Clear();
                Config.Log.Error(ex, "Error occured processing secrets. ");
                if (debug)
                {
                    Debugger.Break();
                }
                return(false);
            }

            return(true);
        }
示例#3
0
        public override bool Execute()
        {
            if (DebugMode)
            {
                TaskLogger.LogInfo(MessageImportance.Low, "DebugMode Detected");
                if (_debugTask == null)
                {
                    _debugTask = new DebugTask();
                }

                _debugTask.ExecWithInfo(this.NetSdkTaskName);
            }

            return(TaskLogger.TaskSucceededWithNoErrorsLogged);
        }
示例#4
0
    private IUnityTask OnPing(Ping ping, IPEndPoint senderAddress)
    {
        if (_isConnected || _pendingConnection != null)
        {
            return(EmptyTask);
        }

        _pendingConnection = senderAddress;

        var connectionMessage = new ConnectionRequest(_synchronizationData.myName);
        var sendMessage       = new Common.SendMessageTask(_connection, connectionMessage, senderAddress);
        var debug             = new DebugTask($"Started waiting for connection", _logger);

        return(new BatchTask(debug, sendMessage));
    }
示例#5
0
    private IUnityTask OnConnectionResponse(ConnectionResponse response, IPEndPoint senderAddress)
    {
        if (_isConnected || (_pendingConnection != null && !senderAddress.Equals(_pendingConnection)))
        {
            return(EmptyTask);
        }

        _isConnected       = true;
        _connectedTo       = senderAddress;
        _pendingConnection = null;
        _connectionTimer   = 0f;
        _notificationTask.SetAddress(_connectedTo);
        var debug = new DebugTask($"Connected to {_connectedTo}", _logger);

        var connectedEvent = new FireEventTask(connected);

        if (response.Opponent != null)
        {
            var updateOpponent = new UpdateOpponentData(_synchronizationData, response.Opponent);
            return(new BatchTask(debug, connectedEvent, updateOpponent));
        }

        return(new BatchTask(debug, connectedEvent));
    }