package server import ( "fmt" "net" "sync" "git.espin.casa/albert/cml04-printer-robot/internal/service" "git.espin.casa/albert/logger" ) type server struct { listener net.Listener mux sync.RWMutex log logger.LoggerAdapter cons []net.Conn } func (s *server) Stop() { s.mux.Lock() defer s.mux.Unlock() for _, conn := range s.cons { conn.Close() } s.mux.Unlock() s.listener.Close() } func (s *server) HandleConn(conn net.Conn) error { buff := make([]byte, 4096) n, err := conn.Read(buff) if err != nil { } if n < 24 { return fmt.Errorf("received telegram is too short") } } func (s *server) Start() { for { // Aceptar una conexión entrante conn, err := s.listener.Accept() if err != nil { s.log.Error("listener failed", err, logger.LogFields{}) continue } s.mux.Lock() s.cons = append(s.cons, conn) s.mux.Unlock() go s.HandleConn(conn) } } func NewServer(svc service.IService, address string, log logger.LoggerAdapter) (*server, error) { listener, err := net.Listen("tcp", address) if err != nil { return nil, err } defer listener.Close() return &server{ listener: listener, mux: sync.RWMutex{}, log: log, cons: []net.Conn{}, }, err }