/** Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠRo yal ĠBank Ġof ĠS co tl and Ċ Ġ* Ċ Ġ* Ġ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 Ġio . blue bank . bra id . server Ċ Ċ import Ġio . blue bank . bra id . core . http . HttpServer Config Ċ import Ġio . vertx . core . AsyncResult Ċ import Ġio . vertx . core . Future . failed Future Ċ import Ġio . vertx . core . Future . succeeded Future Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . core . http . HttpServer Options Ċ import Ġio . vertx . ext . auth . Auth Provider Ċ import Ġio . blue bank . bra id . core . logging . logger For Ċ Ċ /** Ċ Ġ* Ġconfiguration Ġoptions Ġfor ĠJson RPC Server Ċ Ġ*/ Ċ class ĠJson RPC Server Builder Ġ{ ĊĊĠ Ġinternal Ġvar Ġvert x : ĠVert x ? Ġ= Ġnull ĊĠ Ġinternal Ġvar Ġroot Path : ĠString Ġ= Ġ"/ api /" ĊĠ Ġinternal Ġvar Ġport : ĠInt Ġ= Ġ 8 0 8 0 ĊĠ Ġinternal Ġvar Ġservices : ĠMutable List < Any > Ġ= Ġmutable ListOf () ĊĠ Ġinternal Ġvar Ġauth Provider : ĠAuth Provider ? Ġ= Ġnull ĊĠ Ġinternal Ġvar Ġhttp Server Options : ĠHttp Server Options Ġ= ĊĠĠĠ ĠHttp Server Config . default Server Options () ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġlogger For < Json RPC Server Builder >() ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmain Ġentry Ġpoint Ġto Ġsetup Ġa Ġbuilder ĊĠĠĠĠ Ġ* Ġfollowing Ġthis , Ġcall Ġthe Ġfluent Ġapi Ġto Ġsetup Ġoptions Ġof Ġthe Ġbuilder ĊĠĠĠĠ Ġ* Ġand Ġfinally Ġcall Ġ[ build ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate Server Builder () Ġ= ĠJson RPC Server Builder () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġset Ġthe Ġvert x Ġcontainer Ġto Ġrun Ġthis Ġserver ĊĠĠ Ġ* Ġdefault : Ġcreates Ġa Ġdedicated Ġserver ĊĠĠ Ġ*/ ĊĠ Ġfun Ġwith Vert x ( vertx : ĠVert x ): ĠJson RPC Server Builder Ġ{ ĊĠĠĠ Ġthis . vertx Ġ= Ġvert x ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġroot Ġhttp Ġpath Ġthat Ġthe Ġservices Ġfor Ġthis Ġserver Ġare Ġmounted ĊĠĠ Ġ* Ġdefault Ġis : Ġ/ api / ĊĠĠ Ġ* Ġnote : Ġpath Ġmust Ġend Ġin Ġ/ ĊĠĠ Ġ*/ ĊĠ Ġfun Ġwith RootPath ( rootPath : ĠString ): ĠJson RPC Server Builder Ġ{ ĊĠĠĠ Ġif Ġ(! rootPath . endsWith ('/ ')) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" path Ġmust Ġend Ġwith Ġ/ ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġthis . rootPath Ġ= Ġroot Path ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġport Ġthat Ġthis Ġserver Ġwill Ġbind Ġto ĊĠĠ Ġ* Ġdefault : Ġ 8 0 8 0 ĊĠĠ Ġ*/ ĊĠ Ġfun Ġwith Port ( port : ĠInt ): ĠJson RPC Server Builder Ġ{ ĊĠĠĠ Ġthis . port Ġ= Ġport ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġthe Ġset Ġof Ġservices Ġthat Ġwill Ġbe Ġexposed Ġby Ġthis Ġserver ĊĠĠ Ġ* Ġdefault : Ġempty Ġlist ĊĠĠ Ġ*/ ĊĠ Ġfun Ġwith Services ( services : ĠCollection < Any >): ĠJson RPC Server Builder Ġ{ ĊĠĠĠ Ġthis . services . clear () ĊĠĠĠ Ġthis . services . addAll ( services ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġadds Ġ[ service ] Ġto Ġthe Ġlist Ġof Ġservices Ġthat Ġwill Ġbe Ġexposed Ġon Ġthis Ġserver ĊĠĠ Ġ*/ ĊĠ Ġfun Ġwith Service ( service : ĠAny ): ĠJson RPC Server Builder Ġ{ ĊĠĠĠ Ġthis . services . add ( service ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġsets Ġthe Ġ[ Auth Provider ] Ġfor Ġauthentication Ġ/ Ġauthor isation Ġwhen Ġaccessing Ġa Ġservice ĊĠĠ Ġ* Ġdefault : Ġnull Ġ- Ġno Ġauth Ġand Ġopen Ġaccess Ġto Ġall ! ĊĠĠ Ġ*/ ĊĠ Ġfun Ġwith Auth Provider ( auth Provider : ĠAuth Provider ?): ĠJson RPC Server Builder Ġ{ ĊĠĠĠ Ġthis . auth Provider Ġ= Ġauth Provider ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġfun Ġwith HttpServer Options ( http Server Options : ĠHttp Server Options ): ĠJson RPC Server Builder Ġ{ ĊĠĠĠ Ġthis . http Server Options Ġ= Ġhttp Server Options ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġbuild Ġthe Ġserver ĊĠĠ Ġ* Ġdon 't Ġforget Ġto Ġstart Ġthe Ġserver Ġusing Ġ[ Json RPC Server Builder . build ] ĊĠĠ Ġ*/ ĊĠ Ġfun Ġbuild (): ĠJson RPC Server Ġ{ ĊĠĠĠ Ġlogger . info (" Json RPC Server . create Json Rpc Server ") ĊĠĠĠ Ġreturn ĠJson RPC Server . create Json Rpc Server ( this ) ĊĠ Ġ} Ċ } Ċ Ċ class ĠJson RPC Server Ġprivate Ġconstructor ( private Ġval Ġbuilder : ĠJson RPC Server Builder ) Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġio . blue bank . bra id . core . json . B raid Jack son Init . init () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate Json Rpc Server ( builder : ĠJson RPC Server Builder ): ĠJson RPC Server Ġ{ ĊĠĠĠĠĠ Ġreturn ĠJson RPC Server ( builder ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġvar Ġdeployment Id : ĠString ? Ġ= Ġnull ĊĠ Ġval Ġroot Path Ġget () Ġ= Ġbuilder . rootPath ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġif Ġ( builder . vertx Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġbuilder . vertx Ġ= ĠVert x . vertx () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠStart Ġthe Ġserver ĊĠĠ Ġ* ĠThe Ġstartup Ġis Ġasynchronous . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstart () Ġ{ ĊĠĠĠ Ġstart Ġ{ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠStart Ġthe Ġserver Ġand Ġcallback Ġon Ġ[ callback ] Ġfunction ĊĠĠ Ġ* ĠClients Ġshould Ġcheck Ġthe Ġstatus Ġof Ġthe Ġ[ AsyncResult ] ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstart ( callback : Ġ( AsyncResult < Void >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( deployment Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġwith ( builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvert x !!. deploy Vert icle ( ĊĠĠĠĠĠĠĠĠĠ ĠJson RPC Vert icle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservices , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Server Options ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . failed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" failed Ġto Ġdeploy : Ġ${ it . cause (). message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( failed Future ( it . cause ())) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeployment Id Ġ= Ġit . result () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprotocol Ġ= Ġif Ġ( builder . http Server Options . is Ssl ) Ġ" https " Ġelse Ġ" http " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" server Ġmounted Ġon Ġ$ protocol :// localhost :$ port $ rootPath ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( succeeded Future ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAs ynchronously Ġstop Ġthe Ġsever ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstop () Ġ{ ĊĠĠĠ Ġstop Ġ{} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAs ynchronously Ġstop Ġthe Ġserver ĊĠĠ Ġ* ĠCalls Ġback Ġon Ġ[ callback ] Ġfunction Ġwith Ġthe Ġresult Ġof Ġthe Ġoperation ĊĠĠ Ġ* ĠClients Ġshould Ġcheck Ġthe Ġ[ AsyncResult ] Ġstate ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstop ( callback : Ġ( AsyncResult < Void >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( deployment Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġbuilder . vertx !!. un deploy ( deployment Id , Ġcallback ) ĊĠĠĠĠĠ Ġdeployment Id Ġ= Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } ĊĊ