/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 Ġ- Ġpresent Ġ 8 x 8 , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . j its i . video bridge . health Ċ Ċ import Ġorg . ice 4 j . ice . har vest . Mapping Candidate Har vest ers Ċ import Ġorg . j its i . health . HealthCheck Service Ċ import Ġorg . j its i . health . Health Checker Ċ import Ġorg . j its i . video bridge . Conference Ċ import Ġorg . j its i . video bridge . health . config . Health Config Ċ import Ġorg . j its i . video bridge . ice . Har vest ers Ċ import Ġorg . j its i . video bridge . s ctp . S ctp Config Ċ import Ġorg . j its i . video bridge . video bridge Supplier Ċ Ċ class ĠJ vb Health Checker Ġ: ĠHealth Check Service Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvideo bridge Ġ= Ġvideo bridge Supplier . get () ĊĠĠĠ Ġprivate Ġval Ġconfig Ġ= ĠHealth Config () ĊĠĠĠ Ġprivate Ġval Ġhealth Checker Ġ= ĠHealth Checker ( ĊĠĠĠĠĠĠĠ Ġconfig . interval , ĊĠĠĠĠĠĠĠ Ġconfig . timeout , ĊĠĠĠĠĠĠĠ Ġconfig . max Check Duration , ĊĠĠĠĠĠĠĠ Ġconfig . sticky Failures , ĊĠĠĠĠĠĠĠ Ġhealth Check Func Ġ= Ġ:: check ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġstart () Ġ= Ġhealth Checker . start () ĊĠĠĠ Ġfun Ġstop () Ġ= Ġhealth Checker . stop () ĊĊĠĠĠ Ġprivate Ġfun Ġcheck () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Mapping Candidate Har vest ers . st un Discovery Failed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Address Ġdiscovery Ġthrough ĠST UN Ġfailed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! Har vest ers . is Health y ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Failed Ġto Ġbind Ġsingle - port ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġcheck Ġif ĠX mpp Connection Ġis Ġconfigured Ġand Ġconnected . ĊĊĠĠĠĠĠĠĠ Ġval Ġconference Ġ= Ġvideo bridge . create Conference ( null , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Conference ( conference ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo bridge . expire Conference ( conference ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Result (): ĠException ? Ġ= Ġhealth Checker . result ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġep Id : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfun Ġcheck Conference ( conference : ĠConference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Endpoints Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( num Endpoints ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġice Cont rolling Ġ= Ġindex Ġ% Ġ 2 Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= Ġconference . create Local Endpoint ( ep Id ++. toString (), Ġice Cont rolling ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( S ctp Config . config . enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint . create S ctp Connection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNOTE ( b rian ): ĠWe Ġcan 't Ġattempt Ġan ĠI CE Ġconnection Ġbetween Ġthe Ġendpoints Ġin Ġsingle - port Ġmode . Ġ ĠI Ġthink ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġbecause Ġboth Ġagents Ġbind Ġto Ġthe Ġsingle Ġport Ġand Ġwe Ġcan 't Ġdem ux Ġthe Ġice Ġpackets Ġcorrectly . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ