Unlock() публичный Метод

Releases the lock.
public Unlock ( ISystemContext context ) : void
context ISystemContext
Результат void
Пример #1
0
        /// <summary>
        /// Called when a session is closed.
        /// </summary>
        public override void SessionClosing(OperationContext context, NodeId sessionId, bool deleteSubscriptions)
        {
            lock (Lock)
            {
                List <NodeId> locks = null;

                if (!m_sessionLocks.TryGetValue(sessionId, out locks))
                {
                    return;
                }

                m_sessionLocks.Remove(sessionId);

                for (int ii = 0; ii < locks.Count; ii++)
                {
                    DsatsDemo.LockConditionState node = (DsatsDemo.LockConditionState)FindPredefinedNode(locks[ii], typeof(DsatsDemo.LockConditionState));

                    if (node != null)
                    {
                        node.SessionId.Value    = null;
                        node.ClientUserId.Value = null;
                        node.SubjectName.Value  = null;
                        node.Unlock(SystemContext);
                        node.ReportEvent(SystemContext, node);
                    }
                }
            }
        }
Пример #2
0
        private ServiceResult OnReleaseLock(
            ISystemContext context,
            MethodState method,
            NodeId objectId,
            IList <object> inputArguments,
            IList <object> outputArguments)
        {
            DsatsDemo.LockConditionState node = (DsatsDemo.LockConditionState)FindPredefinedNode(objectId, typeof(DsatsDemo.LockConditionState));

            if (!node.EnabledState.Id.Value)
            {
                return(StatusCodes.BadConditionDisabled);
            }

            if (node.LockState.CurrentState.Id.Value == new NodeId(DsatsDemo.Objects.LockStateMachineType_Unlocked, NamespaceIndex))
            {
                return(StatusCodes.BadConditionNotShelved);
            }

            // non-admins can only release their own locks.
            if (!CheckAdminAccess(context))
            {
                if (!SessionHasLock(context, objectId))
                {
                    return(StatusCodes.BadUserAccessDenied);
                }
            }

            // revoke the lock.
            RevokeLockForSession(context, node.SessionId.Value, objectId);

            node.SessionId.Value    = null;
            node.ClientUserId.Value = null;
            node.SubjectName.Value  = null;
            node.Unlock(context);
            node.ReportEvent(context, node);
            node.ClearChangeMasks(context, true);

            return(ServiceResult.Good);
        }