123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package action
- import (
- "ehang.io/nps/lib/common"
- "ehang.io/nps/lib/logger"
- "ehang.io/nps/lib/pool"
- "errors"
- "go.uber.org/zap"
- "net"
- "sync"
- )
- var bp = pool.NewBufferPool(MaxReadSize)
- const MaxReadSize = 32 * 1024
- var (
- _ Action = (*AdminAction)(nil)
- _ Action = (*BridgeAction)(nil)
- _ Action = (*LocalAction)(nil)
- _ Action = (*NpcAction)(nil)
- )
- type Action interface {
- GetName() string
- GetZhName() string
- Init() error
- RunConnWithAddr(net.Conn, string) error
- RunConn(net.Conn) error
- GetServeConnWithAddr(string) (net.Conn, error)
- GetServerConn() (net.Conn, error)
- CanServe() bool
- RunPacketConn(conn net.PacketConn) error
- }
- type DefaultAction struct {
- }
- func (ba *DefaultAction) GetName() string {
- return "default"
- }
- func (ba *DefaultAction) GetZhName() string {
- return "默认"
- }
- func (ba *DefaultAction) Init() error {
- return nil
- }
- func (ba *DefaultAction) RunConn(clientConn net.Conn) error {
- return errors.New("not supported")
- }
- func (ba *DefaultAction) CanServe() bool {
- return false
- }
- func (ba *DefaultAction) RunPacketConn(conn net.PacketConn) error {
- return errors.New("not supported")
- }
- func (ba *DefaultAction) GetServerConn() (net.Conn, error) {
- return nil, errors.New("can not get component connection")
- }
- func (ba *DefaultAction) GetServeConnWithAddr(addr string) (net.Conn, error) {
- return nil, errors.New("can not get component connection")
- }
- func (ba *DefaultAction) startCopy(c1 net.Conn, c2 net.Conn) {
- var wg sync.WaitGroup
- wg.Add(2)
- err := pool.CopyConnGoroutinePool.Invoke(&pool.CopyConnGpParams{
- Reader: c2,
- Writer: c1,
- Wg: &wg,
- })
- if err != nil {
- logger.Error("Invoke goroutine failed", zap.Error(err))
- return
- }
- buf := bp.Get()
- _, _ = common.CopyBuffer(c2, c1, buf)
- bp.Put(buf)
- if v, ok := c1.(*net.TCPConn); ok {
- _ = v.CloseRead()
- }
- if v, ok := c2.(*net.TCPConn); ok {
- _ = v.CloseWrite()
- }
- wg.Wait()
- }
- func (ba *DefaultAction) startCopyPacketConn(p1 net.PacketConn, p2 net.PacketConn) error {
- var wg sync.WaitGroup
- wg.Add(2)
- _ = pool.CopyPacketGoroutinePool.Invoke(&pool.CopyPacketGpParams{
- RPacket: p1,
- WPacket: p2,
- Wg: &wg,
- })
- _ = pool.CopyPacketGoroutinePool.Invoke(&pool.CopyPacketGpParams{
- RPacket: p2,
- WPacket: p1,
- Wg: &wg,
- })
- wg.Wait()
- return nil
- }
|