You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.0 KiB
Go

package core
import (
"context"
"log/slog"
"net"
1 week ago
"time"
)
type Server struct {
l *slog.Logger
port string
ctx context.Context
Sessions chan *Session
ln net.Listener
}
func NewServer(ctx context.Context, l *slog.Logger, port string) *Server {
var s Server
c := make(chan *Session)
s.Sessions = c
1 week ago
lc := net.ListenConfig{
KeepAlive: 5 * time.Minute,
KeepAliveConfig: net.KeepAliveConfig{
Enable: true,
Idle: 3 * time.Minute,
Interval: 15 * time.Second,
},
}
1 week ago
1 week ago
ln, err := lc.Listen(ctx, "tcp", port)
if err != nil {
s.l.With(
slog.Any("error", err),
).Error("could not start tcp listener")
return &s
}
s.ctx = ctx
s.ln = ln
s.l = l
s.port = port
return &s
}
func (s *Server) Start() {
s.l.Debug("starting telnet server")
for {
1 week ago
select {
case <-s.ctx.Done():
return
1 week ago
default:
conn, err := s.ln.Accept()
if err != nil {
s.l.With(
slog.Any("error", err),
).Error("could not accept tcp connection")
}
s.Sessions <- NewSession(s.ctx, conn, Printer{}, s.l)
}
}
}