You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.3 KiB
Go

package reactor
import (
"fmt"
"net"
"context"
"time"
"FRMS/internal/pkg/sensor"
"google.golang.org/grpc"
pb "FRMS/internal/pkg/grpc"
)
type Coordinator struct {
Id string
Port int
}
func NewCoordinator(id string, port int) *Coordinator {
return &Coordinator{Id:id,Port:port}
}
func (c *Coordinator) Start() error {
// start a gRPC server to respond to pings from central server
fmt.Printf("Starting gRPC server on %v:%v\n",c.Id,c.Port)
lis, err := net.Listen("tcp",fmt.Sprintf("%v:%v",c.Id,c.Port))
if err != nil {
return err
}
grpcServer := grpc.NewServer()
pb.RegisterCoordinatorServer(grpcServer, newServer())
go grpcServer.Serve(lis)
// now setting up sensor managers
sm := sensor.NewManager()
return nil
}
// sensor discovery abstraction
type
// grpc stuff
func newServer() *coordinatorServer {
return &coordinatorServer{}
}
type coordinatorServer struct {
pb.UnimplementedCoordinatorServer
id string
}
func (s *coordinatorServer) PingHandler(ctx context.Context, ping *pb.PingRequest) (*pb.PingResponse, error){
now := time.Now()
fmt.Printf("Ping from server recieved at time %v\n", now.Format("15:04:05"))
return &pb.PingResponse{Id: s.id}, nil
}