95 lines
2.6 KiB
Go
95 lines
2.6 KiB
Go
package herohandler
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/freeflowuniverse/heroagent/pkg/heroscript/handlerfactory/core"
|
|
|
|
// "github.com/freeflowuniverse/heroagent/pkg/handlerfactory/heroscript/handlerfactory/fakehandler"
|
|
"github.com/freeflowuniverse/heroagent/pkg/heroscript/handlerfactory/processmanagerhandler"
|
|
)
|
|
|
|
// HeroHandler is the main handler factory that manages all registered handlers
|
|
type HeroHandler struct {
|
|
factory *core.HandlerFactory
|
|
telnetServer *core.TelnetServer
|
|
}
|
|
|
|
var (
|
|
// DefaultInstance is the default HeroHandler instance
|
|
DefaultInstance *HeroHandler
|
|
)
|
|
|
|
// init initializes the default HeroHandler instance
|
|
func Init() error {
|
|
|
|
factory := core.NewHandlerFactory()
|
|
DefaultInstance = &HeroHandler{
|
|
factory: factory,
|
|
telnetServer: core.NewTelnetServer(factory),
|
|
}
|
|
|
|
log.Println("HeroHandler initialized")
|
|
|
|
// Register the process manager handler
|
|
handler := processmanagerhandler.NewProcessManagerHandler()
|
|
if handler == nil {
|
|
log.Fatalf("Failed to create process manager handler")
|
|
}
|
|
|
|
if err := DefaultInstance.factory.RegisterHandler(handler); err != nil {
|
|
log.Fatalf("Failed to register process manager handler: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func StartTelnet() error {
|
|
|
|
if err := DefaultInstance.StartTelnet("/tmp/hero.sock", "localhost:8023"); err != nil {
|
|
log.Fatalf("Failed to start telnet server: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// StartTelnet starts the telnet server on both Unix socket and TCP port
|
|
func (h *HeroHandler) StartTelnet(socketPath string, tcpAddress string, secrets ...string) error {
|
|
// Create a new telnet server with the factory and secrets
|
|
h.telnetServer = core.NewTelnetServer(h.factory, secrets...)
|
|
|
|
// Start Unix socket server
|
|
if socketPath != "" {
|
|
if err := h.telnetServer.Start(socketPath); err != nil {
|
|
return fmt.Errorf("failed to start Unix socket telnet server: %v", err)
|
|
}
|
|
log.Printf("Telnet server started on Unix socket: %s", socketPath)
|
|
}
|
|
|
|
// Start TCP server
|
|
if tcpAddress != "" {
|
|
if err := h.telnetServer.StartTCP(tcpAddress); err != nil {
|
|
return fmt.Errorf("failed to start TCP telnet server: %v", err)
|
|
}
|
|
log.Printf("Telnet server started on TCP address: %s", tcpAddress)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// StopTelnet stops the telnet server
|
|
func (h *HeroHandler) StopTelnet() error {
|
|
if h.telnetServer == nil {
|
|
return nil
|
|
}
|
|
return h.telnetServer.Stop()
|
|
}
|
|
|
|
// EnableSignalHandling sets up signal handling for graceful shutdown of the telnet server
|
|
func (h *HeroHandler) EnableSignalHandling(onShutdown func()) {
|
|
if h.telnetServer == nil {
|
|
return
|
|
}
|
|
h.telnetServer.EnableSignalHandling(onShutdown)
|
|
}
|