From d22b4a893c2e1ca532f3bba68063858d553b39f3 Mon Sep 17 00:00:00 2001 From: Nick Dumas Date: Sat, 24 Jan 2026 19:53:07 -0500 Subject: [PATCH] Moving session code into its own file --- core/session.go | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 core/session.go diff --git a/core/session.go b/core/session.go new file mode 100644 index 0000000..644a7c7 --- /dev/null +++ b/core/session.go @@ -0,0 +1,66 @@ +package core + +import ( + "bufio" + "context" + "fmt" + "log/slog" + "net" + + "github.com/google/uuid" +) + +type Session struct { + c net.Conn + ctx context.Context + p Printer + l *slog.Logger + + userID uint64 +} + +func NewSession(ctx context.Context, c net.Conn, p Printer, l *slog.Logger) *Session { + sid := uuid.New() + return &Session{ + ctx: ctx, + l: l.With(slog.String("sid", sid.String())), + c: c, + } +} + +func (s *Session) bufferInput(commands chan string) { + scanner := bufio.NewScanner(s.c) + defer close(commands) + + for scanner.Scan() { + err := scanner.Err() + switch err { + case nil: + commands <- scanner.Text() + default: + s.l.With(slog.Any("error", scanner.Err())).Error("error scanning input") + return + } + } + + s.l.Debug("session terminated") +} + +func (s *Session) Start() { + s.l.Debug("starting telnet session") + fmt.Fprint(s.c, "Welcome to Bing Bong.\n") + + commands := make(chan string) + go s.bufferInput(commands) + + for command := range commands { + s.l.With(slog.String("command", command)).Debug("command recieved") + _, err := fmt.Fprintf(s.c, "> %q\n", command) + if err != nil { + s.l.With( + slog.Any("error", err), + ).Error("connection closed on write") + return + } + } +}