package Ġcom . s usion . rabbit . storage Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . s usion . rabbit . base . Rabbit Monitor Protocol Ċ import Ġcom . s usion . rabbit . base . common . Rabbit Async Ċ import Ġcom . s usion . rabbit . base . common . Rabbit Utils Ċ import Ġcom . s usion . rabbit . base . config . Rabbit Storage Config Ċ import Ġcom . s usion . rabbit . base . entities .* Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġorg . green robot . gre end ao . Property Ċ import Ġjava . util . concurrent . Linked Blocking Deque Ċ import Ġjava . util . concurrent . Thread Factory Ċ import Ġjava . util . concurrent . ThreadPoolExecutor Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* Ġs usion wang Ġat Ġ 2 0 1 9 - 1 0 - 1 2 Ċ Ġ* Ġ æķ°æį®åºĵ åŃĺåĤ¨ æĵįä½ľ ç±» Ċ Ġ*/ Ċ object ĠRabbit Storage Ġ{ ĊĊĠĠĠ Ġvar Ġm Config Ġ= ĠRabbit Storage Config () ĊĠĠĠ Ġprivate Ġvar Ġevent Listeners Ġ= ĠArrayList < EventListener >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm App : ĠApplication ĊĠĠĠ Ġprivate Ġval Ġdis posable List Ġ= ĠArrayList < Disposable >() ĊĠĠĠ Ġprivate Ġval ĠDB _ THREAD Ġ= ĠThreadPool Executor ( 5 , Ġ 1 0 , Ġ 1 0 , ĠTimeUnit . SECONDS , ĠLinked Blocking Deque (), ĊĠĠĠĠĠĠĠ ĠThread Factory Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( r , Ġ" rabbit _ db _ manager _ thread ${ System . currentTimeMillis () }") ĊĠĠĠĠĠĠĠ Ġ}). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġallow Core Thread TimeOut ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgreen Dao Db Manage Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠRabbit Green Dao Db Manage ( m App , Ġm Config . green Dao Provider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( application : ĠApplication , Ġconfig : ĠRabbit Storage Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm App Ġ= Ġapplication ĊĠĠĠĠĠĠĠ Ġm Config Ġ= Ġconfig ĊĊĠĠĠĠĠĠĠ Ġ// one Ġsession Ġ åŃĺåľ¨ çļĦæķ°æį® ĊĠĠĠĠĠĠĠ ĠRabbit Async . async Run ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Config . storage In One Session Data . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . clear ( Rabbit Utils . name To Info Class ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĠDB _ THREAD ) ĊĊĠĠĠĠĠĠĠ Ġ// è¶ħ åĩº æľĢå¤§ éĻĲåĪ¶ çļĦæķ°æį® ĊĠĠĠĠĠĠĠ Ġfor Ġ( info Ġin Ġm Config . data Max Save Count Limit . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjclass Ġ= ĠRabbit Utils . name To Info Class ( info . key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Count Ġ= Ġgreen Dao Db Manage . count ( j class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Count Ġ> Ġinfo . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . clear ( j class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRabbit Info Protocol > ĠgetAll ( ĊĠĠĠĠĠĠĠ Ġkt Class : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġcondition : ĠPair < Property , ĠAny >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsort Field : ĠString Ġ= ĠRabbit Info Protocol . PROPER T ITY _ TIME , ĊĠĠĠĠĠĠĠ Ġcount : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġorder Desc : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġload Result : Ġ( exception List : ĠList < T >) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRabbit Async . async RunWith Result ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . get Datas ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkt Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition ?. first ?. eq ( condition . second ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Desc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĠDB _ THREAD , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Result ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRabbit Info Protocol > ĠgetAll Sync ( ĊĠĠĠĠĠĠĠ Ġkt Class : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġcondition : ĠPair < Property , ĠString >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsort Field : ĠString Ġ= ĠRabbit Info Protocol . PROPER T ITY _ TIME , ĊĠĠĠĠĠĠĠ Ġcount : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġorder Desc : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgreen Dao Db Manage . get Datas ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkt Class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcondition ?. first ?. eq ( condition . second ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Field , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Desc ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( obj : ĠRabbit Info Protocol ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis Ġ= ĠRabbit Async . async Run ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . save ( obj ) ĊĠĠĠĠĠĠĠ Ġ}, ĠDB _ THREAD , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify EventListener New Data Save ( obj ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġdis posable List . add ( dis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Sync ( obj : ĠRabbit Info Protocol ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . save ( obj ) ĊĠĠĠĠĠĠĠ Ġnotify EventListener New Data Save ( obj ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRabbit Info Protocol > Ġquery Sync ( clazz : ĠClass < T >, Ġid : ĠLong ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgreen Dao Db Manage . query ( clazz , Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġclear ( clazz : ĠClass < T >) Ġ{ ĊĠĠĠĠĠĠĠ ĠRabbit Async . async Run ({ Ġgreen Dao Db Manage . clear ( clazz ) Ġ}, ĠDB _ THREAD ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġdelete ( clazz : ĠClass < T >, Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRabbit Async . async Run ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . delete ( clazz , Ġid ) ĊĠĠĠĠĠĠĠ Ġ}, ĠDB _ THREAD ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRabbit Info Protocol > Ġdelete ( clazz : ĠClass < T >, Ġcondition : ĠPair < Property , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ ĠRabbit Async . async Run ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . delete ( clazz , Ġcondition . first . eq ( condition . second )) ĊĠĠĠĠĠĠĠ Ġ}, ĠDB _ THREAD ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġtotal Count ( clazz : ĠClass < T >): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgreen Dao Db Manage . count ( clazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRabbit Info Protocol > Ġdistinct ( ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass < T >, ĊĠĠĠĠĠĠĠ ĠcolumnName : ĠString , ĊĠĠĠĠĠĠĠ Ġload Result : Ġ( result : ĠList < String >) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRabbit Async . async RunWith Result ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . distinct ( clazz , ĠcolumnName ) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Result ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRabbit Info Protocol > Ġupdate OrCreate ( ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġobj : ĠRabbit Info Protocol , ĊĠĠĠĠĠĠĠ Ġid : ĠLong ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRabbit Async . async Run ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Dao Db Manage . update ( clazz , Ġobj , Ġid ) ĊĠĠĠĠĠĠĠ Ġ}, ĠDB _ THREAD ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠEvent Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Storage Data ( obj : ĠAny ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Data By Monitor Name ( monitor Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( monitor Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . APP _ SPEED . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit App Start Speed Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit Page Speed Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . EXCEPTION . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit Exception Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . MEMORY . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit Memory Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . S LOW _ METHOD . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit Slow MethodInfo :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . NET . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit Http Log Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . BLOCK _ CALL . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit Io Call Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . GLOBAL _ MONITOR . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit App Performance Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Monitor Protocol . BLOCK . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( Rabbit Block Frame Info :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear All Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . APP _ SPEED . name ) ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . EXCEPTION . name ) ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . MEMORY . name ) ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . S LOW _ METHOD . name ) ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . NET . name ) ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . BLOCK _ CALL . name ) ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . GLOBAL _ MONITOR . name ) ĊĠĠĠĠĠĠĠ Ġclear Data By Monitor Name ( Rabbit Monitor Protocol . BLOCK . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify EventListener New Data Save ( obj : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Listeners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Storage Data ( obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd EventListener ( event Listener : ĠEvent Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Listeners . add ( event Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove EventListener ( event Listener : ĠEvent Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Listeners . remove ( event Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }