From 2de1f038c767caf280ff7e1b0be671c6176d2dd4 Mon Sep 17 00:00:00 2001 From: Altair-sh Date: Fri, 30 Oct 2026 00:53:39 +0100 Subject: [PATCH] moved server code to internal/server --- cmd/serveg/main.go | 60 ++--------------------- {cmd/serveg => internal/server}/Config.go | 4 +- internal/server/Server.go | 59 ++++++++++++++++++++++ 3 files changed, 64 insertions(+), 59 deletions(-) rename {cmd/serveg => internal/server}/Config.go (95%) create mode 100644 internal/server/Server.go diff --git a/cmd/serveg/main.go b/cmd/serveg/main.go index 989bd31..e6ab27d 100644 --- a/cmd/serveg/main.go +++ b/cmd/serveg/main.go @@ -3,13 +3,11 @@ package main import ( "context" "flag" - "net" "os" "os/signal" "serveg/internal/log" - "strconv" + "serveg/internal/server" "syscall" - "time" ) func main() { @@ -23,19 +21,18 @@ func run() int { logger := log.LoggerContext{Name: "main"} ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) - //defer stop() configPath := *flag.String("config", "serveg.toml", "path to config file") flag.Parse() - conf, err := ParseOrCreateDefault(configPath) + conf, err := server.ParseOrCreateConfig(configPath) if err != nil { logger.Error(err) return 1 } errCh := make(chan error, 1) - go func() { errCh <- server(conf) }() + go func() { errCh <- server.Serve(conf) }() logger.Info("server started") select { @@ -51,54 +48,3 @@ func run() int { return 0 } - -func server(conf *Config) error { - logger := log.LoggerContext{Name: "server"} - addr := net.JoinHostPort(conf.Ip.String(), strconv.Itoa(int(conf.Port))) - - logger.Info("listening at", addr) - srv, err := net.Listen("tcp", addr) - if err != nil { - return err - } - defer func() { _ = srv.Close() }() - - for i := int64(0); ; i++ { - conn, err := srv.Accept() - if err != nil { - logger.Warn(err) - continue - } - go handleConnection(conn, i) - } -} - -func handleConnection(conn net.Conn, n int64) { - logger := log.LoggerContext{Name: "conn-" + strconv.FormatInt(n, 10)} - defer func() { - if r := recover(); r != nil { - logger.Error("panic: ", r) - } - _ = conn.Close() - }() - - buf := make([]byte, 4096) - - for { - if err := conn.SetDeadline(time.Now().Add(30 * time.Second)); err != nil { - logger.Warn(err) - break - } - n, err := conn.Read(buf) - if err != nil { - logger.Warn(err) - break - } - msgBytes := buf[:n] - logger.Info("msg: `", string(msgBytes), "`") - if _, err := conn.Write(msgBytes); err != nil { - logger.Warn(err) - break - } - } -} diff --git a/cmd/serveg/Config.go b/internal/server/Config.go similarity index 95% rename from cmd/serveg/Config.go rename to internal/server/Config.go index c60db5b..269fa68 100644 --- a/cmd/serveg/Config.go +++ b/internal/server/Config.go @@ -1,4 +1,4 @@ -package main +package server import ( "encoding" @@ -38,7 +38,7 @@ func DefaultConfig() *Config { } } -func ParseOrCreateDefault(path string) (*Config, error) { +func ParseOrCreateConfig(path string) (*Config, error) { config, err := ReadConfig(path) if !errors.Is(err, fs.ErrNotExist) { return config, err // either a parsed config, or a real error diff --git a/internal/server/Server.go b/internal/server/Server.go new file mode 100644 index 0000000..1e2d0a9 --- /dev/null +++ b/internal/server/Server.go @@ -0,0 +1,59 @@ +package server + +import ( + "net" + "serveg/internal/log" + "strconv" + "time" +) + +func Serve(conf *Config) error { + logger := log.LoggerContext{Name: "server"} + addr := net.JoinHostPort(conf.Ip.String(), strconv.Itoa(int(conf.Port))) + + logger.Info("listening at", addr) + srv, err := net.Listen("tcp", addr) + if err != nil { + return err + } + defer func() { _ = srv.Close() }() + + for i := int64(0); ; i++ { + conn, err := srv.Accept() + if err != nil { + logger.Warn(err) + continue + } + go handleConnection(conn, i) + } +} + +func handleConnection(conn net.Conn, n int64) { + logger := log.LoggerContext{Name: "conn-" + strconv.FormatInt(n, 10)} + defer func() { + if r := recover(); r != nil { + logger.Error("panic: ", r) + } + _ = conn.Close() + }() + + buf := make([]byte, 4096) + + for { + if err := conn.SetDeadline(time.Now().Add(30 * time.Second)); err != nil { + logger.Warn(err) + break + } + n, err := conn.Read(buf) + if err != nil { + logger.Warn(err) + break + } + msgBytes := buf[:n] + logger.Info("msg: `", string(msgBytes), "`") + if _, err := conn.Write(msgBytes); err != nil { + logger.Warn(err) + break + } + } +}