package Ġio . def itr ack . polygon m um ba i . config Ċ Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . context . annotation . Primary Ċ import Ġorg . web 3 j . protocol . Web 3 j Ċ import Ġorg . web 3 j . protocol . http . Http Service Ċ import Ġorg . web 3 j . protocol . websocket . WebSocket Client Ċ import Ġorg . web 3 j . protocol . websocket . WebSocket Service Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . URI Ċ import Ġjava . util . concurrent . Scheduled ThreadPoolExecutor Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Configuration Ċ class ĠPolygon M um ba i Web 3 j Configurer (@ Value ("\ ${ io . def itr ack . polygon - m um ba i . endpoint . url }") Ġprivate Ġval Ġendpoint : ĠString ) Ġ{ ĊĊĊĠĠĠ Ġprotected Ġvar Ġweb Socket Client : ĠWebSocket Client ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Polygon M um ba i Web 3 j Configurer :: class . java ) ĊĊĠĠĠ Ġfun Ġass ure Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Client ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . reconnect Blocking () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Unable Ġto Ġreconnect Ġto Ġwebsocket ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Primary ĊĠĠĠ Ġ@ Bean (" polygon M um ba i Web 3 j ") ĊĠĠĠ Ġ@ Throws ( Connect Exception :: class ) ĊĠĠĠ Ġfun Ġe thereum Web 3 j (): ĠWeb 3 j Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( endpoint . startsWith (" ws ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . web Socket Client Ġ= ĠWebSocket Client ( URI . create ( endpoint )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb Socket Service Ġ= ĠWebSocket Service ( web Socket Client , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Service . connect ({ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" An Ġerror Ġoccurred Ġin Ġsecondary Ġwebsocket ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġass ure Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Websocket Ġconnection Ġclosed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeb 3 j . build ( web Socket Service ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . connect Timeout ( 2 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . write Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . read Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . call Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Service Ġ= ĠHttp Service ( endpoint , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWeb 3 j . build ( http Service , Ġ 5 L , ĠScheduled ThreadPoolExecutor ( 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }