/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠMix tape Bot Ġand ĠContributors Ċ Ġ* Ċ Ġ* Ġ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 Ġob sid ian . server . util Ċ Ċ import Ġcom . github . n atan bc . lav ad sp . n atives . Time scale Native Lib Loader Ċ import Ġcom . github . n atan bc . native loader . Native Lib Loader Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġcom . sed mell uq . discord . lav ap layer . n atives . Connector Native Lib Loader Ċ Ċ /** Ċ Ġ* ĠBased Ġon Ġhttps :// github . com / n atan bc / ande site / blob / master / src / main / java / ande site / util / Native Utils . java Ċ Ġ* Ċ Ġ* Ġi Ġwant Ġnative Ġstuff Ġtoo Ġ: '( Ċ Ġ*/ Ċ Ċ object ĠNative Util Ġ{ ĊĠ Ġvar Ġtime scale Available : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ/* Ġprivate Ġsh it Ġ*/ ĊĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Native Util :: class . java ) ĊĊĠ Ġ// Ġload ers ĊĠ Ġprivate Ġval ĠCON NE CTOR _ LOAD ER : ĠNative Lib Loader Ġ= ĠNative Lib Loader . create ( Native Util :: class . java , Ġ" connector ") ĊĊĠ Ġ// Ġclass Ġnames ĊĠ Ġprivate Ġconst Ġval ĠLOAD _ RESULT _ NAME Ġ= Ġ" com . sed mell uq . l ava . common . n atives . Native Library Loader \$ Load Result " ĊĊĠ Ġprivate Ġvar ĠLOAD _ RESULT : ĠAny ? Ġ= Ġtry Ġ{ ĊĠĠĠ Ġval Ġctor Ġ= ĠClass . forName ( LOAD _ RESULT _ NAME ) ĊĠĠĠĠĠ Ġ. getDeclared Constructor ( Boolean :: class . java Primitive Type , ĠRuntimeException :: class . java ) ĊĊĠĠĠ Ġctor . is Accessible Ġ= Ġtrue ĊĠĠĠ Ġctor . newInstance ( true , Ġnull ) ĊĠ Ġ} Ġcatch Ġ( e : ĠReflect ive OperationException ) Ġ{ ĊĠĠĠ Ġlogger . error (" Unable Ġto Ġcreate Ġsuccessful Ġload Ġresult "); ĊĠĠĠ Ġnull ; ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠLoads Ġnative Ġlibrary Ġsh it ĊĠĠ Ġ*/ ĊĠ Ġfun Ġload () Ġ{ ĊĠĠĠ Ġload Connector () ĊĠĠĠ Ġtime scale Available Ġ= Ġload Time scale () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠLoads Ġthe Ġtime scale Ġlibraries ĊĠĠ Ġ*/ ĊĠ Ġfun Ġload Time scale (): ĠBoolean Ġ= Ġtry Ġ{ ĊĠĠĠ ĠTime scale Native Lib Loader . load Time scale Library () ĊĠĠĠ Ġlogger . info (" Time scale Ġloaded ") ĊĠĠĠ Ġtrue ĊĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠ Ġlogger . warn (" Time scale Ġfailed Ġto Ġload ", Ġex ) ĊĠĠĠ Ġfalse ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠLoads Ġthe Ġlp - cross Ġversion Ġof Ġl av ap layer 's Ġloader ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġload Connector () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠCON NE CTOR _ LOAD ER . load () ĊĊĠĠĠĠĠ Ġval Ġload ers Field Ġ= ĠConnector Native Lib Loader :: class . java . getDeclared Field (" loaders ") ĊĠĠĠĠĠ Ġload ers Field . is Accessible Ġ= Ġtrue ĊĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġw tf Ġn atan ĊĠĠĠĠĠĠĠ Ġmark Loaded ( java . lang . reflect . Array . get ( loaders Field . get ( null ), Ġi )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġlogger . info (" Connector Ġloaded ") ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġlogger . error (" Connected Ġfailed Ġto Ġload ", Ġex ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġmark Loaded ( loader : ĠAny ) Ġ{ ĊĠĠĠ Ġval Ġprevious Result Field Ġ= Ġloader . java Class . getDeclared Field (" previous Result ") ĊĠĠĠ Ġprevious Result Field . is Accessible Ġ= Ġtrue ĊĠĠĠ Ġprevious Result Field [ loader ] Ġ= ĠLOAD _ RESULT ĊĠ Ġ} Ċ } Ċ