/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġ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 . core . input processor Ċ Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . directive . Directive Group Processor Interface Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . input processor . Input Processor Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . input processor . Input Processor Manager Interface Ċ import Ġcom . sk t . n ugu . sdk . core . interfaces . message . Directive Ċ import Ġcom . sk t . n ugu . sdk . core . utils . Logger Ċ import Ġjava . util . concurrent .* Ċ Ċ class ĠInput Processor Manager ( private Ġval Ġtimeout In Milli Seconds : ĠLong Ġ= Ġ 1 0 Ġ* Ġ 1 0 0 0 L ) Ġ: ĠInput Processor Manager Interface , ĠDirective Group Processor Interface . Listener Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Input Processor Manager " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġresponse Timeout Listeners Ġ= ĠHashSet < Input Processor Manager Interface . On Response Timeout Listener >() ĊĠĠĠ Ġprivate Ġval Ġrequests Ġ= ĠConcurrent HashMap < String , ĠInput Processor >() ĊĠĠĠ Ġprivate Ġval Ġtimeout Future Map Ġ= ĠConcurrent HashMap < String , ĠScheduled Future <* >>() ĊĠĠĠ Ġprivate Ġval Ġtimeout Scheduler Ġ= ĠExec utors . new Single Thread Scheduled Executor () ĊĊĠĠĠ Ġoverride Ġfun Ġon Post Processed ( directives : ĠList < Directive >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog RequestId Ġ= Ġdirectives . first OrNull ()?. header ?. dialog RequestId Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġreceive Response Ġ= Ġrequests [ dialog RequestId ]?. on Receive Directives ( dialog RequestId , Ġdirectives ) Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif ( receive Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog RequestId . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout Future Map [ it ]?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout Future Map . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( receive Response Ġ&& Ġ! dialog RequestId . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequests . remove ( dialog RequestId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Requested ( input Processor : ĠInput Processor , Ġdialog RequestId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ on Requested ] Ġ$ input Processor , Ġ$ dialog RequestId ") ĊĠĠĠĠĠĠĠ Ġrequests [ dialog RequestId ] Ġ= Ġinput Processor ĊĠĠĠĠĠĠĠ Ġtimeout Future Map [ dialog RequestId ]?. cancel ( true ) ĊĠĠĠĠĠĠĠ Ġtimeout Future Map [ dialog RequestId ] Ġ= Ġtimeout Scheduler . schedule ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response Timeout ( input Processor , Ġdialog RequestId ) ĊĠĠĠĠĠĠĠ Ġ}, Ġtimeout In Milli Seconds , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Response Timeout ( input Processor : ĠInput Processor , Ġdialog RequestId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ"[ on Response Timeout ] Ġ$ input Processor , Ġ$ dialog RequestId ") ĊĠĠĠĠĠĠĠ Ġrequests . remove ( dialog RequestId ) ĊĠĠĠĠĠĠĠ Ġtimeout Future Map . remove ( dialog RequestId ) ĊĠĠĠĠĠĠĠ Ġinput Processor . on Response Timeout ( dialog RequestId ) ĊĠĠĠĠĠĠĠ Ġresponse Timeout Listeners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Response Timeout ( dialog RequestId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Response Timeout Listener ( listener : ĠInput Processor Manager Interface . On Response Timeout Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresponse Timeout Listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Response Timeout Listener ( listener : ĠInput Processor Manager Interface . On Response Timeout Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresponse Timeout Listeners . remove ( listener ) ĊĠĠĠ Ġ} Ċ }