Skip to content
Snippets Groups Projects
nucleus-core.go 2.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • package nucleus
    
    import (
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	pb "code.fbi.h-da.de/cocsn/gosdn/cliInterface"
    
    	"code.fbi.h-da.de/cocsn/gosdn/database"
    	"code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces"
    
    	"context"
    	_ "github.com/mattn/go-sqlite3"
    	"google.golang.org/grpc"
    	"log"
    	"net"
    	"time"
    )
    
    // server is used to implement helloworld.GreeterServer.
    type server struct {
    	pb.UnimplementedGreeterServer
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	core *Core
    
    }
    
    // SayHello implements helloworld.GreeterServer
    func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    	log.Printf("Received: %v", in.GetName())
    	return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
    }
    
    
    func (s *server) Shutdown(ctx context.Context, in *pb.ShutdownRequest) (*pb.ShutdownReply, error) {
    	log.Printf("Received: %v", in.GetName())
    	isRunning = false
    	return &pb.ShutdownReply{Message: "Shutdown " + in.GetName()}, nil
    }
    
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    func getCLIGoing(core *Core) {
    
    	log.Println("Starting: GetCLIGoing")
    	// Boot-up the control interface for the cli
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	cliControlListener, err := net.Listen("tcp", core.config.CliSocket)
    
    	if err != nil {
    		log.Fatalf("failed to listen: %v", err)
    	}
    
    	cliControlServer := grpc.NewServer()
    
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	pb.RegisterGreeterServer(cliControlServer, &server{core: core})
    
    	if err := cliControlServer.Serve(cliControlListener); err != nil {
    		log.Fatalf("failed to serve: %v", err)
    	}
    	log.Println("Started: GetCLIGoing")
    }
    
    /*
     * This function is used to start the core of the controller and any auxiliary services.
     */
    
    // Next-up: backend database.
    
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    func StartUp(socket, filename string) {
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	log.Println("This is the network superintendent...")
    
    	log.Println("Starting my ducks")
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	// Init the Core
    
    	core := Core{
    		clients:  make(map[string]interfaces.Client, 0),
    		database: database.Database{},
    		config:   nil,
    	}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	core.Init(socket, filename)
    
    	// Start the GRCP CLI
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	go getCLIGoing(&core)
    
    	log.Println("and ready for take off")
    
    }
    
    /*
     * nucleus.Run() is the "main loop" of the controller
     */
    
    
    var isRunning = true
    
    
    func Run() {
    
    	for isRunning {
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		time.Sleep(10 * time.Second)
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		log.Println("Still alive...")
    
    	}
    
    	log.Println("Good bye....!")
    }