package jt1078 import ( "github.com/lkmio/avformat/utils" "github.com/lkmio/lkm/stream" "github.com/lkmio/transport" "net" "runtime" ) type Server interface { Start(addr net.Addr) error Close() } type jtServer struct { stream.StreamServer[*Session] tcp *transport.TCPServer version int } func (s *jtServer) OnNewSession(conn net.Conn) *Session { return NewSession(conn, s.version) } func (s *jtServer) OnCloseSession(session *Session) { session.Close() stream.TCPReceiveBufferPool.Put(session.receiveBuffer[:cap(session.receiveBuffer)]) } func (s *jtServer) OnPacket(conn net.Conn, data []byte) []byte { s.StreamServer.OnPacket(conn, data) session := conn.(*transport.Conn).Data.(*Session) _, _ = session.Input(data) return session.receiveBuffer } func (s *jtServer) Start(addr net.Addr) error { utils.Assert(s.tcp == nil) server := &transport.TCPServer{ ReuseServer: transport.ReuseServer{ EnableReuse: true, ConcurrentNumber: runtime.NumCPU(), }, } if err := server.Bind(addr); err != nil { return err } server.SetHandler(s) server.Accept() s.tcp = server return nil } func (s *jtServer) Close() { panic("implement me") } func NewServer(version int) Server { j := &jtServer{ version: version, } j.StreamServer = stream.StreamServer[*Session]{ SourceType: stream.SourceType1078, Handler: j, } return j }