public virtual async Task TerminateAsync(TerminationMessage.TerminationMessageCode terminationMessageCode)
        {
            if (!_hasReceivedTerminationMessage)
            {
                await TerminateStrategyAsync(terminationMessageCode);
            }

            NotifyAboutTermination();
        }
        protected virtual async Task TerminateStrategyAsync(TerminationMessage.TerminationMessageCode terminationMessageCode)
        {
            var terminationMessage = new TerminationMessage(
                this.SessionId,
                terminationMessageCode,
                _vaspInfo);

            await _transportClient.SendAsync(new MessageEnvelope()
            {
                Topic          = this.CounterPartyTopic,
                SigningKey     = _privateSigningKey,
                EncryptionType = EncryptionType.Symmetric,
                EncryptionKey  = _sharedSymKeyId
            }, terminationMessage);
        }