package Ġ` in `. dragon bra . vap ull a . util Ċ Ċ import Ġ` in `. dragon bra . jav aste am . enums . E Person a State Ċ import Ġ` in `. dragon bra . jav aste am . enums . E Person a State Flag Ċ import Ġ` in `. dragon bra . jav aste am . steam . handlers . steam friends . Person a State Ċ import Ġ` in `. dragon bra . jav aste am . types . Steam ID Ċ import Ġ` in `. dragon bra . vap ull a . data . dao . Steam Friend Dao Ċ import Ġ` in `. dragon bra . vap ull a . data . entity . Steam Friend Ċ import Ġorg . jetbrains . ank o . An ko Logger Ċ import Ġorg . jetbrains . ank o . info Ċ import Ġorg . sp ong ycastle . util . en coders . Hex Ċ import Ġjava . util .* Ċ Ċ class ĠPerson a State Buffer ( val Ġsteam Friend Dao : ĠSteam Friend Dao ) Ġ: ĠAn ko Logger Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmap : ĠMutable Map < Steam ID , ĠPerson a State > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġprivate Ġval Ġmap Lock : ĠAny Ġ= ĠAny () ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġis Running Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġthread : ĠRunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġinfo (" starting Ġperson a Ġstate Ġbuffer Ġthread ") ĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinfo (" stopping Ġperson a Ġstate Ġbuffer Ġthread ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush ( state : ĠPerson a State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( map Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map . contains ( state . friend ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġmap [ state . friend ID ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . state Ġ!= ĠE Person a State . Offline Ġ|| Ġstate . last Log Off Ġ> Ġold ?. last Log Off ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ state . friend ID ] Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ state . friend ID ] Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfriends ToUpdate : ĠMutable List < Steam Friend > Ġ= ĠLinkedList () ĊĊĠĠĠĠĠĠĠ Ġsynchronized ( map Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġit . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfriend Ġ= Ġsteam Friend Dao . find ( id . convertTo UInt 6 4 ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( friend Ġ!= Ġnull Ġ&& Ġ( state . state Ġ!= ĠE Person a State . Offline Ġ|| Ġstate . last Log Off . time Ġ> Ġfriend . last Log Off )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavatar Hash Ġ= ĠHex . to HexString ( state . avatar Hash ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . name Ġ= Ġstate . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . avatar Ġ= Ġavatar Hash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . state Ġ= Ġstate . state . code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . game Name Ġ= Ġstate . game Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . game AppId Ġ= Ġstate . game App ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . last Log On Ġ= Ġstate . last Log On . time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . last Log Off Ġ= Ġstate . last Log Off . time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend . state Flags Ġ= ĠE Person a State Flag . code ( state . state Flags ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriends ToUpdate . add ( friend ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsteam Friend Dao . insert (* friends ToUpdate . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ ĠThread ( thread , Ġ" Person a State Buffer Thread "). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ }