adding some server-side control handlers

This commit is contained in:
2024-12-01 21:47:11 +09:00
parent 18b3028a46
commit 8346011d27
6 changed files with 115 additions and 28 deletions

View File

@ -8,14 +8,16 @@ import "io"
import "math/rand"
import "net"
import "net/http"
import "os"
import "sync"
import "sync/atomic"
//import "time"
import "google.golang.org/grpc"
//import "google.golang.org/grpc/metadata"
import "google.golang.org/grpc/peer"
import "google.golang.org/grpc/stats"
import "golang.org/x/net/websocket"
const PTS_LIMIT = 8192
@ -34,6 +36,8 @@ type Server struct {
stop_req atomic.Bool
stop_chan chan bool
ctl_prefix string
ctl_mux *http.ServeMux
ctl *http.Server // control server
l []*net.TCPListener // main listener for grpc
@ -689,13 +693,14 @@ func unaryInterceptor(ctx context.Context, req any, _ *grpc.UnaryServerInfo, han
return m, err
}
func NewServer(ctx context.Context, laddrs []string, logger Logger, tlscfg *tls.Config) (*Server, error) {
func NewServer(ctx context.Context, ctl_addr string, laddrs []string, logger Logger, tlscfg *tls.Config) (*Server, error) {
var s Server
var l *net.TCPListener
var laddr *net.TCPAddr
var err error
var addr string
var gl *net.TCPListener
var cwd string
if len(laddrs) <= 0 {
return nil, fmt.Errorf("no server addresses provided")
@ -738,6 +743,21 @@ func NewServer(ctx context.Context, laddrs []string, logger Logger, tlscfg *tls.
) // TODO: have this outside the server struct?
RegisterHoduServer(s.gs, &s)
s.ctl_prefix = "" // TODO:
s.ctl_mux = http.NewServeMux()
cwd, _ = os.Getwd()
s.ctl_mux.Handle(s.ctl_prefix + "/ui/", http.StripPrefix(s.ctl_prefix, http.FileServer(http.Dir(cwd)))) // TODO: proper directory. it must not use the current working directory...
//s.ctl_mux.HandleFunc(s.ctl_prefix + "/ws/tty", websocket.Handler(server_ws_tty).ServeHTTP)
s.ctl_mux.Handle(s.ctl_prefix + "/ws/tty", &server_ctl_ws_tty{s: &s, h: websocket.Handler(server_ws_tty)})
s.ctl_mux.Handle(s.ctl_prefix + "/server-conns", &server_ctl_client_conns{s: &s})
s.ctl = &http.Server{
Addr: ctl_addr,
Handler: s.ctl_mux,
// TODO: more settings
}
return &s, nil
oops:
@ -921,6 +941,11 @@ func (s *Server) StartExtService(svc Service, data interface{}) {
go svc.RunTask(&s.wg)
}
func (s *Server) StartCtlService() {
s.wg.Add(1)
go s.RunCtlTask(&s.wg)
}
func (s *Server) StopServices() {
var ext_svc Service
s.ReqStop()