...
This commit is contained in:
113
pkg/openrpcmanager/cmd/server/main.go
Normal file
113
pkg/openrpcmanager/cmd/server/main.go
Normal file
@@ -0,0 +1,113 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/freeflowuniverse/herolauncher/pkg/openrpcmanager"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Parse command line arguments
|
||||
socketPath := flag.String("socket", "/tmp/openrpc.sock", "Path to the Unix socket")
|
||||
secret := flag.String("secret", "test-secret", "Secret for authenticated methods")
|
||||
flag.Parse()
|
||||
|
||||
// Create a simple OpenRPC schema
|
||||
schema := openrpcmanager.OpenRPCSchema{
|
||||
OpenRPC: "1.2.6",
|
||||
Info: openrpcmanager.InfoObject{
|
||||
Title: "Hero Launcher API",
|
||||
Version: "1.0.0",
|
||||
},
|
||||
Methods: []openrpcmanager.MethodObject{
|
||||
{
|
||||
Name: "echo",
|
||||
Params: []openrpcmanager.ContentDescriptorObject{
|
||||
{
|
||||
Name: "message",
|
||||
Schema: openrpcmanager.SchemaObject{"type": "object"},
|
||||
},
|
||||
},
|
||||
Result: &openrpcmanager.ContentDescriptorObject{
|
||||
Name: "result",
|
||||
Schema: openrpcmanager.SchemaObject{"type": "object"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "ping",
|
||||
Params: []openrpcmanager.ContentDescriptorObject{},
|
||||
Result: &openrpcmanager.ContentDescriptorObject{
|
||||
Name: "result",
|
||||
Schema: openrpcmanager.SchemaObject{"type": "string"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "secure.info",
|
||||
Params: []openrpcmanager.ContentDescriptorObject{},
|
||||
Result: &openrpcmanager.ContentDescriptorObject{
|
||||
Name: "result",
|
||||
Schema: openrpcmanager.SchemaObject{"type": "object"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// Create handlers
|
||||
handlers := map[string]openrpcmanager.RPCHandler{
|
||||
"echo": func(params json.RawMessage) (interface{}, error) {
|
||||
var data interface{}
|
||||
if err := json.Unmarshal(params, &data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return data, nil
|
||||
},
|
||||
"ping": func(params json.RawMessage) (interface{}, error) {
|
||||
return "pong", nil
|
||||
},
|
||||
"secure.info": func(params json.RawMessage) (interface{}, error) {
|
||||
return map[string]interface{}{
|
||||
"server": "Hero Launcher",
|
||||
"version": "1.0.0",
|
||||
"status": "running",
|
||||
}, nil
|
||||
},
|
||||
}
|
||||
|
||||
// Create OpenRPC manager
|
||||
manager, err := openrpcmanager.NewOpenRPCManager(schema, handlers, *secret)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create OpenRPC manager: %v", err)
|
||||
}
|
||||
|
||||
// Create Unix server
|
||||
server, err := openrpcmanager.NewUnixServer(manager, *socketPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create Unix server: %v", err)
|
||||
}
|
||||
|
||||
// Start the server
|
||||
if err := server.Start(); err != nil {
|
||||
log.Fatalf("Failed to start Unix server: %v", err)
|
||||
}
|
||||
defer server.Stop()
|
||||
|
||||
fmt.Printf("OpenRPC server started on Unix socket: %s\n", *socketPath)
|
||||
fmt.Println("Available methods:")
|
||||
for _, method := range manager.ListMethods() {
|
||||
fmt.Printf(" - %s\n", method)
|
||||
}
|
||||
fmt.Println("\nPress Ctrl+C to stop the server")
|
||||
|
||||
// Wait for interrupt signal
|
||||
sigCh := make(chan os.Signal, 1)
|
||||
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-sigCh
|
||||
|
||||
fmt.Println("\nShutting down...")
|
||||
}
|
Reference in New Issue
Block a user