public async Task RemoveBehaviourAsync(string reference)
        {
            var found = Behaviours.Where(b => b.UniqueReference == reference).ToList();

            Behaviours.RemoveAll(b => b.UniqueReference == reference);
            UpdateFrameProcessors();
            if (Connection == ConnectedState.Connected)
            {
                foreach (var behaviour in found)
                {
                    if (behaviour.ActionOnRemoved != null)
                    {
                        EnqueueAction(behaviour.ActionOnRemoved);
                    }
                }
                await ActOnAnyBehaviourPermanentRequirements();
                await UnregisterBehavioursAsync(found);
            }

            OnBehaviourEvent?.Invoke(Behaviours, BehaviourEvent.Remove);
        }
        public async Task AddBehaviourAsync(IVectorBehaviourPlus behaviour)
        {
            if (!Behaviours.Any(b => b.UniqueReference == behaviour.UniqueReference))
            {
                Behaviours.Add(behaviour);
                UpdateFrameProcessors();

                if (Connection == ConnectedState.Connected)
                {
                    await ActOnAnyBehaviourPermanentRequirements();
                    await RegisterBehavioursAsync(new[] { behaviour });
                }

                if (behaviour.ActionOnAdded != null)
                {
                    EnqueueAction(behaviour.ActionOnAdded);
                }

                OnBehaviourEvent?.Invoke(Behaviours, BehaviourEvent.Add);
            }
        }