如何在Corda的流中更改流的启动器?

时间:2019-02-05 09:42:58

标签: corda

我有2个节点,分别表示甲方和乙方。我正在通过甲方的节点访问一些数据的API,然后我需要处理(在流中)此数据并创建一个表示状态A(甲方将为参与者),那么我需要使用处理后的数据(来自第一个流本身)来启动另一个流,并以乙方作为发起者。那我该怎么做呢? 。基本上,我需要做的就像是需要在一个API调用中启动2个不同的启动程序流。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用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 }

    }
}
}