/// <summary>
        /// <see cref="Case.SetupInternal"/>
        /// </summary>
        protected override void SetupInternal()
        {
            base.SetupInternal();

            Bind(new LinkSessionConnected {
                LinkName = Name
            },
                 OnLinkSessionConnected);
            Bind(new LinkSessionDisconnected {
                LinkName = Name
            },
                 OnLinkSessionDisconnected);

            if (HasChannelStrategy)
            {
                ChannelStrategy.Link = this;
                ChannelStrategy.Setup();
            }
            if (HasHeartbeatStrategy)
            {
                HeartbeatStrategy.Link = this;
                HeartbeatStrategy.Setup();

                Bind(Hub.HeartbeatEvent, OnHeartbeatEvent);
            }
        }
        /// <summary>
        /// <see cref="Case.TeardownInternal"/>
        /// </summary>
        protected override void TeardownInternal()
        {
            if (HasHeartbeatStrategy)
            {
                HeartbeatStrategy.Teardown();
                HeartbeatStrategy.Link = null;
            }
            if (HasChannelStrategy)
            {
                ChannelStrategy.Teardown();
                ChannelStrategy.Link = null;
            }

            base.TeardownInternal();
        }
        /// <summary>
        /// Called when a new link session is ready for open.
        /// </summary>
        public void InitiateSession(LinkSession session)
        {
            if (HasChannelStrategy)
            {
                ChannelStrategy.BeforeSessionSetup(session);
            }
            if (HasHeartbeatStrategy)
            {
                HeartbeatStrategy.BeforeSessionSetup(session);
            }

            if (HasChannelStrategy)
            {
                ChannelStrategy.InitiateHandshake(session);
            }
            else
            {
                OnLinkSessionConnectedInternal(true, session);
            }
        }
 // HeartbeatEvent event handler
 private void OnHeartbeatEvent(HeartbeatEvent e)
 {
     HeartbeatStrategy.OnHeartbeat();
 }