heroagent/pkg/processmanager/examples/openrpc/main.go
2025-04-23 04:18:28 +02:00

76 lines
1.8 KiB
Go

package main
import (
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/freeflowuniverse/heroagent/pkg/processmanager/interfaces/openrpc"
)
func main() {
log.Println("Starting Process Manager OpenRPC Example")
// Use /tmp directory for the socket as it's more reliable for Unix sockets
// Define the socket path
socketPath := "/tmp/process-manager.sock"
// Remove the socket file if it already exists
if _, err := os.Stat(socketPath); err == nil {
if err := os.Remove(socketPath); err != nil {
log.Fatalf("Failed to remove existing socket file: %v", err)
}
}
log.Printf("Using socket path: %s", socketPath)
// Create a mock process manager
mockPM := NewMockProcessManager()
// Create and start the server
server, err := openrpc.NewServer(mockPM, socketPath)
if err != nil {
log.Fatalf("Failed to create server: %v", err)
}
// Start the server
err = server.Start()
if err != nil {
log.Fatalf("Failed to start server: %v", err)
}
log.Println("Server started successfully")
// Set up signal handling for graceful shutdown
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
// Wait a bit for the server to start
time.Sleep(1 * time.Second)
// Run the client example in a goroutine
errChan := make(chan error, 1)
go func() {
err := RunClientExample(socketPath, mockPM.GetSecret())
errChan <- err
}()
// Wait for the client to finish or for a signal
select {
case err := <-errChan:
if err != nil {
log.Printf("Client example failed: %v", err)
}
case sig := <-sigChan:
log.Printf("Received signal: %v", sig)
}
// Stop the server
log.Println("Stopping server...")
err = server.Stop()
if err != nil {
log.Printf("Failed to stop server: %v", err)
}
log.Println("Example completed")
}