@@ -4,12 +4,14 @@ import (
44 "context"
55 "fmt"
66 "net"
7+ "net/http"
78 "os"
89 "os/signal"
910 "runtime/pprof"
1011 "sync"
1112 "time"
1213
14+ proxy "github.com/grpc-ecosystem/grpc-gateway/runtime"
1315 "github.com/lightninglabs/loop"
1416 "github.com/lightninglabs/loop/looprpc"
1517 "google.golang.org/grpc"
@@ -59,15 +61,38 @@ func daemon(config *config) error {
5961 grpcServer := grpc .NewServer (serverOpts ... )
6062 looprpc .RegisterSwapClientServer (grpcServer , & server )
6163
62- // Next, Start the gRPC server listening for HTTP/2 connections.
63- logger .Infof ("Starting RPC listener" )
64- lis , err := net .Listen ("tcp" , config .Listen )
64+ // Next, start the gRPC server listening for HTTP/2 connections.
65+ logger .Infof ("Starting gRPC listener" )
66+ grpcListener , err := net .Listen ("tcp" , config .RPCListen )
6567 if err != nil {
6668 return fmt .Errorf ("RPC server unable to listen on %s" ,
67- config .Listen )
69+ config .RPCListen )
6870
6971 }
70- defer lis .Close ()
72+ defer grpcListener .Close ()
73+
74+ // We'll also create and start an accompanying proxy to serve clients
75+ // through REST.
76+ ctx , cancel := context .WithCancel (context .Background ())
77+ defer cancel ()
78+ mux := proxy .NewServeMux ()
79+ proxyOpts := []grpc.DialOption {grpc .WithInsecure ()}
80+ err = looprpc .RegisterSwapClientHandlerFromEndpoint (
81+ ctx , mux , config .RPCListen , proxyOpts ,
82+ )
83+ if err != nil {
84+ return err
85+ }
86+
87+ logger .Infof ("Starting REST proxy listener" )
88+ restListener , err := net .Listen ("tcp" , config .RESTListen )
89+ if err != nil {
90+ return fmt .Errorf ("REST proxy unable to listen on %s" ,
91+ config .RESTListen )
92+ }
93+ defer restListener .Close ()
94+ proxy := & http.Server {Handler : mux }
95+ go proxy .Serve (restListener )
7196
7297 statusChan := make (chan loop.SwapInfo )
7398
@@ -124,9 +149,10 @@ func daemon(config *config) error {
124149 go func () {
125150 defer wg .Done ()
126151
127- logger .Infof ("RPC server listening on %s" , lis .Addr ())
152+ logger .Infof ("RPC server listening on %s" , grpcListener .Addr ())
153+ logger .Infof ("REST proxy listening on %s" , restListener .Addr ())
128154
129- err = grpcServer .Serve (lis )
155+ err = grpcServer .Serve (grpcListener )
130156 if err != nil {
131157 logger .Error (err )
132158 }
0 commit comments