Files
PandaX/iothub/server/tcpserver/tcp_server.go
2023-09-26 18:05:47 +08:00

65 lines
1.2 KiB
Go

package tcpserver
import (
"context"
"crypto/tls"
"fmt"
"net"
"pandax/pkg/global"
)
const DefaultPort = ":9003"
type TcpServer struct {
Addr string
listener *net.TCPListener
}
func NewTcpServer(addr string) *TcpServer {
if addr == "" {
addr = DefaultPort
}
return &TcpServer{
Addr: addr,
}
}
func (s *TcpServer) GetServe() *net.TCPListener {
return s.listener
}
func (s *TcpServer) Type() string {
return "TCP"
}
func (s *TcpServer) Start(ctx context.Context) error {
addr, _ := net.ResolveTCPAddr("tcp", s.Addr)
listener, err := net.ListenTCP("tcp", addr)
if err != nil {
global.Log.Errorf("error http serve: %s", err)
return err
}
s.listener = listener
return nil
}
func (s *TcpServer) Stop(ctx context.Context) error {
s.listener.Close()
return nil
}
func (s *TcpServer) TlsConfig() (*tls.Config, error) {
var certificates []tls.Certificate
cert, err := tls.LoadX509KeyPair(global.Conf.Server.Tls.CertFile, global.Conf.Server.Tls.KeyFile)
if err != nil {
return nil, fmt.Errorf("generate x509 key pair failed: %s ", err)
}
certificates = append(certificates, cert)
if len(certificates) == 0 {
return nil, fmt.Errorf("none valid certs and secret")
}
return &tls.Config{Certificates: certificates}, nil
}