void OnNetMsgReceived(object?sender, NetMsgEventArgs e)
        {
            if (state == EncryptionState.Encrypted)
            {
                var plaintextData = encryption !.ProcessIncoming(e.Data);
                NetMsgReceived?.Invoke(this, e.WithData(plaintextData));
                return;
            }

            var packetMsg = CMClient.GetPacketMsg(e.Data, log);

            if (packetMsg == null)
            {
                log.LogDebug(nameof(EnvelopeEncryptedConnection), "Failed to parse message during channel setup, shutting down connection");
                Disconnect(userInitiated: false);
                return;
            }

            try
            {
                debugNetworkListener?.OnIncomingNetworkMessage(packetMsg.MsgType, packetMsg.GetData());
            }
            catch (Exception ex)
            {
                log.LogDebug(nameof(EnvelopeEncryptedConnection), "DebugNetworkListener threw an exception: {0}", ex);
            }

            if (!IsExpectedEMsg(packetMsg.MsgType))
            {
                log.LogDebug(nameof(EnvelopeEncryptedConnection), "Rejected EMsg: {0} during channel setup", packetMsg.MsgType);
                return;
            }

            switch (packetMsg.MsgType)
            {
            case EMsg.ChannelEncryptRequest:
                HandleEncryptRequest(packetMsg);
                break;

            case EMsg.ChannelEncryptResult:
                HandleEncryptResult(packetMsg);
                break;
            }
        }