/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠSK ĠTele com ĠCo ., ĠLtd . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp : www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . sk t . n ugu . sdk . agent . routine Ċ Ċ import Ġcom . google . gson . JsonArray Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . sk t . n ugu . sdk . agent . display . Display Agent Interface Ċ import Ġcom . sk t . n ugu . sdk . agent . routine . handler . Continue Directive Handler Ċ import Ġcom . sk t . n ugu . sdk . agent . routine . handler . Start Directive Handler Ċ import Ġcom . sk t . n ugu . sdk . agent . routine . handler . Stop Directive Handler Ċ import Ġcom . sk t . n ugu . sdk . agent . text . Text Agent Interface Ċ import Ġcom . sk t . n ugu . sdk . agent . util . Ignore Error Context Request or Ċ import Ġcom . sk t . n ugu . sdk . agent . version . Version Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . capability . Capability Agent Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . common . Namespace And Name Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . context .* Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . directive . Directive Group Processor Interface Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . directive . Directive Processor Interface Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . directive . Directive Se qu encer Interface Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . focus . Se am less Focus Manager Interface Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . message . Directive Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . message . Message Request Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . message . Message Sender Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . message . Status Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . message . request . Event Message Request Ċ import Ġcom . sk t . n ugu . sdk . core . utils . Logger Ċ import Ġjava . util . concurrent .* Ċ Ċ class ĠRout ine Agent ( ĊĠĠĠ Ġprivate Ġval Ġmessage Sender : ĠMessage Sender , ĊĠĠĠ Ġprivate Ġval Ġcontext Manager : ĠContext Manager Interface , ĊĠĠĠ Ġprivate Ġval Ġdirective Processor : ĠDirective Processor Interface , ĊĠĠĠ Ġprivate Ġval Ġdirective Se qu encer : ĠDirective Se qu encer Interface , ĊĠĠĠ Ġprivate Ġval Ġdirective Group Processor : ĠDirective Group Processor Interface , ĊĠĠĠ Ġprivate Ġval Ġse am less Focus Manager : ĠSe am less Focus Manager Interface , ĊĠĠĠ Ġprivate Ġval Ġstart Directive Handle Controller : ĠStart Directive Handler . Handle Controller ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġcontinue Directive Handle Controller : ĠContinue Directive Handler . Handle Controller ? Ġ= Ġnull , Ċ ) Ġ: ĠCap ability Agent , ĊĠĠĠ ĠRout ine Agent Interface , ĊĠĠĠ ĠSupported Interface Context Provider , ĊĠĠĠ ĠStart Directive Handler . Controller , ĊĠĠĠ ĠStop Directive Handler . Controller , ĊĠĠĠ ĠContinue Directive Handler . Controller , ĊĠĠĠ ĠDisplay Agent Interface . Listener Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Routine Agent " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVERSION Ġ= ĠVersion ( 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNAMES PACE Ġ= Ġ" Routine " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEVENT _ FAILED Ġ= Ġ" Failed " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġdata Ġclass ĠState Context ( ĊĠĠĠĠĠĠĠ Ġval Ġcontext : ĠRout ine Agent Interface . Context ĊĠĠĠ Ġ) Ġ: ĠBase Context State Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Compact Context (): ĠJsonObject Ġ= ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" version ", ĠVERSION . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOMP ACT _ STATE : ĠString Ġ= Ġbuild Compact Context (). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠComp act Context State Ġ= Ġobject Ġ: ĠBase Context State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvalue (): ĠString Ġ= ĠCOMP ACT _ STATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvalue (): ĠString Ġ= Ġbuild Compact Context (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . token ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" token ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" routine Activity ", Ġcontext . routine Activity . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . current Action ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" current Action ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . actions ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" actions ", ĠJson Array (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( it . to JsonObject ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠRout ine RequestListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Cancel () ĊĠĠĠĠĠĠĠ Ġfun Ġon Finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠExec utors . new Single Thread Scheduled Executor () ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= ĠCopy On Write Array Set < Routine Agent Interface . Routine Listener >() ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠRout ine Request ( ĊĠĠĠĠĠĠĠ Ġval Ġdirective : ĠStart Directive Handler . Start Directive , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlistener : ĠRout ine RequestListener ĊĠĠĠ Ġ) Ġ: ĠSe am less Focus Manager Interface . Request er Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Action Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Action Handling Listener : ĠDirective Group Handling Listener ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Action Dialog RequestId : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġis Paused Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Canceled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġscheduled Future For Try Start Next Action : ĠScheduled Future < *> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġscheduled Future For Cancel By Interrupt : ĠScheduled Future < *> ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ Routine Request ] Ġstart ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirective . payload . actions . first OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Action ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcancel ( cancel Current Action : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ Routine Request ] Ġcancel : Ġ$ is Canceled , Ġcancel Current Action : Ġ$ cancel Current Action " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Canceled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Canceled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel Current Action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Current Action () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcancel Current Action () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Dialog RequestId ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirective Processor . cancel Dialog RequestId ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpause ( cancel Current Action : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ Routine Request ] Ġpause Ġ- Ġcancel Current Action : Ġ$ cancel Current Action , Ġis Paused : Ġ$ is Paused " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel Current Action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Current Action () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Cancel By Interrupt ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Cancel By Interrupt Ġ= Ġexecutor . schedule ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel ( cancel Current Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 6 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Paused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Paused Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠRout ine Agent Interface . State . INTERRUP TED ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Inter rupted ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcancel If Current Routine Display Cle ared ( dialog RequestId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ Routine Request ] Ġcancel If Current Routine Display Cle ared : Ġ$ current Action Dialog RequestId , Ġ$ dialog RequestId " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Action Dialog RequestId Ġ== Ġdialog RequestId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ Routine Request ] Ġcancel If Current Routine Display Cle ared : Ġ$ dialog RequestId " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdo Continue () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ Routine Request ] Ġdo Continue Ġ- Ġis Paused : Ġ$ is Paused , Ġis Canceled : Ġ$ is Canceled " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Canceled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Paused Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Cancel By Interrupt ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Cancel By Interrupt Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Playing ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Start Next Action () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtry Start Next Action () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ Routine Request ] Ġtry Start Next Action Ġ- Ġ$ current Action Index , Ġis Paused : Ġ$ is Paused " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Paused Ġ|| Ġis Canceled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Action Index Ġ< Ġdirective . payload . actions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Action ( directive . payload . actions [ current Action Index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetCurrent Action Index (): ĠInt Ġ= Ġcurrent Action Index ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdo Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ Routine Request ] Ġdo Action Ġ- Ġ$ action ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action . type Ġ== ĠAction . Type . TEXT Ġ&& Ġaction . text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Text Action ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( action . type Ġ== ĠAction . Type . DATA Ġ&& Ġaction . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Data Action ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdo Text Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Agent ?. request TextInput ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . text !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . play Service Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠText Agent Interface . RequestListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Request Created ( dialog RequestId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ on Request Created ] Ġdialog RequestId : Ġ$ dialog RequestId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input Requests . add ( dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Dialog RequestId Ġ= Ġdialog RequestId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Handling Listener Ġ= ĠDirective Group Handling Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog RequestId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirective Group Processor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirective Se qu encer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠDirective Group Handling Listener . On Directive Result Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish ( is Exist Canceled Or Failed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ on Finish ] Ġdialog RequestId : Ġ$ dialog RequestId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Exist Canceled Or Failed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action . post Delay In Milliseconds Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . schedule ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Start Next Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . post Delay In Milliseconds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Start Next Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Canceled ( directive : ĠDirective ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed ( directive : ĠDirective ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Response ( dialog RequestId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog RequestId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠText Agent Interface . ErrorType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Dialog RequestId Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Handling Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdo Data Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Manager . getContext ( object Ġ: ĠIgnore Error Context Request or () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Context ( json Context : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠEvent Message Request . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNAMES PACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Action Triggered ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVERSION . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). payload ( JsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . play Service Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" play Service Id ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" data ", Ġaction . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. referrer Dialog RequestId ( directive . header . referrer Dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" do Data Action Ġ- Ġ[ on Context ] Ġdialog RequestId : Ġ${ request . dialog RequestId }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Dialog RequestId Ġ= Ġrequest . dialog RequestId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Handling Listener Ġ= ĠDirective Group Handling Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . dialog RequestId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirective Group Processor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirective Se qu encer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠDirective Group Handling Listener . On Directive Result Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish ( is Exist Canceled Or Failed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" do Data Action Ġ- Ġ[ on Finish ] Ġdialog RequestId : Ġ${ request . dialog RequestId }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Exist Canceled Or Failed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action . post Delay In Milliseconds Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled Future For Try Start Next Action Ġ= Ġexecutor . schedule ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Start Next Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġaction . post Delay In Milliseconds , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Start Next Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Canceled ( directive : ĠDirective ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed ( directive : ĠDirective ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Sender . new Call ( request ). enqueue ( object Ġ: ĠMessage Sender . Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( request : ĠMessage Request , Ġstatus : ĠStatus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Dialog RequestId Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Handling Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( request : ĠMessage Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response Start ( request : ĠMessage Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġstate Ġ= ĠRout ine Agent Interface . State . IDLE ĊĠĠĠ Ġprivate Ġvar Ġcurrent Routine Request : ĠRout ine Request ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtext Input Requests Ġ= ĠHashSet < String >() ĊĠĠĠ Ġprivate Ġvar Ġcausing Pause Requests Ġ= ĠHashMap < String , ĠEvent Message Request >() ĊĠĠĠ Ġvar Ġtext Agent : ĠText Agent Interface ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Interface Name (): ĠString Ġ= ĠNAMES PACE ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdirective Se qu encer . add Directive Handler ( Start Directive Handler ( this , Ġstart Directive Handle Controller )) ĊĠĠĠĠĠĠĠ Ġdirective Se qu encer . add Directive Handler ( Stop Directive Handler ( this )) ĊĠĠĠĠĠĠĠ Ġdirective Se qu encer . add Directive Handler ( Continue Directive Handler ( this , Ġcontinue Directive Handle Controller )) ĊĠĠĠĠĠĠĠ Ġcontext Manager . setState Provider ( namespace And Name , Ġthis ) ĊĠĠĠĠĠĠĠ Ġmessage Sender . add On SendMessage Listener ( object Ġ: ĠMessage Sender . On SendMessage Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre SendMessage ( request : ĠMessage Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Ġis ĠEvent Message Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( textInput Requests . remove ( request . dialog RequestId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġmy Ġtext Ġrequest , Ġskip Ġpause . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Pause Routine ( request )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcausing Pause Requests [ request . dialog RequestId ] Ġ= Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ on Pre SendMessage ] Ġpause Ġroutine Ġby : Ġ$ request ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġrequest Ġis Ġcaused Ġby Ġthe Ġcurrent Ġaction , Ġdo Ġnot Ġcancel Ġcurrent Ġaction . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pause ( request . referrer Dialog RequestId Ġ!= Ġit . current Action Dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post SendMessage ( request : ĠMessage Request , Ġstatus : ĠStatus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ on Post SendMessage ] Ġrequest : Ġ$ request , Ġstatus : Ġ$ status ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! status . is Ok () Ġ&& Ġrequest Ġis ĠEvent Message Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ca using Pause Requests . remove ( request . dialog RequestId ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ on Post SendMessage ] Ġcancel Ġcurrent Ġrequest Ġ( ca using Ġrequest : Ġ$ request )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshould Pause Routine ( request : ĠEvent Message Request ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( request . namespace Ġ== Ġ" Text " Ġ&& Ġrequest . name Ġ== Ġ" TextInput ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( request . namespace Ġ== Ġ" Display " Ġ&& Ġrequest . name Ġ== Ġ" Element Selected ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( request . namespace Ġ== Ġ" AS R " Ġ&& Ġrequest . name Ġ== Ġ" Recognize ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġdirective Se qu encer . add On Directive Handling Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirective Se qu encer Interface . On Directive Handling Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Requested ( directive : ĠDirective ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed ( directive : ĠDirective ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( directive . getName space () Ġ== Ġ" AS R " Ġ&& Ġdirective . getName () Ġ== Ġ" Expect Speech ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" pause Ġroutine Ġby ĠAS R . Expect Speech Ġdirective ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġrequest Ġis Ġcaused Ġby Ġthe Ġcurrent Ġaction , Ġdo Ġnot Ġcancel Ġcurrent Ġaction . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pause ( directive . get Dialog RequestId () Ġ!= Ġcurrent Routine Request ?. current Action Dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Canceled ( directive : ĠDirective ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed ( directive : ĠDirective , Ġdescription : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġdirective Group Processor . addListener ( object Ġ: ĠDirective Group Processor Interface . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Processed ( directives : ĠList < Directive >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectives . first OrNull ()?. get Dialog RequestId ()?. let Ġ{ Ġdialog RequestId Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ca using Pause Requests . remove ( dialog RequestId ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! directives . any Ġ{ Ġit . getName space And Name () Ġ== ĠContinue Directive Handler . CONTINUE Ġ|| Ġ( it . getName space () Ġ== Ġ" AS R " Ġ&& Ġit . getName () Ġ== Ġ" Notify Result ") Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprovide State ( ĊĠĠĠĠĠĠĠ Ġcontext Setter : ĠContext Setter Interface , ĊĠĠĠĠĠĠĠ Ġnamespace And Name : ĠNamespace And Name , ĊĠĠĠĠĠĠĠ Ġcontext Type : ĠContext Type , ĊĠĠĠĠĠĠĠ Ġstate Request Token : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ provide State ] Ġnamespace And Name : Ġ$ namespace And Name , Ġcontext Type : Ġ$ context Type , Ġstate Request Token : Ġ$ state Request Token " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext Setter . setState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace And Name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState Context ( getContext ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState Refresh Policy . ALWAYS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Request Token ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart ( directive : ĠStart Directive Handler . Start Directive ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ start ] Ġ$ directive ") ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcurrent Routine Request ĊĠĠĠĠĠĠĠ Ġif Ġ( request Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ start ] Ġalready Ġstarted Ġroutine Ġexist , Ġso Ġtry Ġcancel Ġit .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Agent ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount DownLatch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRout ine Request ( directive , Ġobject Ġ: ĠRout ine RequestListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancel () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ start ] Ġon Cancel () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠRout ine Agent Interface . State . STOP PED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse am less Focus Manager . cancel ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Routine Stop Event ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Stopped ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ start ] Ġon Finish () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠRout ine Agent Interface . State . FINISHED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse am less Focus Manager . cancel ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Routine Finish Event ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Finished ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev State Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠRout ine Agent Interface . State . PLAY ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Playing ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Manager . getContext ( object Ġ: ĠIgnore Error Context Request or () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Context ( json Context : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Sender . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Message Request . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNAMES PACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Started ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVERSION . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). payload ( JsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" play Service Id ", Ġdirective . payload . play Service Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. referrer Dialog RequestId ( directive . header . dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). enqueue ( object Ġ: ĠMessage Sender . Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( request : ĠMessage Request , Ġstatus : ĠStatus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġprev State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( request : ĠMessage Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response Start ( request : ĠMessage Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse am less Focus Manager . prepare ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġnamespace And Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Routine Request Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfailed ( directive : ĠStart Directive Handler . Start Directive , ĠerrorMessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ failed ] Ġ$ directive ") ĊĠĠĠĠĠĠĠ Ġsend Routine Failed Event ( directive . payload . play Service Id , ĠerrorMessage , Ġdirective . header . dialog RequestId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Routine Failed Event ( play Service Id : ĠString , ĠerrorMessage : ĠString , Ġref errer Dialog RequestId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Manager . getContext ( object Ġ: ĠIgnore Error Context Request or () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Context ( json Context : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Sender . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Message Request . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNAMES PACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEVENT _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVERSION . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). payload ( JsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" play Service Id ", Ġplay Service Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" errorMessage ", ĠerrorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. referrer Dialog RequestId ( referrer Dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). enqueue ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġnamespace And Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Routine Stop Event ( directive : ĠStart Directive Handler . Start Directive ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ send Routine Stop Event ]") ĊĠĠĠĠĠĠĠ Ġcontext Manager . getContext ( object Ġ: ĠIgnore Error Context Request or () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Context ( json Context : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Sender . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Message Request . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNAMES PACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Stopped ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVERSION . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). payload ( JsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" play Service Id ", Ġdirective . payload . play Service Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. referrer Dialog RequestId ( directive . header . dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). enqueue ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġnamespace And Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Routine Finish Event ( directive : ĠStart Directive Handler . Start Directive ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ send Routine Finish Event ]") ĊĠĠĠĠĠĠĠ Ġcontext Manager . getContext ( object Ġ: ĠIgnore Error Context Request or () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Context ( json Context : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Sender . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Message Request . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNAMES PACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Finished ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVERSION . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). payload ( JsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Property (" play Service Id ", Ġdirective . payload . play Service Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. referrer Dialog RequestId ( directive . header . dialog RequestId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). enqueue ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġnamespace And Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ( directive : ĠStop Directive Handler . Stop Directive ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ stop ] Ġ$ directive ") ĊĠĠĠĠĠĠĠ Ġreturn Ġstop Internal ( directive . payload . token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdo Continue ( directive : ĠContinue Directive Handler . Continue Directive ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ do Continue ] Ġ$ directive , Ġ$ ca using Pause Requests ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġcancel Ġdo Continue Ġif Ġpaused Ġby Ġanother Ġrequest . ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ca using Pause Requests . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresume Internal ( directive . payload . token ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfailed ( ĊĠĠĠĠĠĠĠ Ġdirective : ĠContinue Directive Handler . Continue Directive , ĊĠĠĠĠĠĠĠ ĠerrorMessage : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ failed ] Ġ$ directive ") ĊĠĠĠĠĠĠĠ Ġsend Routine Failed Event ( directive . payload . play Service Id , ĠerrorMessage , Ġdirective . header . dialog RequestId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresume Internal ( token : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcommand Internal ( token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . do Continue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpause Internal ( token : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcommand Internal ( token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Internal ( token : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcommand Internal ( token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcommand Internal ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcommand : Ġ( request : ĠRout ine Request ) Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcurrent Routine Request ĊĠĠĠĠĠĠĠ Ġif Ġ( request Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . directive . payload . token Ġ== Ġtoken ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Rendered ( template Id : ĠString , Ġdialog RequestId : ĠString ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared ( template Id : ĠString , Ġdialog RequestId : ĠString , Ġcanceled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( c anceled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Routine Request ?. cancel If Current Routine Display Cle ared ( dialog RequestId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetState (): ĠRout ine Agent Interface . State Ġ= Ġstate ĊĠĠĠ Ġoverride Ġfun ĠgetContext (): ĠRout ine Agent Interface . Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcurrent Routine Request ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( request Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRout ine Agent Interface . Context ( null , Ġstate , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRout ine Agent Interface . Context ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . directive . payload . token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . getCurrent Action Index () Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . directive . payload . actions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( listener : ĠRout ine Agent Interface . Routine Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Listener ( listener : ĠRout ine Agent Interface . Routine Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresume ( directive : ĠStart Directive Handler . Start Directive ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ resume ] Ġ$ directive ") ĊĠĠĠĠĠĠĠ Ġreturn Ġresume Internal ( directive . payload . token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause ( directive : ĠStart Directive Handler . Start Directive ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ pause ] Ġ$ directive ") ĊĠĠĠĠĠĠĠ Ġreturn Ġpause Internal ( directive . payload . token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ( directive : ĠStart Directive Handler . Start Directive ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ stop ] Ġ$ directive ") ĊĠĠĠĠĠĠĠ Ġreturn Ġstop Internal ( directive . payload . token ) ĊĠĠĠ Ġ} Ċ }