package networking import ( "crypto/tls" "fmt" "net" ) type ServerTLSConfigProvider interface { GetServerTLSConfig() *tls.Config } type Server[T any] struct { listener net.Listener C chan Connection[T] } func NewServer[T any](serverTLSConfigProvider ServerTLSConfigProvider,port int) Server[T]{ listener, err := tls.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port), serverTLSConfigProvider.GetServerTLSConfig()) if err != nil { panic("Server could not bind to address") } return Server[T]{ listener:listener, C: make(chan Connection[T]), } } func (s *Server[T]) ListenLoop() { for { listenerConn, err := s.listener.Accept() if err != nil { panic("Server could not accept connection") } conn := NewConnection[T](listenerConn) s.C <- conn } }