Example #1
0
        public void UnLock()
        {
            ZkLockerManager.GetClient().deleteAsync(_currentNode).Wait();
            MessageManager <Null> .DeleteSubject(_currentNode);

            _observer.OnCompleted();
            _event.Dispose();
        }
Example #2
0
        private async Task <bool> ExistPreNodeExecuted()
        {
            var result = await ZkLockerManager.GetClient().getChildrenAsync($"/locks/{_lockName}");

            var children     = result.Children.OrderBy(item => int.Parse(Regex.Replace(item, @"[a-zA-Z|_]", "0"))).ToList();
            var currentIndex = children.IndexOf(_currentNode.Replace($"/locks/{_lockName}/", ""));

            if (currentIndex <= 0)
            {
                return(false);
            }
            return(true);
        }
Example #3
0
        public override async Task process(WatchedEvent @event)
        {
            if (@event.get_Type() == Event.EventType.NodeDeleted)
            {
                var result = await ZkLockerManager.GetClient()
                             .getChildrenAsync(@event.getPath().Substring(0, @event.getPath().LastIndexOf('/')));

                var children = result.Children.OrderBy(item => int.Parse(Regex.Replace(item, @"[a-zA-Z|_]", "0"))).ToList();
                if (children.Count > 0)
                {
                    MessageManager <Null> .Publish(
                        @event.getPath().Substring(0, @event.getPath().LastIndexOf('/') + 1) + children[0], new Null());
                }
            }
        }
Example #4
0
        public Locker(string lockName, int timeout)
        {
            if (ZkLockerManager.GetClient().existsAsync("/locks").Result == null)
            {
                ZkLockerManager.GetClient().createAsync("/locks", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT).Wait();
            }
            if (ZkLockerManager.GetClient().existsAsync("/locks/" + lockName).Result == null)
            {
                ZkLockerManager.GetClient().createAsync("/locks/" + lockName, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT).Wait();
            }
            _lockName    = lockName;
            _lockTimeout = timeout;

            _observer = Observer.Create <Null>(_ => { ReceiveMessage(); });
        }
Example #5
0
        public void Lock()
        {
            _currentNode = ZkLockerManager.GetClient().createAsync($"/locks/{_lockName}/node", new byte[0],
                                                                   ZooDefs.Ids.OPEN_ACL_UNSAFE,
                                                                   CreateMode.EPHEMERAL_SEQUENTIAL).Result;

            ZkLockerManager.GetClient().existsAsync(_currentNode, true);

            if (ExistPreNodeExecuted().Result)
            {
                MessageManager <Null> .Subscribe(_currentNode, _observer);

                var result = WaitHandle.WaitAny(new WaitHandle[] { _event }, TimeSpan.FromMilliseconds(_lockTimeout));
                if (result == WaitHandle.WaitTimeout || result == 1)
                {
                    UnLock();
                    throw new LockerTimeoutException();
                }
            }
        }