From a34d020bc6b252e842f042d935c7a0e6444460cf Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 17 May 2025 21:31:42 -0400 Subject: sync --- pkg/server/server.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 pkg/server/server.go (limited to 'pkg/server/server.go') diff --git a/pkg/server/server.go b/pkg/server/server.go new file mode 100644 index 000000000..901c08d69 --- /dev/null +++ b/pkg/server/server.go @@ -0,0 +1,52 @@ +package server + +import ( + "context" + "fmt" + "log/slog" + "net" + "net/http" + + "github.com/sst/opencode/pkg/app" +) + +type Server struct { + app *app.App + mux *http.ServeMux + http *http.Server + log *slog.Logger +} + +func New(app *app.App) (*Server, error) { + result := &Server{ + app: app, + mux: http.NewServeMux(), + log: slog.With("service", "server"), + } + result.mux.HandleFunc("/rpc", func(w http.ResponseWriter, r *http.Request) { + }) + + listener, err := net.Listen("tcp", ":0") + if err != nil { + return nil, err + } + port := listener.Addr().(*net.TCPAddr).Port + listener.Close() + result.log.Info("listening on port", "port", port) + + result.http = &http.Server{ + Addr: fmt.Sprintf(":%d", port), + Handler: result.mux, + } + + return result, nil +} + +func (s *Server) Start(ctx context.Context) error { + s.log.Info("starting server") + go func() { + <-ctx.Done() + s.http.Shutdown(context.Background()) + }() + return s.http.ListenAndServe() +} -- cgit v1.2.3