package Ġorg . el k oser ver . server . presence . universal Ċ Ċ import Ġcom . gr ack . nano json . JsonObject Ċ import Ġorg . el k oser ver . foundation . json . Random Using Object Ċ import Ġorg . el k oser ver . json . get Optional Int Ċ import Ġorg . el k oser ver . server . presence . Active User Ċ import Ġorg . el k oser ver . server . presence . Domain Ċ import Ġorg . el k oser ver . server . presence . Presence Server Ċ import Ġorg . el k oser ver . server . presence . Social Graph Ċ import Ġorg . el k oser ver . util . trace . slf 4 j . G or gel Ċ import Ġjava . util . Random Ċ Ċ /** Ċ Ġ* ĠSocial Ġgraph Ġbased Ġon Ġthe Ġnot ion Ġthat Ġevery body Ġis Ġconnected Ġto Ġevery body Ċ Ġ* Ġelse . Ġ ĠSo Ġwe Ġdon 't Ġneed Ġto Ġactually Ġstore Ġanything , Ġbut Ġcan Ġdynamically Ċ Ġ* Ġiterate Ġa Ġuser 's Ġfriends : Ġa Ġuser 's Ġfriends Ġwho Ġare Ġonline Ġat Ġany Ġgiven Ċ Ġ* Ġmoment Ġare Ġall Ġusers Ġwho Ġare Ġonline . Ċ Ġ* Ċ Ġ* ĠIn Ġorder Ġto Ġthrottle Ġthe Ġmass ive Ġnumbers Ġof Ġpresence Ġupdates Ġthat Ġwill Ġbe Ċ Ġ* Ġgenerated Ġwhen Ġlots Ġof Ġusers Ġare Ġonline Ġat Ġonce , Ġthis Ġgraph Ġalso Ġsupports Ġa Ċ Ġ* Ġst och astic Ġfilter Ġthat Ġrandomly Ġexclude s Ġusers Ġaccording Ġto Ġa Ġt unable Ċ Ġ* Ġparameter . Ċ Ġ*/ Ċ internal Ġclass ĠUniversal Graph Ġ: ĠSocial Graph , ĠRandom Using Object Ġ{ ĊĠĠĠ Ġ/** ĠThe Ġpresence Ġserver Ġl ording Ġover Ġus . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmy Master : ĠPres ence Server ĊĊĠĠĠ Ġ/** ĠThe Ġdomain Ġthis Ġgraph Ġdescribes . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmy Domain : ĠDomain ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmy Random : ĠRandom ĊĊĠĠĠ Ġoverride Ġfun Ġset Random ( random : ĠRandom ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Random Ġ= Ġrandom ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠNumber Ġof Ġpseudo - friends Ġsomeone Ġhas , Ġfor Ġth rottling . Ġ ĠA Ġnegative ĊĠĠĠĠ Ġ* Ġvalue Ġis Ġun th rott led . Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġmy Pseudo Friend Count Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġinit ( master : ĠPres ence Server , Ġgor gel : ĠG or gel , Ġdomain : ĠDomain , Ġconf : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Master Ġ= Ġmaster ĊĠĠĠĠĠĠĠ Ġmy Domain Ġ= Ġdomain ĊĠĠĠĠĠĠĠ Ġmy Pseudo Friend Count Ġ= Ġconf . get Optional Int (" friends ", Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġgor gel . i ?. run Ġ{ Ġinfo (" init ĠUniversal Graph Ġfor Ġdomain Ġ'${ domain . name }' ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObtain Ġthe Ġdomain Ġthat Ġthis Ġsocial Ġgraph Ġdescribes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġsocial Ġgraph 's Ġdomain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdomain () Ġ= Ġmy Domain ĊĊĠĠĠ Ġprivate Ġclass ĠUser Filter Ġ: ĠFiltering Iterator . Filter < Active User , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtransform ( from : ĠActive User ) Ġ= Ġfrom . ref ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠP seudo Friend Filter < V >( base : ĠIterator < V >, Ġprivate Ġval Ġmy Ex clusion : ĠV ) Ġ: ĠEx cluding Iterator < V >( base ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmy Sto chastic Friend ship O dds Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Pseudo Friend Count Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Count Ġ= Ġmy Master . user Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Count Ġ< Ġmy Pseudo Friend Count ) Ġ 1 . 0 f Ġelse Ġmy Pseudo Friend Count . toFloat () Ġ/ Ġuser Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġis Excluded ( element : ĠV ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ== Ġmy Ex clusion Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 f Ġ<= Ġmy Sto chastic Friend ship O dds Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmy Random . next Float () Ġ< Ġmy Sto chastic Friend ship O dds ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFetch Ġthe Ġsocial Ġgraph Ġfor Ġa Ġnew Ġuser Ġpresence Ġfrom Ġthe Ġobject Ġstore . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġuser Ġ ĠThe Ġuser Ġwhose Ġsocial Ġgraph Ġshould Ġbe Ġfetched . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġload User Graph ( user : ĠActive User ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfriends Ġ= ĠIterable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP seudo Friend Filter ( Filtering Iterator ( my Master . users (). iterator (), ĠUser Filter ()), Ġuser . ref ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġuser . user Graph Is Ready ( friends , Ġmy Domain , Ġmy Master ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshut Down () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġupdate ( master : ĠPres ence Server , Ġdomain : ĠDomain , Ġconf : ĠJsonObject ) Ġ{} Ċ } Ċ