コード例 #1
0
        public override void DoubleLockDoor(string Token)
        {
            string operationName = "DoubleLock";
            Func <DoorCapabilities, bool> capabilitiesCheck       = new Func <DoorCapabilities, bool>(DC => DC.DoubleLock);
            Func <DoorModeType, bool>     operationForbiddenCheck =
                DM => (DM == DoorModeType.LockedDown || DM == DoorModeType.LockedOpen);
            DoorModeType target     = DoorModeType.DoubleLocked;
            string       forbidType = "denied";

            DoorOperation(Token, operationName, capabilitiesCheck, operationForbiddenCheck, forbidType, target);
        }
コード例 #2
0
        void DoorOperation(string Token,
                           string operationName,
                           Func <DoorCapabilities, bool> capabilitiesCheck,
                           Func <DoorModeType, bool> operationAllowedCheck,
                           string notAllowedSeverity,
                           DoorModeType targetState)
        {
            Func <DoorModeType, DoorModeType> transition = new Func <DoorModeType, DoorModeType>(DM => targetState);

            DoorOperation(Token, operationName, capabilitiesCheck, operationAllowedCheck, notAllowedSeverity, transition);
        }
コード例 #3
0
        public override void LockOpenReleaseDoor(string Token)
        {
            string operationName = "LockedOpen";
            Func <DoorCapabilities, bool> capabilitiesCheck       = new Func <DoorCapabilities, bool>(DC => DC.LockOpen);
            Func <DoorModeType, bool>     operationForbiddenCheck =
                DM => (DM != DoorModeType.LockedOpen);
            DoorModeType target         = DoorModeType.Unlocked;
            string       forbidSeverity = "not applicable";

            DoorOperation(Token, operationName, capabilitiesCheck, operationForbiddenCheck, forbidSeverity, target);
        }
コード例 #4
0
        /***************************************************************************************/

        #region Utils

        void DoorOperation(string Token,
                           string operationName,
                           Func <DoorCapabilities, bool> capabilitiesCheck,
                           Func <DoorModeType, bool> operationForbiddenCheck,
                           string notAllowedSeverity,
                           Func <DoorModeType, DoorModeType> transition)
        {
            LoggingService.LogMessage(string.Format("{0} operation requested for {1}", operationName, Token), ExternalLogging.MessageType.Details);

            ConfStorageLoad();
            EventServerLoad();

            if (ConfStorage.DoorStateList.ContainsKey(Token))
            {
                if (capabilitiesCheck(ConfStorage.DoorCapabilitiesList[Token]))
                {
                    DoorState doorState = ConfStorage.DoorStateList[Token];
                    if (operationForbiddenCheck(doorState.DoorMode))
                    {
                        string message = String.Format("Door {0} is {1}. Operation {2}", Token,
                                                       doorState.DoorMode.ToString(), notAllowedSeverity);

                        LoggingService.LogMessage(message, ExternalLogging.MessageType.Error);
                        throw FaultLib.GetSoapException(FaultType.General,
                                                        message);
                    }
                    else
                    {
                        DoorModeType targetState = transition(doorState.DoorMode);
                        doorState.DoorMode = targetState;
                        StateReporter.ReportStateUpdate(Token, doorState);
                        EventServer.DoorModeEvent(this, "Changed", Token, doorState.DoorMode);
                    }
                }
                else
                {
                    string message = string.Format("{0} is not suported for {1}.", operationName, Token);
                    LoggingService.LogMessage(message, ExternalLogging.MessageType.Error);

                    throw FaultLib.GetSoapException(FaultType.General, message);
                }
            }
            else
            {
                string message = string.Format("Token {0} does not exist", Token);
                LoggingService.LogMessage(message, ExternalLogging.MessageType.Error);
                throw FaultLib.GetSoapException(FaultType.General, message);
            }

            EventServerSave();
            ConfStorageSave();
        }
コード例 #5
0
        public void LockOpenDoor(string Token)
        {
            BeginMethod("LockOpenDoor");

            string operationName = "LockOpen";
            Func <DoorCapabilities, bool> capabilitiesCheck       = new Func <DoorCapabilities, bool>(DC => DC.LockOpen);
            Func <DoorModeType, bool>     operationForbiddenCheck =
                DM => (DM == DoorModeType.LockedDown);
            DoorModeType target         = DoorModeType.LockedOpen;
            string       forbidSeverity = "denied";

            DoorOperation(Token, operationName, capabilitiesCheck, operationForbiddenCheck, forbidSeverity, target);
            EndMethod();
        }
コード例 #6
0
        void DoorOperation(string Token,
                           string operationName,
                           Func <DoorCapabilities, bool> capabilitiesCheck,
                           Func <DoorModeType, bool> operationForbiddenCheck,
                           string notAllowedSeverity,
                           Func <DoorModeType, DoorModeType> transition)
        {
            Log(string.Format("{0} operation requested for {1}", operationName, Token));

            if (SimulatorConfiguration.PacsConfiguration.DoorStateList.ContainsKey(Token))
            {
                if (capabilitiesCheck(SimulatorConfiguration.PacsConfiguration.DoorCapabilitiesList[Token]))
                {
                    DoorState doorState = SimulatorConfiguration.PacsConfiguration.DoorStateList[Token];
                    if (operationForbiddenCheck(doorState.DoorMode))
                    {
                        string message = String.Format("Door {0} is {1}. Operation {2}", Token,
                                                       doorState.DoorMode.ToString(), notAllowedSeverity);

                        Log(message);
                        Transport.CommonUtils.ReturnFault("Receiver", "ActionNotAllowed");
                    }
                    else
                    {
                        DoorModeType targetState = transition(doorState.DoorMode);
                        doorState.DoorMode = targetState;
                        //DoorSensorService.ProcessModeChanging(Token, targetState, ConfStorage, EventServer, StateReporter);
                        //EventServer.DoorModeEvent(this, "Changed", Token, doorState.DoorMode);
                    }
                }
                else
                {
                    string message = string.Format("{0} is not supported for {1}.", operationName, Token);
                    Log(message);

                    Transport.CommonUtils.ReturnFault("Receiver", "ActionNotSupported");
                }
            }
            else
            {
                string message = string.Format("Token {0} does not exist", Token);
                Log(message);
                Transport.CommonUtils.ReturnFault("Sender", "InvalidArg", "TokenNotFound");
            }
        }
コード例 #7
0
        public override void UnlockDoor(string Token)
        {
            string operationName = "Unlock";
            Func <DoorCapabilities, bool> capabilitiesCheck       = new Func <DoorCapabilities, bool>(DC => DC.Unlock);
            Func <DoorModeType, bool>     operationForbiddenCheck =
                DM => (DM == DoorModeType.LockedDown || DM == DoorModeType.LockedOpen);
            DoorModeType target         = DoorModeType.Locked;
            string       forbidSeverity = "denied";

            Func <DoorModeType, DoorModeType> transition =
                new Func <DoorModeType, DoorModeType>(
                    (initial) =>
            {
                return(initial == DoorModeType.DoubleLocked ? DoorModeType.Locked : DoorModeType.Unlocked);
            }
                    );

            DoorOperation(Token, operationName, capabilitiesCheck, operationForbiddenCheck, forbidSeverity, transition);
        }
コード例 #8
0
        public AccessDoorResponse AccessDoor(TestTool.Onvif.AccessDoorRequest request)
        {
            BeginMethod("AccessDoor");

            string token = request.Token;

            Log(string.Format("AccessDoor operation requested for {0}", token));

            if (SimulatorConfiguration.PacsConfiguration.DoorStateList.ContainsKey(token))
            {
                if (SimulatorConfiguration.PacsConfiguration.DoorCapabilitiesList[token].MomentaryAccess)
                {
                    DoorModeType doorMode = SimulatorConfiguration.PacsConfiguration.DoorStateList[token].DoorMode;
                    if ((doorMode == DoorModeType.Blocked) || (doorMode == DoorModeType.LockedDown) || (doorMode == DoorModeType.LockedOpen))
                    {
                        string message = "Door " + token + " is " + SimulatorConfiguration.PacsConfiguration.DoorStateList[token].DoorMode.ToString() +
                                         ". Operation denied.";

                        Log(message);
                        Transport.CommonUtils.ReturnFault("Receiver", "OperationDenied");
                    }
                    else
                    {
                        try
                        {
                            TimeSpan timeSpan = TimeSpan.Zero;
                            if (!string.IsNullOrEmpty(request.AccessTime))
                            {
                                timeSpan = System.Xml.XmlConvert.ToTimeSpan(request.AccessTime);
                            }

                            if (SimulatorConfiguration.PacsConfiguration.DoorStateList[token].DoorMode != DoorModeType.Accessed)
                            {
                                SimulatorConfiguration.PacsConfiguration.DoorAccessPreviousStateList[token] = SimulatorConfiguration.PacsConfiguration.DoorStateList[token].DoorMode;
                            }

                            SimulatorConfiguration.PacsConfiguration.DoorStateList[token].DoorMode = DoorModeType.Accessed;
                            //DoorSensorService.ProcessModeChanging(Token, DoorModeType.Accessed, ConfStorage, EventServer, StateReporter);

                            //EventServer.DoorModeEvent(this, "Changed", Token, SimulatorConfiguration.PacsConfiguration.DoorStateList[Token].DoorMode);

                            AccessToDoor func = new AccessToDoor(AccessToDoorImplementation);
                            SimulatorConfiguration.PacsConfiguration.DoorAccessList[token]++;

                            func.BeginInvoke(token, timeSpan, SimulatorConfiguration.PacsConfiguration.DoorAccessList[token], null, null);
                        }
                        catch (Exception)
                        {
                            Log(string.Format("Wrong duration ({0})", request.AccessTime));
                            Transport.CommonUtils.ReturnFault("Receiver", "InvalidArg");
                        }
                    }
                }
                else
                {
                    string message = string.Format("MomentaryAccess isn't supported for {0}.", token);
                    Log(message);

                    Transport.CommonUtils.ReturnFault("Receiver", "ActionNotSupported");
                }
            }
            else
            {
                string message = string.Format("Token {0} does not exist", token);
                Log(message);
                Transport.CommonUtils.ReturnFault("Receiver", "InvalidArg", "TokenNotFound");
            }
            EndMethod();
            return(new AccessDoorResponse());
        }