...
This commit is contained in:
100
pkg/processmanager/interfaces/openrpc/server.go
Normal file
100
pkg/processmanager/interfaces/openrpc/server.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package openrpc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/freeflowuniverse/heroagent/pkg/openrpcmanager"
|
||||
"github.com/freeflowuniverse/heroagent/pkg/processmanager/interfaces"
|
||||
)
|
||||
|
||||
// Server represents the Process Manager OpenRPC server
|
||||
type Server struct {
|
||||
processManager interfaces.ProcessManagerInterface
|
||||
socketPath string
|
||||
openRPCMgr *openrpcmanager.OpenRPCManager
|
||||
unixServer *openrpcmanager.UnixServer
|
||||
isRunning bool
|
||||
}
|
||||
|
||||
// NewServer creates a new Process Manager OpenRPC server
|
||||
func NewServer(processManager interfaces.ProcessManagerInterface, socketPath string) (*Server, error) {
|
||||
// Ensure the directory for the socket exists
|
||||
socketDir := filepath.Dir(socketPath)
|
||||
if err := os.MkdirAll(socketDir, 0755); err != nil {
|
||||
return nil, fmt.Errorf("failed to create socket directory: %w", err)
|
||||
}
|
||||
|
||||
// Load the OpenRPC schema
|
||||
schema, err := LoadSchema()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load OpenRPC schema: %w", err)
|
||||
}
|
||||
|
||||
// Create a new handler - no authentication now
|
||||
handler := NewHandler(processManager)
|
||||
|
||||
// Create a new OpenRPC manager - using empty string for auth (no authentication)
|
||||
openRPCMgr, err := openrpcmanager.NewOpenRPCManager(schema, handler.GetHandlers(), "")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create OpenRPC manager: %w", err)
|
||||
}
|
||||
|
||||
// Create a new Unix server
|
||||
unixServer, err := openrpcmanager.NewUnixServer(openRPCMgr, socketPath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create Unix server: %w", err)
|
||||
}
|
||||
|
||||
return &Server{
|
||||
processManager: processManager,
|
||||
socketPath: socketPath,
|
||||
openRPCMgr: openRPCMgr,
|
||||
unixServer: unixServer,
|
||||
isRunning: false,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Start starts the Process Manager OpenRPC server
|
||||
func (s *Server) Start() error {
|
||||
if s.isRunning {
|
||||
return fmt.Errorf("server is already running")
|
||||
}
|
||||
|
||||
// Start the Unix server
|
||||
if err := s.unixServer.Start(); err != nil {
|
||||
return fmt.Errorf("failed to start Unix server: %w", err)
|
||||
}
|
||||
|
||||
s.isRunning = true
|
||||
log.Printf("Process Manager OpenRPC server started on socket: %s", s.socketPath)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stop stops the Process Manager OpenRPC server
|
||||
func (s *Server) Stop() error {
|
||||
if !s.isRunning {
|
||||
return fmt.Errorf("server is not running")
|
||||
}
|
||||
|
||||
// Stop the Unix server
|
||||
if err := s.unixServer.Stop(); err != nil {
|
||||
return fmt.Errorf("failed to stop Unix server: %w", err)
|
||||
}
|
||||
|
||||
s.isRunning = false
|
||||
log.Printf("Process Manager OpenRPC server stopped")
|
||||
return nil
|
||||
}
|
||||
|
||||
// IsRunning returns whether the server is running
|
||||
func (s *Server) IsRunning() bool {
|
||||
return s.isRunning
|
||||
}
|
||||
|
||||
// SocketPath returns the socket path
|
||||
func (s *Server) SocketPath() string {
|
||||
return s.socketPath
|
||||
}
|
||||
Reference in New Issue
Block a user