Ejemplo n.º 1
0
        /// <summary>
        /// Subscribe to data changes
        /// </summary>
        /// <param name="subscriberId">client id from signalR</param>
        /// <param name="mapping">mapping to subscribe</param>
        /// <param name="vars">variables to detect</param>
        /// <returns></returns>
        public bool SubscribeChanges(string subscriberId, string mapping, params string[] vars)
        {
            if (DataChanged == null)
            {
                throw new NullReferenceException("DataChanged");
            }
            var enumerable = new List <List <string> >();

            foreach (var variable in vars)
            {
                enumerable.Add(variable.Split('.').ToList());
            }

            SubscriptionTree item;

            if (!_subscritions.TryGetValue(mapping, out item))
            {
                item = new SubscriptionTree(mapping, DataChanged);
                if (!_subscritions.TryAdd(mapping, item))
                {
                    item = _subscritions[mapping];
                }
            }
            return(item.AddSubscribtion(subscriberId, enumerable) == vars.Length);
        }
Ejemplo n.º 2
0
        public void CreateSubscriptionTree_SimplePropertyAccess_TreeHasAllItems()
        {
            InitializeTargetJustAgeAccess();

            SubscriptionTree subscriptionTree = _target.CreateSubscriptionTree(_person);

            Assert.AreEqual(1, subscriptionTree.Children.Count);
            SubscriptionNode root = subscriptionTree.Children[0];

            Assert.AreEqual(_person, root.Subject);
            Assert.IsNull(root.Children);
        }
Ejemplo n.º 3
0
        public void CreateSubscriptionTreeChangePropertyOnParameter_PropertyNotBeingMonitored_PropertyChanges()
        {
            InitializeTargetJustAgeAccess();

            SubscriptionTree subscriptionTree = _target.CreateSubscriptionTree(_person);
            int callCount = 0;

            subscriptionTree.PropertyChanged += (sender) => callCount++;

            _person.Name = "Foooadf";
            Assert.AreEqual(0, callCount);
        }
Ejemplo n.º 4
0
        public void CreateSubscriptionTreeChangePropertyOnParameter_TwoLevelPropertyBeingMonitored_PropertyChanges()
        {
            InitializeTargetBrothersAgeAccess();

            SubscriptionTree subscriptionTree = _target.CreateSubscriptionTree(_person);
            int callCount = 0;

            subscriptionTree.PropertyChanged += (sender) => callCount++;

            _person.Brother = new Person();
            Assert.AreEqual(1, callCount);
        }
Ejemplo n.º 5
0
        public ShowSubscriptionsForm(SynchronizationTree tree, Action <bool> startSyncThread, VaultCommunication vaultCom)
        {
            this.tree            = tree;
            this.startSyncThread = startSyncThread;
            this.vaultCom        = vaultCom;

            InitializeComponent();
            SubscriptionTree.Nodes.Clear();

            removeToolStripMenuItem.ShortcutKeys = Keys.Delete;
            RedrawTree();
            SubscriptionTree.ExpandAll();
        }
Ejemplo n.º 6
0
        public void Setup()
        {
            _person = new Person();

            _ageAccessNode = new PropertyAccessNode(typeof(Person).GetProperty("Age"));
            _brotherAccessNode = new PropertyAccessNode(typeof(Person).GetProperty("Brother")) { Children = new List<PropertyAccessTreeNode>() { _ageAccessNode } };
            _parameterAccessNode = new ParameterNode(typeof(Person), "person") { Children = new List<PropertyAccessTreeNode>() { _brotherAccessNode } };

            _brotherNode = new SubscriptionNode() { AccessNode = _brotherAccessNode };
            _parameterNode = new SubscriptionNode() { AccessNode = _parameterAccessNode, Children = new List<SubscriptionNode>() { _brotherNode } };
            _parameterNode.Subject = _person;

            List<SubscriptionNode> nodes = new List<SubscriptionNode>() { _parameterNode };

            _target = new SubscriptionTree(_person, nodes);
        }
Ejemplo n.º 7
0
        public void CreateSubscriptionTree_TwoLevelPropertyAccess_TreeHasAllItems()
        {
            InitializeTargetBrothersAgeAccess();

            SubscriptionTree subscriptionTree = _target.CreateSubscriptionTree(_person);

            Assert.AreEqual(1, subscriptionTree.Children.Count);

            SubscriptionNode root = subscriptionTree.Children[0];

            Assert.AreEqual(_person, root.Subject);
            Assert.AreEqual(1, root.Children.Count);

            SubscriptionNode brotherSubscriptionNode = root.Children[0];

            Assert.AreEqual(_brotherPropertyAccessNode, brotherSubscriptionNode.AccessNode);
            Assert.IsNull(brotherSubscriptionNode.Children);
        }
Ejemplo n.º 8
0
 private bool UpdateSubscribtion(string id, IEnumerable <string> variablePath, bool remove, ref int subscriptions)
 {
     if (variablePath.Any())
     {
         var key = variablePath.First();
         SubscriptionTree entry;
         if (!Childs.TryGetValue(key, out entry) && !remove)
         {
             entry = new SubscriptionTree
             {
                 Name   = key,
                 Parent = this
             };
             if (!Childs.TryAdd(key, entry))
             {
                 entry = Childs[key];
             }
         }
         return(entry != null?entry.UpdateSubscribtion(id, variablePath.Skip(1), remove, ref subscriptions) : false);
     }
     else
     {
         if (remove)
         {
             object o;
             if (Subscribers.TryRemove(id, out o))
             {
                 Interlocked.Decrement(ref subscriptions);
                 return(true);
             }
             return(false);
         }
         else
         {
             if (Subscribers.TryAdd(id, null))
             {
                 Interlocked.Increment(ref subscriptions);
                 return(true);
             }
             return(false);
         }
     }
 }
Ejemplo n.º 9
0
        public void CreateSubscriptionTreeChangeSecondLevelPropertyOnParameterAndThenModifyOldProperty_TwoLevelPropertyBeingMonitored_PropertyDoesNotChange()
        {
            InitializeTargetBrothersAgeAccess();

            Person brother = new Person();

            _person.Brother = brother;

            SubscriptionTree subscriptionTree = _target.CreateSubscriptionTree(_person);
            int callCount = 0;

            subscriptionTree.PropertyChanged += (sender) => callCount++;

            _person.Brother = null;

            brother.Age = 1000022;

            Assert.AreEqual(1, callCount);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Subscribe to raw data changes
        /// </summary>
        /// <param name="subscriberId">client id from signalR</param>
        /// <param name="mapping">mapping to subscribe</param>
        /// <param name="vars">variables to detect</param>
        /// <returns></returns>
        public bool SubscribeRawChanges(string subscriberId, string area, params string[] adresses)
        {
            if (DataChanged == null)
            {
                throw new NullReferenceException("DataChanged");
            }

            SubscriptionTree item;
            var key = $"{ADDRESS_PREFIX}{area}";

            if (!_subscritions.TryGetValue(key, out item))
            {
                item = new SubscriptionTree(area, DataChanged, true);
                if (!_subscritions.TryAdd(key, item))
                {
                    item = _subscritions[key];
                }
            }

            return(item.AddRawSubscription(subscriberId, adresses) == adresses.Length);
        }
        public void Setup()
        {
            _person = new Person();

            _ageAccessNode     = new PropertyAccessNode(typeof(Person).GetProperty("Age"));
            _brotherAccessNode = new PropertyAccessNode(typeof(Person).GetProperty("Brother"))
            {
                Children = new List <PropertyAccessTreeNode>()
                {
                    _ageAccessNode
                }
            };
            _parameterAccessNode = new ParameterNode(typeof(Person), "person")
            {
                Children = new List <PropertyAccessTreeNode>()
                {
                    _brotherAccessNode
                }
            };

            _brotherNode = new SubscriptionNode()
            {
                AccessNode = _brotherAccessNode
            };
            _parameterNode = new SubscriptionNode()
            {
                AccessNode = _parameterAccessNode, Children = new List <SubscriptionNode>()
                {
                    _brotherNode
                }
            };
            _parameterNode.Subject = _person;

            List <SubscriptionNode> nodes = new List <SubscriptionNode>()
            {
                _parameterNode
            };

            _target = new SubscriptionTree(_person, nodes);
        }
Ejemplo n.º 12
0
        private void SubscriptionTree_MouseUp(object sender, MouseEventArgs e)
        {
            var folderToolStripMenuItems = new[]
            {
                new { state = SyncState.Include, menuItem = includeAllToolStripMenuItem },
                new { state = SyncState.IncludeOnlyFiles, menuItem = includeFilesToolStripMenuItem },
                new { state = SyncState.IncludeOnlyDirectChildFolders, menuItem = includeDirectSubfoldersToolStripMenuItem },
                new { state = SyncState.IncludeOnlyFolders, menuItem = includeFoldersToolStripMenuItem },
                new { state = SyncState.IncludeSingleFolder, menuItem = onlyThisFolderToolStripMenuItem }
            };
            var toolStripMenuItems = new[]
            {
                new { state = SyncState.Include, menuItem = includeToolStripMenuItem },
                new { state = SyncState.Exclude, menuItem = excludeToolStripMenuItem },
            };

            foreach (var x in folderToolStripMenuItems.Concat(toolStripMenuItems))
            {
                x.menuItem.Tag = x.state;
            }

            if (e.Button == MouseButtons.Right)
            {
                SubscriptionTree.SelectedNode = SubscriptionTree.GetNodeAt(e.X, e.Y);

                var n = SubscriptionTree.SelectedNode;
                if (n != null)
                {
                    foreach (var item in toolStripMenuItems
                             .Concat(folderToolStripMenuItems)
                             .Select(x => x.menuItem)
                             .Concat(treeContextMenuStrip.Items.OfType <ToolStripMenuItem>()))
                    {
                        item.Checked = false;
                        item.Enabled = true;
                    }

                    var isFolder = tree.IsFolder(GetPath(n));
                    includeToolStripMenuItem.DropDownItems.Clear();
                    if (isFolder) // show dropdown
                    {
                        foreach (var item in folderToolStripMenuItems)
                        {
                            includeToolStripMenuItem.DropDownItems.Add(item.menuItem);
                        }
                    }

                    var state = tree.GetExplicitStateOfPath(GetPath(n));
                    if (state == null)
                    {
                        inheritedToolStripMenuItem.Checked = true;
                    }
                    else
                    {
                        foreach (var item in toolStripMenuItems.Concat(folderToolStripMenuItems))
                        {
                            if (item.menuItem.Tag != null && state == item.menuItem.Tag as SyncState?)
                            {
                                item.menuItem.Checked = true;
                            }
                        }
                        if (folderToolStripMenuItems.Any(x => x.menuItem.Checked))
                        {
                            includeToolStripMenuItem.Checked = true;
                        }
                    }
                }
                else
                {
                    foreach (var item in treeContextMenuStrip.Items.OfType <ToolStripMenuItem>())
                    {
                        item.Enabled = false;
                        item.Checked = false;
                    }
                }
                treeContextMenuStrip.Show(SubscriptionTree, e.Location);
            }
        }