/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġd ork box , Ġl lc Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 8 , ĠN athan ĠS weet Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ċ Ġ* Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ- ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ġ- ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ċ Ġ* Ġdisclaimer Ġin Ġthe Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ġ- ĠNeither Ġthe Ġname Ġof ĠEs ot eric ĠSoftware Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ċ Ġ* Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , Ċ Ġ* ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT Ċ Ġ* ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL Ċ Ġ* ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING Ċ Ġ* ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġd ork box . network . rmi . messages Ċ Ċ import Ġcom . es ot eric software . k ry o . K ry o Ċ import Ġcom . es ot eric software . k ry o . Serializer Ċ import Ġcom . es ot eric software . k ry o . io . Input Ċ import Ġcom . es ot eric software . k ry o . io . Output Ċ import Ġd ork box . network . connection . Connection Ċ import Ġd ork box . network . rmi . Remote Object Storage Ċ import Ġd ork box . network . rmi . R mi Manager Connections Ċ import Ġd ork box . network . serialization . K ry o Extra Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġto Ġmanage Ġserial izing ĠR MI Ġobjects Ġacross Ġthe Ġwire ... Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġwhen Ġthe ĠR MI Ġserver Ġsends Ġan Ġimpl Ġobject Ġto Ġa Ġclient , Ġthe Ġclient Ġmust Ġreceive Ġa Ġproxy Ġobject Ġ( instead Ġof Ġthe Ġimpl Ġobject ) Ċ Ġ* Ċ Ġ* ĠNOTE : Ċ Ġ* ĠĠ ĠCLIENT : Ġcan Ġnever Ġsend Ġthe Ġiface Ġobject , Ġif Ġit 's ĠR MI , Ġit Ġwill Ġsend Ġthe Ġjava ĠProxy Ġobject Ġinstead . Ċ Ġ* ĠĠ ĠSERVER : Ġcan Ġnever Ġsend Ġthe Ġiface Ġobject , Ġit Ġwill Ġalways Ġsend Ġthe ĠIMP L Ġobject Ġinstead Ġ( because Ġof Ġhow Ġk ry o Ġworks ) Ċ Ġ* Ċ Ġ* ĠĠ Ġ************************* * Ċ Ġ* ĠĠ ĠNOTE : ĠThis Ġworks Ġbecause Ġwe ĠTR ICK Ġk ry o Ġserialization Ġby Ġchanging Ġwhat Ġthe Ġk ry o ĠID Ġserializer Ġis Ġon Ġeach Ġend Ġof Ġthe Ġconnection Ċ Ġ* ĠĠ Ġ************************* * Ċ Ġ* Ċ Ġ* ĠĠ ĠWhat Ġwe Ġdo Ġis Ġon Ġthe Ġserver , ĠRE WRITE Ġthe Ġk ry o ĠID Ġfor Ġthe Ġimpl Ġso Ġthat Ġit Ġwill Ġsend Ġjust Ġthe Ġr mi ĠID Ġinstead Ġof Ġthe Ġobject Ċ Ġ* ĠĠ Ġon Ġthe Ġclient , Ġthis ĠS AME Ġk ry o ĠID Ġmust Ġhave Ġthis Ġserializer Ġas Ġwell , Ġso Ġthe Ġproxy Ġobject Ġis Ġre - as semb led . Ċ Ġ* Ċ Ġ* ĠĠ ĠK ry o Ġserialization Ġworks Ġby Ġinspect ing Ġthe Ġfield ĠVALUE Ġtype , Ġnot Ġthe Ġfield ĠDEFIN ED Ġtype ... ĠSo Ġif Ġyou Ġsend Ġan Ġactual Ġobject , Ġyou Ġmust Ċ Ġ* ĠĠ Ġregister Ġspecifically Ġfor Ġthe Ġimplementation Ġobject . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTo Ġre cap : Ċ Ġ* Ġ Ġr mi - client : Ġsend Ġproxy Ġ-> ĠR mi I face Serializer Ġ-> Ġnetwork Ġ-> ĠR mi I face Serializer Ġ-> Ġimpl Ġobject Ġ( rmi - server ) Ċ Ġ* Ġ Ġr mi - server : Ġsend Ġimpl Ġ-> ĠR mi Impl Serializer Ġ-> Ġnetwork Ġ-> ĠR mi Impl Serializer Ġ-> Ġproxy Ġobject Ġ( rmi - client ) Ċ Ġ* Ċ Ġ* Ġ Ġr mi - server ĠMUST Ġregister R mi Ġboth Ġthe Ġiface + impl Ċ Ġ* Ċ Ġ* Ġ ĠDuring Ġthe Ġhandshake , Ġif Ġthe Ġimpl Ġobject Ġ' li ves ' Ġon Ġthe ĠCLIENT , Ġthen Ġthe Ġclient Ġmust Ġtell Ġthe Ġserver Ġthat Ġthe Ġiface ĠID Ġmust Ġuse Ġthis Ġserializer . Ċ Ġ* Ġ ĠIf Ġthe Ġimpl Ġobject Ġ' li ves ' Ġon Ġthe ĠSERVER , Ġthen Ġthe Ġserver Ġmust Ġtell Ġthe Ġclient Ġabout Ġthe Ġiface ĠID Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠR mi Server Serializer < CONNECTION : ĠConnection > Ġ: ĠSerializer < Any >( false ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( k ry o : ĠK ry o , Ġoutput : ĠOutput , Ġ` object `: ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġk ry o Extra Ġ= Ġk ry o Ġas ĠK ry o Extra < CONNECTION > ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġk ry o Extra . connection ĊĠĠĠĠĠĠĠ Ġval Ġr mi Connection Support Ġ= Ġconnection . end Point . rmi Connection Support ĊĊĠĠĠĠĠĠĠ Ġ// Ġhave Ġto Ġwrite Ġwhat Ġthe Ġr mi ĠID Ġis ĠONLY . ĠA Ġremote Ġobject Ġsent Ġvia Ġa Ġconnection ĠIS ĠONLY Ġa Ġconnection - scope Ġobject ! ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġwe Ġhave Ġsaved Ġit Ġalready ĊĠĠĠĠĠĠĠ Ġvar Ġr mi Id Ġ= Ġr mi Connection Support . getId (` object `) ĊĠĠĠĠĠĠĠ Ġif Ġ( rmi Id Ġ== ĠRemote Object Storage . INVALID _ R MI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġmeans Ġwe Ġhave Ġto Ġsave Ġit . ĠThis Ġobject Ġis Ġcached Ġso Ġwe Ġcan Ġhave Ġan Ġassociation Ġbetween Ġr mi ID Ġ< -> Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr mi Id Ġ= Ġr mi Connection Support . save Impl Object (` object `) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rmi Id Ġ== ĠRemote Object Storage . INVALID _ R MI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . logger . error (" Unable Ġto Ġsave Ġ$ ` object ` Ġfor Ġuse Ġas ĠR MI !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoutput . writeInt ( rmi Id , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ( k ry o : ĠK ry o , Ġinput : ĠInput , Ġinterface Class : ĠClass < *> ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġk ry o Extra Ġ= Ġk ry o Ġas ĠK ry o Extra < CONNECTION > ĊĠĠĠĠĠĠĠ Ġval Ġr mi Id Ġ= Ġinput . readInt ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġk ry o Extra . connection ĊĠĠĠĠĠĠĠ Ġval Ġend Point Ġ= Ġconnection . end Point ĊĠĠĠĠĠĠĠ Ġval Ġserialization Ġ= Ġend Point . serialization ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rmi Id Ġ== ĠRemote Object Storage . INVALID _ R MI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" R MI ĠID Ġis Ġinvalid . ĠUnable Ġto Ġuse Ġproxy Ġobject !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġr mi - server Ġwill Ġhave Ġiface + impl Ġid 's ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġr mi - client Ġwill Ġhave Ġiface Ġid 's ĊĊĠĠĠĠĠĠĠ Ġval Ġr mi Connection Support Ġ= Ġend Point . rmi Connection Support Ġas ĠR mi Manager Connections < CONNECTION > ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( interface Class . is Interface ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnormal Ġcase . ĠR MI Ġonly Ġon Ġ 1 Ġside ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk ry o Id Ġ= Ġserialization . rmi Holder . iface To Id [ interface Class ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( k ry o Id Ġ!= Ġnull ) Ġ{ Ġ" Registration Ġfor Ġ$ interface Class Ġis Ġinvalid !! " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġr mi Connection Support . get Proxy Object ( false , Ġconnection , Ġk ry o Id , Ġr mi Id , Ġinterface Class ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBI - DIRECTION AL ĠR MI Ġ-- ĠTHIS ĠIS ĠNOT ĠNORMAL ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġwon 't Ġbe Ġan Ġinterface . ĠIt Ġwill Ġbe Ġan Ġimpl Ġ( because Ġof Ġhow ĠR MI Ġis Ġsetup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk ry o Id Ġ= Ġserialization . rmi Holder . impl To Id [ interface Class ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( k ry o Id Ġ!= Ġnull ) Ġ{ Ġ" Registration Ġfor Ġ$ interface Class Ġis Ġinvalid !! " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiface Ġ= Ġserialization . rmi Holder . id To I face [ k ry o Id ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġr mi Connection Support . get Proxy Object ( false , Ġconnection , Ġk ry o Id , Ġr mi Id , Ġiface ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ