mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-08-07 07:14:50 +00:00
e2fb7ea88d
* add test server Signed-off-by: SammyOina <sammyoina@gmail.com> * clean up and update docs Signed-off-by: SammyOina <sammyoina@gmail.com> * update docs Signed-off-by: SammyOina <sammyoina@gmail.com> * fix lint Signed-off-by: SammyOina <sammyoina@gmail.com> --------- Signed-off-by: SammyOina <sammyoina@gmail.com>
47 lines
1.0 KiB
Go
47 lines
1.0 KiB
Go
// Copyright (c) Ultraviolet
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package grpc
|
|
|
|
import (
|
|
"github.com/ultravioletrs/cocos/manager"
|
|
"google.golang.org/grpc/peer"
|
|
)
|
|
|
|
type grpcServer struct {
|
|
manager.UnimplementedManagerServiceServer
|
|
incoming chan *manager.ClientStreamMessage
|
|
svc Service
|
|
}
|
|
|
|
type Service interface {
|
|
Run(ipAddress string) manager.ComputationRunReq
|
|
}
|
|
|
|
// NewServer returns new AuthServiceServer instance.
|
|
func NewServer(incoming chan *manager.ClientStreamMessage, svc Service) manager.ManagerServiceServer {
|
|
return &grpcServer{
|
|
incoming: incoming,
|
|
svc: svc,
|
|
}
|
|
}
|
|
|
|
func (s *grpcServer) Process(stream manager.ManagerService_ProcessServer) error {
|
|
for {
|
|
req, err := stream.Recv()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, ok := req.Message.(*manager.ClientStreamMessage_Whoami); ok {
|
|
client, ok := peer.FromContext(stream.Context())
|
|
if ok {
|
|
req := s.svc.Run(client.Addr.String())
|
|
if err := stream.Send(&req); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
s.incoming <- req
|
|
}
|
|
}
|