/// <inheritdoc />
        public override void AddSetEvent(EventPath path, EventContent content)
        {
            if (!_mapContext.EventsEnabled)
            {
                return;
            }
            var e = new EventData {
                Set = content
            };

            e.Path.AddRange(path.Path);

            AddUpdateEvent(e);
        }
        /// <inheritdoc />
        public override void AddListEvent(EventPath path, ListEvent listEvent)
        {
            if (!_mapContext.EventsEnabled)
            {
                return;
            }
            var e = new EventData {
                ListEvent = listEvent
            };

            e.Path.AddRange(path.Path);

            AddUpdateEvent(e);
        }
        /// <summary>
        /// Establishes a parent child relationship
        /// </summary>
        public void SetParent(EventContext parent, EventPath path)
        {
            if (_parent != null)
            {
                throw new Exception("Message is already associated with another parent");
            }

            _parent = parent;
            if (parent != null)
            {
                _parent.AddChild(this);
                EventsEnabled = _parent.EventsEnabled;
            }

            _path = path;
            // when a message is added to a parent, any delta events it currently has are no longer valid
            _events.Clear();
        }
 /// <summary>
 /// Removes the parent child relationship
 /// </summary>
 public void ClearParent()
 {
     _parent?.RemoveChild(this);
     _parent = null;
     _path   = EventPath.Empty;
 }
 /// <summary>
 /// Used to establish a parent child relationship between a message and child message
 /// </summary>
 /// <param name="parent"></param>
 /// <param name="path"></param>
 public virtual void SetParent(EventContext parent, EventPath path)
 {
     Context.SetParent(parent, path);
 }