package Ġcom . template . flows Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġnet . cord a . core . flows .* Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . utilities . Progress Tracker Ċ import Ġnet . cord a . core . utilities . Un trust worth y Data Ċ import Ġnet . cord a . core . utilities . unwrap Ċ Ċ // Ġ********* Ċ // Ġ* ĠFlow s Ġ* Ċ // Ġ********* Ċ @ Initi ating Flow Ċ @ Start able By RPC Ċ class ĠFlow A Ġ( val Ġrecipient : ĠParty ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= ĠProgress Tracker () ĊĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġsub Flow ( Flow B ( recipient )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ // ĠNote : ĠNo Ġannotations . ĠThis Ġis Ġused Ġas Ġan Ġin lined Ġsub flow . Ċ class ĠFlow B ( val Ġrecipient : ĠParty ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" I 'm Ġan Ġin lined Ġsub flow , Ġso ĠI Ġinherit Ġthe Ġ@ Initi ating Flow 's Ġsession ĠID Ġand Ġtype ." ĊĠĠĠĠĠĠĠ Ġinitiate Flow ( recipient ). send ( message ) ĊĠĠĠ Ġ} Ċ } ĊĊĊ Ċ @ Initi ated By ( Flow A :: class ) Ċ class ĠFlow A Responder ( val Ġcounter party Session : ĠFlow Session ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRes pon der Ġflow Ġlogic Ġgoes Ġhere . ĊĊĠĠĠĠĠĠĠ Ġval Ġother Flow Version Ġ= Ġcounter party Session . get Counter party Flow Info (). flow Version ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġreceived String Ġ= Ġcounter party Session . receive < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġpacket 1 : ĠUn trust worth y Data < String > Ġ= Ġcounter party Session . receive < String >() ĊĠĠĠĠĠĠĠ Ġval Ġreceived String : ĠString Ġ= Ġpacket 1 . unwrap Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPerform Ġchecking Ġon Ġthe Ġobject Ġreceived . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠT ĠO ĠD ĠO : ĠCheck Ġthe Ġreceived Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġthe Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Flow A Responder Ġ>>> > Ġ"+ Ġother Flow Version Ġ+ Ġreceived String ); ĊĊĠĠĠ Ġ} Ċ } ĊĊĊ Ċ @ Initi ating Flow Ċ @ Start able By RPC Ċ class ĠInit iator Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= ĠProgress Tracker () ĊĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit iator Ġflow Ġlogic Ġgoes Ġhere . ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Initi ated By ( Init iator :: class ) Ċ class ĠRes pon der ( val Ġcounter party Session : ĠFlow Session ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRes pon der Ġflow Ġlogic Ġgoes Ġhere . ĊĠĠĠ Ġ} Ċ } Ċ