github.com/decred/dcrlnd@v0.7.6/lnrpc/routerrpc/driver.go (about)

     1  package routerrpc
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/decred/dcrlnd/lnrpc"
     7  )
     8  
     9  // createNewSubServer is a helper method that will create the new router sub
    10  // server given the main config dispatcher method. If we're unable to find the
    11  // config that is meant for us in the config dispatcher, then we'll exit with
    12  // an error.
    13  func createNewSubServer(configRegistry lnrpc.SubServerConfigDispatcher) (
    14  	*Server, lnrpc.MacaroonPerms, error) {
    15  
    16  	// We'll attempt to look up the config that we expect, according to our
    17  	// subServerName name. If we can't find this, then we'll exit with an
    18  	// error, as we're unable to properly initialize ourselves without this
    19  	// config.
    20  	routeServerConf, ok := configRegistry.FetchConfig(subServerName)
    21  	if !ok {
    22  		return nil, nil, fmt.Errorf("unable to find config for "+
    23  			"subserver type %s", subServerName)
    24  	}
    25  
    26  	// Now that we've found an object mapping to our service name, we'll
    27  	// ensure that it's the type we need.
    28  	config, ok := routeServerConf.(*Config)
    29  	if !ok {
    30  		return nil, nil, fmt.Errorf("wrong type of config for "+
    31  			"subserver %s, expected %T got %T", subServerName,
    32  			&Config{}, routeServerConf)
    33  	}
    34  
    35  	// Before we try to make the new router service instance, we'll perform
    36  	// some sanity checks on the arguments to ensure that they're useable.
    37  	switch {
    38  	case config.Router == nil:
    39  		return nil, nil, fmt.Errorf("Router must be set to create " +
    40  			"Routerpc")
    41  	}
    42  
    43  	return New(config)
    44  }
    45  
    46  func init() {
    47  	subServer := &lnrpc.SubServerDriver{
    48  		SubServerName: subServerName,
    49  		NewGrpcHandler: func() lnrpc.GrpcHandler {
    50  			return &ServerShell{}
    51  		},
    52  	}
    53  
    54  	// If the build tag is active, then we'll register ourselves as a
    55  	// sub-RPC server within the global lnrpc package namespace.
    56  	if err := lnrpc.RegisterSubServer(subServer); err != nil {
    57  		panic(fmt.Sprintf("failed to register sub server driver '%s': %v",
    58  			subServerName, err))
    59  	}
    60  }