Как изменить Инициатор потока внутри потока в Корде? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть 2 узла, например, Сторона A и Сторона B. Я использую API через узел Стороны A с некоторыми данными, затем мне нужно обработать (Внутри потока) эти данные и создать состояние, скажем, Состояние A (Сторона A будетучастник), затем мне нужно инициировать другой поток с обработанными данными (из самого первого потока) и стороной B в качестве инициатора.Так как я это сделаю?,По сути, мне нужно инициировать 2 потока разных инициаторов в одном вызове API.

1 Ответ

0 голосов
/ 07 февраля 2019

Я думаю, вы можете использовать sendAndReceive.В классе Responder, который будет инициирован второй стороной, можно использовать данные, отправленные из MainClassInitiator, которые будут инициированы первой стороной.

    class MainClass {
        @InitiatingFlow
        @StartableByRPC
        open class MainClassInitiator(val ParameterFromApi: DataType,
                                      val NodeB: Party) : FlowLogic<SignedTransaction>() {
            @Suspendable
            override fun call(): SignedTransaction {

                val notary = serviceHub.networkMapCache.notaryIdentities[0]

                val initiator = NodeB

                val session = initiateFlow(initiator)
                val initiatorValue = session.sendAndReceive<SignedTransaction>(ParameterFromApi).unwrap { it }
            }
        }

        @InitiatedBy(MainClassInitiator::class)
        class Responder(val session: FlowSession) : FlowLogic<SignedTransaction>() {
            @Suspendable
            override fun call(): SignedTransaction {

                val request = session.receive<DataType>().unwrap { it }

    }
}
}
...