package Ġnet . cord a . node . services . state machine Ċ Ċ import Ġnet . cord a . core . flows . Flow Exception Ċ import Ġnet . cord a . core . flows . Flow Info Ċ import Ġnet . cord a . core . serialization . C ord a Serializable Ċ import Ġnet . cord a . core . serialization . Serialized Bytes Ċ import Ġjava . security . Secure Random Ċ Ċ /** Ċ Ġ* ĠA Ġsession Ġbetween Ġtwo Ġflows Ġis Ġidentified Ġby Ġtwo Ġsession ĠIDs , Ġthe Ġiniti ating Ġand Ġthe Ġinitiated Ġsession ĠID . Ċ Ġ* ĠHowever Ġafter Ġthe Ġsession Ġhas Ġbeen Ġestablished Ġthe Ġcommunication Ġis Ġsymmetric . ĠFrom Ġthen Ġon Ġwe Ġdifferent iate Ġbetween Ċ Ġ* Ġthe Ġtwo Ġsession ĠIDs Ġwith Ġ" source " ĠID Ġ( the ĠID Ġfrom Ġwhich Ġwe Ġreceive ) Ġand Ġ" sink " ĠID Ġ( the ĠID Ġto Ġwhich Ġwe Ġsend ). Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow ĠA Ġ( initi ating ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow ĠB Ġ( initi ated ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġiniti ating Id = source Id = 0 Ċ Ġ* ĠĠĠĠĠĠĠ Ġsend ( Init iate ( initi ating Id = 0 )) Ġ---- -> ĠĠĠ Ġiniti ating Id = sink Id = 0 Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitiated Id = source Id = 1 Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġinitiated Id = sink Id = 1 ĠĠĠĠĠĠ Ġ< ----- Ġsend ( Confirm ( initi ated Id = 1 )) Ċ Ġ*/ Ċ @ C ord a Serializable Ċ sealed Ġclass ĠSession Message Ċ Ċ @ C ord a Serializable Ċ data Ġclass ĠSession Id ( val Ġto Long : ĠLong ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Random ( secure Random : ĠSecure Random ) Ġ= ĠSession Id ( secure Random . next Long ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġinitial Ġmessage Ġto Ġinitiate Ġa Ġsession Ġwith . Ċ Ġ* Ċ Ġ* Ġ@ param Ġinit iator SessionId Ġthe Ġsession ĠID Ġof Ġthe Ġinit iator . ĠOn Ġthe Ġsending Ġside Ġthis Ġis Ġthe Ġ* source * ĠID , Ġon Ġthe Ċ Ġ* ĠĠ Ġreceiving Ġside Ġthis Ġis Ġthe Ġ* sink * ĠID . Ċ Ġ* Ġ@ param Ġinit iation Entropy Ġadditional Ġrandom ness Ġto Ġseed Ġthe Ġinitiated Ġflow 's Ġde dup lication ĠID . Ċ Ġ* Ġ@ param Ġinit iator Flow ClassName Ġthe Ġclass Ġname Ġto Ġbe Ġused Ġto Ġdetermine Ġthe Ġiniti ating - initi ated Ġmapping Ġon Ġthe Ġreceiver Ċ Ġ* ĠĠ Ġside . Ċ Ġ* Ġ@ param Ġflow Version Ġthe Ġversion Ġof Ġthe Ġiniti ating Ġflow . Ċ Ġ* Ġ@ param ĠappName Ġthe Ġname Ġof Ġthe Ġc ord app Ġdefining Ġthe Ġiniti ating Ġflow , Ġor Ġ" cord a " Ġif Ġit 's Ġa Ġcore Ġflow . Ċ Ġ* Ġ@ param Ġfirst Payload Ġthe Ġoptional Ġfirst Ġpayload . Ċ Ġ*/ Ċ data Ġclass ĠInitial Session Message ( ĊĠĠĠĠĠĠĠ Ġval Ġinit iator SessionId : ĠSession Id , ĊĠĠĠĠĠĠĠ Ġval Ġinit iation Entropy : ĠLong , ĊĠĠĠĠĠĠĠ Ġval Ġinit iator Flow ClassName : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġflow Version : ĠInt , ĊĠĠĠĠĠĠĠ Ġval ĠappName : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġfirst Payload : ĠSerialized Bytes < Any >? Ċ ) Ġ: ĠSession Message () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Initial Session Message (" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" init iator SessionId =$ init iator SessionId , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" init iation Entropy =$ init iation Entropy , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" init iator Flow ClassName =$ init iator Flow ClassName , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" appName =$ appName , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first Payload =${ first Payload ?. java Class }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ")" Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġmessage Ġsent Ġwhen Ġa Ġsession Ġhas Ġbeen Ġestablished Ġalready . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrecipient SessionId Ġthe Ġrecipient Ġsession ĠID . ĠOn Ġthe Ġsending Ġside Ġthis Ġis Ġthe Ġ* sink * ĠID , Ġon Ġthe Ġreceiving Ġside Ċ Ġ* ĠĠ Ġthis Ġis Ġthe Ġ* source * ĠID . Ċ Ġ* Ġ@ param Ġpayload Ġthe Ġrest Ġof Ġthe Ġmessage . Ċ Ġ*/ Ċ data Ġclass ĠExisting Session Message ( ĊĠĠĠĠĠĠĠ Ġval Ġrecipient SessionId : ĠSession Id , ĊĠĠĠĠĠĠĠ Ġval Ġpayload : ĠExisting Session Message Payload Ċ ) Ġ: ĠSession Message () Ċ Ċ /** Ċ Ġ* ĠThe Ġpayload Ġof Ġan Ġ[ Existing Session Message ] Ċ Ġ*/ Ċ @ C ord a Serializable Ċ sealed Ġclass ĠExisting Session Message Payload Ċ Ċ /** Ċ Ġ* ĠThe Ġconfirmation Ġmessage Ġsent Ġby Ġthe Ġinitiated Ġside . Ċ Ġ* Ġ@ param Ġinitiated SessionId Ġthe Ġinitiated Ġsession ĠID , Ġthe Ġother Ġhalf Ġof Ġ[ Initial Session Message . init iator SessionId ]. Ċ Ġ* ĠĠ ĠThis Ġis Ġthe Ġ* source * ĠID Ġon Ġthe Ġsending ( initi ated ) Ġside , Ġand Ġthe Ġ* sink * ĠID Ġon Ġthe Ġreceiving ( initi ating ) Ġside . Ċ Ġ*/ Ċ data Ġclass ĠConfirm Session Message ( ĊĠĠĠĠĠĠĠ Ġval Ġinitiated SessionId : ĠSession Id , ĊĠĠĠĠĠĠĠ Ġval Ġinitiated Flow Info : ĠFlow Info Ċ ) Ġ: ĠExisting Session Message Payload () Ċ Ċ /** Ċ Ġ* ĠA Ġmessage Ġcontaining Ġflow - related Ġdata . Ċ Ġ* Ċ Ġ* Ġ@ param Ġpayload Ġthe Ġserial ised Ġpayload . Ċ Ġ*/ Ċ data Ġclass ĠData Session Message ( val Ġpayload : ĠSerialized Bytes < Any >) Ġ: ĠExisting Session Message Payload () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Data Session Message ( payload =${ payload . java Class })" Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġmessage Ġindicating Ġthat Ġan Ġerror Ġhas Ġhappened . Ċ Ġ* Ċ Ġ* Ġ@ param Ġflow Exception Ġthe Ġexception Ġthat Ġhappened . ĠThis Ġis Ġnull Ġif Ġthe Ġerror Ġcondition Ġwasn 't Ġreve aled Ġto Ġthe Ċ Ġ* ĠĠ Ġreceiving Ġside . Ċ Ġ* Ġ@ param Ġerror Id Ġthe ĠID Ġof Ġthe Ġsource Ġerror . ĠThis Ġis Ġalways Ġspecified Ġto Ġallow Ġposterior i Ġcorrelation Ġof Ġerror Ġconditions . Ċ Ġ*/ Ċ data Ġclass ĠError Session Message ( val Ġflow Exception : ĠFlow Exception ?, Ġval Ġerror Id : ĠLong ) Ġ: ĠExisting Session Message Payload () Ċ Ċ /** Ċ Ġ* ĠA Ġmessage Ġindicating Ġthat Ġa Ġsession Ġinit iation Ġhas Ġfailed . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmessage Ġa Ġmessage Ġdescribing Ġthe Ġproblem Ġto Ġthe Ġinit ator . Ċ Ġ* Ġ@ param Ġerror Id Ġan Ġerror ĠID Ġidentifying Ġthis Ġerror Ġcondition . Ċ Ġ*/ Ċ data Ġclass ĠReject Session Message ( val Ġmessage : ĠString , Ġval Ġerror Id : ĠLong ) Ġ: ĠExisting Session Message Payload () Ċ Ċ /** Ċ Ġ* ĠA Ġmessage Ġindicating Ġthat Ġthe Ġflow Ġhosting Ġthe Ġsession Ġhas Ġended . ĠNote Ġthat Ġthis Ġmessage Ġis Ġstrictly Ġpart Ġof Ġthe Ċ Ġ* Ġsession Ġprotocol , Ġthe Ġflow Ġmay Ġbe Ġremoved Ġbefore Ġall Ġcounter - flows Ġhave Ġended . Ċ Ġ* Ċ Ġ* ĠThe Ġsole Ġpurpose Ġof Ġthis Ġmessage Ġcurrently Ġis Ġto Ġprovide Ġdiagnostic Ġin Ġcases Ġwhere Ġthe Ġtwo Ġcommunic ating Ġflows ' Ċ Ġ* Ġprotocols Ġdon 't Ġmatch Ġup , Ġe . g . Ġone Ġis Ġwaiting Ġfor Ġthe Ġother , Ġbut Ġthe Ġother Ġside Ġhas Ġalready Ġfinished . Ċ Ġ*/ Ċ object ĠEnd Session Message Ġ: ĠExisting Session Message Payload () Ċ