code: def build(self):
      add_NNServiceServicer_to_server(
          NNServiceImpl(conf=self.conf), self.server
      )
      add_PSIServiceServicer_to_server(
          PSIServiceImpl(conf=self.conf), self.server
      )
      if self.secure:
          self.server.add_secure_port(
              f"[::]:{self.port}", self.server_credentials
          )
      else:
          self.server.add_insecure_port(f"[::]:{self.port}")
      logging.info(f"gRPC server starts listening port: {self.port}")
  
file_path: BigDL/python/ppml/src/bigdl/ppml/fl/nn/fl_server.py
imports: from concurrent import futures
  import grpc
  from bigdl.ppml.fl import *
  from bigdl.ppml.fl.nn.nn_service import NNServiceImpl
  import yaml
  import click
  from bigdl.ppml.fl.psi.psi_service import PSIServiceImpl
  from bigdl.ppml.fl.nn.generated.nn_service_pb2_grpc import *
  from bigdl.ppml.fl.nn.generated.psi_service_pb2_grpc import *
label_desc: Use image node_id 3 for calling the FLServer obj's underlying member method code with example usage: obj.build() without return types