mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 02:48:34 +08:00
65 lines
1.2 KiB
Go
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
|
|
}
|