2019-02-26 14:40:28 +00:00
|
|
|
package mux
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/cnlh/nps/lib/common"
|
2019-03-15 06:03:49 +00:00
|
|
|
"github.com/cnlh/nps/lib/pool"
|
2019-02-26 14:40:28 +00:00
|
|
|
"github.com/cnlh/nps/vender/github.com/astaxie/beego/logs"
|
|
|
|
"log"
|
|
|
|
"net"
|
|
|
|
"net/http"
|
|
|
|
_ "net/http/pprof"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
var conn1 net.Conn
|
|
|
|
var conn2 net.Conn
|
|
|
|
|
|
|
|
func TestNewMux(t *testing.T) {
|
|
|
|
go func() {
|
2019-03-15 06:03:49 +00:00
|
|
|
http.ListenAndServe("0.0.0.0:8889", nil)
|
2019-02-26 14:40:28 +00:00
|
|
|
}()
|
|
|
|
logs.EnableFuncCallDepth(true)
|
|
|
|
logs.SetLogFuncCallDepth(3)
|
|
|
|
server()
|
|
|
|
client()
|
|
|
|
time.Sleep(time.Second * 3)
|
|
|
|
go func() {
|
2019-03-29 02:41:57 +00:00
|
|
|
m2 := NewMux(conn2, "tcp")
|
2019-02-26 14:40:28 +00:00
|
|
|
for {
|
|
|
|
c, err := m2.Accept()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2019-08-26 13:42:20 +00:00
|
|
|
c2, err := net.Dial("tcp", "127.0.0.1:8080")
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
go common.CopyBuffer(c2, c,0)
|
|
|
|
common.CopyBuffer(c, c2,0)
|
|
|
|
c2.Close()
|
|
|
|
c.Close()
|
|
|
|
logs.Warn("close npc")
|
2019-02-26 14:40:28 +00:00
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
go func() {
|
2019-03-29 02:41:57 +00:00
|
|
|
m1 := NewMux(conn1, "tcp")
|
2019-02-26 14:40:28 +00:00
|
|
|
l, err := net.Listen("tcp", "127.0.0.1:7777")
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
for {
|
|
|
|
conn, err := l.Accept()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2019-08-26 13:42:20 +00:00
|
|
|
|
|
|
|
tmpCpnn, err := m1.NewConn()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
go common.CopyBuffer(tmpCpnn, conn,tmpCpnn.connId)
|
|
|
|
_, err = common.CopyBuffer(conn, tmpCpnn,tmpCpnn.connId)
|
|
|
|
logs.Warn(err, tmpCpnn.connId)
|
|
|
|
conn.Close()
|
|
|
|
tmpCpnn.Close()
|
|
|
|
logs.Warn("close from out nps ", tmpCpnn.connId)
|
2019-02-26 14:40:28 +00:00
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
for {
|
|
|
|
time.Sleep(time.Second * 5)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func server() {
|
|
|
|
var err error
|
|
|
|
l, err := net.Listen("tcp", "127.0.0.1:9999")
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
go func() {
|
|
|
|
conn1, err = l.Accept()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func client() {
|
|
|
|
var err error
|
|
|
|
conn2, err = net.Dial("tcp", "127.0.0.1:9999")
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
|
|
|
}
|
2019-03-15 06:03:49 +00:00
|
|
|
|
|
|
|
func TestNewConn(t *testing.T) {
|
|
|
|
buf := pool.GetBufPoolCopy()
|
|
|
|
logs.Warn(len(buf), cap(buf))
|
|
|
|
//b := pool.GetBufPoolCopy()
|
|
|
|
//b[0] = 1
|
|
|
|
//b[1] = 2
|
|
|
|
//b[2] = 3
|
|
|
|
b := []byte{1, 2, 3}
|
|
|
|
logs.Warn(copy(buf[:3], b), len(buf), cap(buf))
|
|
|
|
logs.Warn(len(buf), buf[0])
|
|
|
|
}
|