public State GetInternalState()
        {
            State s = new State();

            if (SolverClientSession != null)
            {
                s.SolverClientState = SolverClientSession.GetInternalState();
            }
            if (PromiseClientSession != null)
            {
                s.PromiseClientState = PromiseClientSession.GetInternalState();
            }
            if (ClientChannelNegotiation != null)
            {
                s.NegotiationClientState = ClientChannelNegotiation.GetInternalState();
            }
            return(s);
        }
        public State GetInternalState()
        {
            State s = new State();

            if (SolverClientSession != null)
            {
                s.SolverClientState = SolverClientSession.GetInternalState();
            }
            if (PromiseClientSession != null)
            {
                s.PromiseClientState = PromiseClientSession.GetInternalState();
            }
            if (ClientChannelNegotiation != null)
            {
                s.NegotiationClientState = ClientChannelNegotiation.GetInternalState();
            }
            s.Status = Status;
            s.TumblerParametersHash = Parameters.GetHash();
            return(s);
        }
        private void RoundTrip(ref PromiseClientSession client, PromiseParameters parameters)
        {
            var clone = Serializer.Clone(client.GetInternalState());

            client = new PromiseClientSession(parameters, clone);
        }