cml04-printer-robot/internal/server/server.go

71 lines
1.2 KiB
Go
Raw Normal View History

2024-08-19 02:23:44 +02:00
package server
import (
2024-08-19 16:22:35 +02:00
"fmt"
"net"
"sync"
2024-08-19 02:23:44 +02:00
"git.espin.casa/albert/cml04-printer-robot/internal/service"
2024-08-19 16:22:35 +02:00
"git.espin.casa/albert/logger"
2024-08-19 02:23:44 +02:00
)
type server struct {
2024-08-19 16:22:35 +02:00
listener net.Listener
mux sync.RWMutex
log logger.LoggerAdapter
cons []net.Conn
2024-08-19 02:23:44 +02:00
}
2024-08-19 16:22:35 +02:00
func (s *server) Stop() {
s.mux.Lock()
defer s.mux.Unlock()
for _, conn := range s.cons {
conn.Close()
}
s.mux.Unlock()
s.listener.Close()
2024-08-19 02:23:44 +02:00
}
2024-08-19 16:22:35 +02:00
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)
2024-08-19 02:23:44 +02:00
}
}
2024-08-19 16:22:35 +02:00
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
}