You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: server.go
    path of file: ./repos/kubeedge/staging/src/github.com/kubeedge/mapper-framework/pkg/grpcserver
    
    the code of the file until where you have to start completion: package grpcserver

import (
	"fmt"
	"net"
	"os"

	"google.golang.org/grpc"
	"google.golang.org/grpc/reflection"
	"k8s.io/klog/v2"

	dmiapi "github.com/kubeedge/kubeedge/pkg/apis/dmi/v1beta1"
	"github.com/kubeedge/mapper-framework/pkg/global"
)

type Config struct {
	SockPath string `json:"sock_path"`
	Protocol string `json:"protocol"`
}

type Server struct {
	dmiapi.UnimplementedDeviceMa
    
func (s *Server) Start() error {
	klog.Infof("uds socket path: %s", s.cfg.SockPath)
	err := initSock(s.cfg.SockPath)
	if err != nil {
		klog.Fatalf("failed to remove uds socket with err: %v", err)
		return err
	}

	s.lis, err = net.Listen("unix", s.cfg.SockPath)
	if err != nil {
		klog.Fatalf("failed to remove uds socket with err: %v", err)
		return err
	}
	grpcServer := grpc.NewServer()
	dmiapi.RegisterDeviceMapperServiceServer(grpcServer, s)
	reflection.Register(grpcServer)
	klog.V(2).Info("start grpc server")
	return grpcServer.Serve(s.lis)
}