package Ġcom . kr ill sson . sys api . core . connectivity Ċ Ċ import Ġcom . kr ill sson . sys api . client . External IpAddress Service Ċ import Ġcom . kr ill sson . sys api . config . Connectivity Check Configuration Ċ import Ġcom . kr ill sson . sys api . core . domain . network . Connectivity Ċ import Ġcom . kr ill sson . sys api . persistence . KeyValue Repository Ċ import Ġcom . kr ill sson . sys api . util . Ticker Ċ Ċ class ĠConnect ivity Check Manager ( ĊĠĠĠ Ġprivate Ġval Ġexternal IpAddress Service : ĠExternal IpAddress Service , ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠKey Value Repository , ĊĠĠĠ Ġprivate Ġval Ġconnectivity Check Configuration : ĠConnect ivity Check Configuration Ċ ) Ġ: ĠT icker . Tick Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ connectivity : ĠConnect ivity Ġ= Ġdefault Connectivity ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( connectivity Check Configuration . enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ connectivity Ġ= Ġresolve Connectivity () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Connectivity (): ĠConnect ivity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexternal IpAddress Service . get My Ip (). execute () ĊĠĠĠĠĠĠĠ Ġval Ġstored External Ip Ġ= Ġrepository . get ( external Ip Store Key ) ĊĠĠĠĠĠĠĠ Ġval Ġstored Previous External Ip Ġ= Ġrepository . get ( previous External Ip Key ) ĊĠĠĠĠĠĠĠ Ġval Ġnew External Ip Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( response . is Successful Ġ&& Ġnew External Ip Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Ip Ġ= Ġif Ġ( stored External Ip Ġ!= Ġnull Ġ&& Ġstored External Ip Ġ!= Ġnew External Ip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . put ( previous External Ip Key , Ġstored Previous External Ip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstored External Ip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstored Previous External Ip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . put ( external Ip Store Key , Ġnew External Ip ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Ip Ġ= Ġnew External Ip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious External Ip Ġ= Ġprevious Ip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnect ivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Ip Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious External Ip Ġ= Ġstored External Ip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Connectivity () Ġ= Ġ_ connectivity ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġexternal Ip Store Key Ġ= Ġ" external Ip " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġprevious External Ip Key Ġ= Ġ" previous External Ip " ĊĠĠĠĠĠĠĠ Ġval Ġdefault Connectivity Ġ= ĠConnect ivity ( null , Ġnull , Ġfalse ) ĊĠĠĠ Ġ} Ċ }