Skip to content

Commit

Permalink
目录变更
Browse files Browse the repository at this point in the history
  • Loading branch information
刘河 committed Feb 3, 2019
1 parent 87f2c8b commit 74b2625
Show file tree
Hide file tree
Showing 27 changed files with 328 additions and 203 deletions.
50 changes: 25 additions & 25 deletions bridge/bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ package bridge

import (
"errors"
"github.com/cnlh/nps/utils"
"github.com/cnlh/nps/lib"
"net"
"sync"
"time"
)

type Client struct {
tunnel *utils.Conn
signal *utils.Conn
linkMap map[int]*utils.Link
tunnel *lib.Conn
signal *lib.Conn
linkMap map[int]*lib.Link
linkStatusMap map[int]bool
stop chan bool
sync.RWMutex
Expand Down Expand Up @@ -51,21 +51,21 @@ func (s *Bridge) tunnelProcess() error {
for {
conn, err := s.listener.Accept()
if err != nil {
utils.Println(err)
lib.Println(err)
continue
}
go s.cliProcess(utils.NewConn(conn))
go s.cliProcess(lib.NewConn(conn))
}
return err
}

//验证失败,返回错误验证flag,并且关闭连接
func (s *Bridge) verifyError(c *utils.Conn) {
c.Write([]byte(utils.VERIFY_EER))
func (s *Bridge) verifyError(c *lib.Conn) {
c.Write([]byte(lib.VERIFY_EER))
c.Conn.Close()
}

func (s *Bridge) cliProcess(c *utils.Conn) {
func (s *Bridge) cliProcess(c *lib.Conn) {
c.SetReadDeadline(5)
var buf []byte
var err error
Expand All @@ -74,9 +74,9 @@ func (s *Bridge) cliProcess(c *utils.Conn) {
return
}
//验证
id, err := utils.GetCsvDb().GetIdByVerifyKey(string(buf), c.Conn.RemoteAddr().String())
id, err := lib.GetCsvDb().GetIdByVerifyKey(string(buf), c.Conn.RemoteAddr().String())
if err != nil {
utils.Println("当前客户端连接校验错误,关闭此客户端:", c.Conn.RemoteAddr())
lib.Println("当前客户端连接校验错误,关闭此客户端:", c.Conn.RemoteAddr())
s.verifyError(c)
return
}
Expand All @@ -97,9 +97,9 @@ func (s *Bridge) closeClient(id int) {
}

//tcp连接类型区分
func (s *Bridge) typeDeal(typeVal string, c *utils.Conn, id int) {
func (s *Bridge) typeDeal(typeVal string, c *lib.Conn, id int) {
switch typeVal {
case utils.WORK_MAIN:
case lib.WORK_MAIN:
//客户端已经存在,下线
s.clientLock.Lock()
if _, ok := s.Client[id]; ok {
Expand All @@ -111,15 +111,15 @@ func (s *Bridge) typeDeal(typeVal string, c *utils.Conn, id int) {
s.clientLock.Lock()

s.Client[id] = &Client{
linkMap: make(map[int]*utils.Link),
linkMap: make(map[int]*lib.Link),
stop: make(chan bool),
linkStatusMap: make(map[int]bool),
}
utils.Printf("客户端%d连接成功,地址为:%s", id, c.Conn.RemoteAddr())
lib.Printf("客户端%d连接成功,地址为:%s", id, c.Conn.RemoteAddr())
s.Client[id].signal = c
s.clientLock.Unlock()
go s.GetStatus(id)
case utils.WORK_CHAN:
case lib.WORK_CHAN:
s.clientLock.Lock()
if v, ok := s.Client[id]; ok {
s.clientLock.Unlock()
Expand Down Expand Up @@ -161,13 +161,13 @@ func (s *Bridge) waitStatus(clientId, id int) (bool) {
return false
}

func (s *Bridge) SendLinkInfo(clientId int, link *utils.Link) (tunnel *utils.Conn, err error) {
func (s *Bridge) SendLinkInfo(clientId int, link *lib.Link) (tunnel *lib.Conn, err error) {
s.clientLock.Lock()
if v, ok := s.Client[clientId]; ok {
s.clientLock.Unlock()
v.signal.SendLinkInfo(link)
if err != nil {
utils.Println("send error:", err, link.Id)
lib.Println("send error:", err, link.Id)
s.DelClient(clientId)
return
}
Expand All @@ -192,7 +192,7 @@ func (s *Bridge) SendLinkInfo(clientId int, link *utils.Link) (tunnel *utils.Con
}

//得到一个tcp隧道
func (s *Bridge) GetTunnel(id int, en, de int, crypt, mux bool) (conn *utils.Conn, err error) {
func (s *Bridge) GetTunnel(id int, en, de int, crypt, mux bool) (conn *lib.Conn, err error) {
s.clientLock.Lock()
defer s.clientLock.Unlock()
if v, ok := s.Client[id]; !ok {
Expand All @@ -204,7 +204,7 @@ func (s *Bridge) GetTunnel(id int, en, de int, crypt, mux bool) (conn *utils.Con
}

//得到一个通信通道
func (s *Bridge) GetSignal(id int) (conn *utils.Conn, err error) {
func (s *Bridge) GetSignal(id int) (conn *lib.Conn, err error) {
s.clientLock.Lock()
defer s.clientLock.Unlock()
if v, ok := s.Client[id]; !ok {
Expand Down Expand Up @@ -257,19 +257,19 @@ func (s *Bridge) clientCopy(clientId int) {
for {
if id, err := client.tunnel.GetLen(); err != nil {
s.closeClient(clientId)
utils.Println("读取msg id 错误", err, id)
lib.Println("读取msg id 错误", err, id)
break
} else {
client.Lock()
if link, ok := client.linkMap[id]; ok {
client.Unlock()
if content, err := client.tunnel.GetMsgContent(link); err != nil {
utils.PutBufPoolCopy(content)
lib.PutBufPoolCopy(content)
s.closeClient(clientId)
utils.Println("read msg content error", err, "close client")
lib.Println("read msg content error", err, "close client")
break
} else {
if len(content) == len(utils.IO_EOF) && string(content) == utils.IO_EOF {
if len(content) == len(lib.IO_EOF) && string(content) == lib.IO_EOF {
if link.Conn != nil {
link.Conn.Close()
}
Expand All @@ -281,7 +281,7 @@ func (s *Bridge) clientCopy(clientId int) {
}
link.Flow.Add(0, len(content))
}
utils.PutBufPoolCopy(content)
lib.PutBufPoolCopy(content)
}
} else {
client.Unlock()
Expand Down
66 changes: 33 additions & 33 deletions client/client.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package client

import (
"github.com/cnlh/nps/utils"
"github.com/cnlh/nps/lib"
"net"
"sync"
"time"
)

type TRPClient struct {
svrAddr string
linkMap map[int]*utils.Link
linkMap map[int]*lib.Link
stop chan bool
tunnel *utils.Conn
tunnel *lib.Conn
sync.Mutex
vKey string
}
Expand All @@ -20,7 +20,7 @@ type TRPClient struct {
func NewRPClient(svraddr string, vKey string) *TRPClient {
return &TRPClient{
svrAddr: svraddr,
linkMap: make(map[int]*utils.Link),
linkMap: make(map[int]*lib.Link),
stop: make(chan bool),
tunnel: nil,
Mutex: sync.Mutex{},
Expand All @@ -39,18 +39,18 @@ func (s *TRPClient) NewConn() {
retry:
conn, err := net.Dial("tcp", s.svrAddr)
if err != nil {
utils.Println("连接服务端失败,五秒后将重连")
lib.Println("连接服务端失败,五秒后将重连")
time.Sleep(time.Second * 5)
goto retry
return
}
s.processor(utils.NewConn(conn))
s.processor(lib.NewConn(conn))
}

//处理
func (s *TRPClient) processor(c *utils.Conn) {
func (s *TRPClient) processor(c *lib.Conn) {
c.SetAlive()
if _, err := c.Write([]byte(utils.Getverifyval(s.vKey))); err != nil {
if _, err := c.Write([]byte(lib.Getverifyval(s.vKey))); err != nil {
return
}
c.WriteMain()
Expand All @@ -60,13 +60,13 @@ func (s *TRPClient) processor(c *utils.Conn) {
for {
flags, err := c.ReadFlag()
if err != nil {
utils.Println("服务端断开,正在重新连接")
lib.Println("服务端断开,正在重新连接")
break
}
switch flags {
case utils.VERIFY_EER:
utils.Fatalf("vKey:%s不正确,服务端拒绝连接,请检查", s.vKey)
case utils.NEW_CONN:
case lib.VERIFY_EER:
lib.Fatalf("vKey:%s不正确,服务端拒绝连接,请检查", s.vKey)
case lib.NEW_CONN:
if link, err := c.GetLinkInfo(); err != nil {
break
} else {
Expand All @@ -75,47 +75,47 @@ func (s *TRPClient) processor(c *utils.Conn) {
s.Unlock()
go s.linkProcess(link, c)
}
case utils.RES_CLOSE:
utils.Fatalln("该vkey被另一客户连接")
case utils.RES_MSG:
utils.Println("服务端返回错误,重新连接")
case lib.RES_CLOSE:
lib.Fatalln("该vkey被另一客户连接")
case lib.RES_MSG:
lib.Println("服务端返回错误,重新连接")
break
default:
utils.Println("无法解析该错误,重新连接")
lib.Println("无法解析该错误,重新连接")
break
}
}
s.stop <- true
s.linkMap = make(map[int]*utils.Link)
s.linkMap = make(map[int]*lib.Link)
go s.NewConn()
}
func (s *TRPClient) linkProcess(link *utils.Link, c *utils.Conn) {
func (s *TRPClient) linkProcess(link *lib.Link, c *lib.Conn) {
//与目标建立连接
server, err := net.DialTimeout(link.ConnType, link.Host, time.Second*3)

if err != nil {
c.WriteFail(link.Id)
utils.Println("connect to ", link.Host, "error:", err)
lib.Println("connect to ", link.Host, "error:", err)
return
}

c.WriteSuccess(link.Id)

link.Conn = utils.NewConn(server)
link.Conn = lib.NewConn(server)

for {
buf := utils.BufPoolCopy.Get().([]byte)
buf := lib.BufPoolCopy.Get().([]byte)
if n, err := server.Read(buf); err != nil {
utils.PutBufPoolCopy(buf)
s.tunnel.SendMsg([]byte(utils.IO_EOF), link)
lib.PutBufPoolCopy(buf)
s.tunnel.SendMsg([]byte(lib.IO_EOF), link)
break
} else {
if _, err := s.tunnel.SendMsg(buf[:n], link); err != nil {
utils.PutBufPoolCopy(buf)
lib.PutBufPoolCopy(buf)
c.Close()
break
}
utils.PutBufPoolCopy(buf)
lib.PutBufPoolCopy(buf)
//if link.ConnType == utils.CONN_UDP {
// c.Close()
// break
Expand All @@ -134,34 +134,34 @@ func (s *TRPClient) dealChan() {
//创建一个tcp连接
conn, err := net.Dial("tcp", s.svrAddr)
if err != nil {
utils.Println("connect to ", s.svrAddr, "error:", err)
lib.Println("connect to ", s.svrAddr, "error:", err)
return
}
//验证
if _, err := conn.Write([]byte(utils.Getverifyval(s.vKey))); err != nil {
utils.Println("connect to ", s.svrAddr, "error:", err)
if _, err := conn.Write([]byte(lib.Getverifyval(s.vKey))); err != nil {
lib.Println("connect to ", s.svrAddr, "error:", err)
return
}
//默认长连接保持
s.tunnel = utils.NewConn(conn)
s.tunnel = lib.NewConn(conn)
s.tunnel.SetAlive()
//写标志
s.tunnel.WriteChan()

go func() {
for {
if id, err := s.tunnel.GetLen(); err != nil {
utils.Println("get msg id error")
lib.Println("get msg id error")
break
} else {
s.Lock()
if v, ok := s.linkMap[id]; ok {
s.Unlock()
if content, err := s.tunnel.GetMsgContent(v); err != nil {
utils.Println("get msg content error:", err, id)
lib.Println("get msg content error:", err, id)
break
} else {
if len(content) == len(utils.IO_EOF) && string(content) == utils.IO_EOF {
if len(content) == len(lib.IO_EOF) && string(content) == lib.IO_EOF {
v.Conn.Close()
} else if v.Conn != nil {
v.Conn.Write(content)
Expand Down
12 changes: 6 additions & 6 deletions cmd/npc/npc.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package main
import (
"flag"
"github.com/cnlh/nps/client"
"github.com/cnlh/nps/utils"
_ "github.com/cnlh/nps/utils"
"github.com/cnlh/nps/lib"
_ "github.com/cnlh/nps/lib"
"strings"
)

Expand All @@ -18,15 +18,15 @@ var (

func main() {
flag.Parse()
utils.InitDaemon("client")
lib.InitDaemon("npc")
if *logType == "stdout" {
utils.InitLogFile("client", true)
lib.InitLogFile("npc", true)
} else {
utils.InitLogFile("client", false)
lib.InitLogFile("npc", false)
}
stop := make(chan int)
for _, v := range strings.Split(*verifyKey, ",") {
utils.Println("客户端启动,连接:", *serverAddr, " 验证令牌:", v)
lib.Println("客户端启动,连接:", *serverAddr, " 验证令牌:", v)
go client.NewRPClient(*serverAddr, v).Start()
}
<-stop
Expand Down
Loading

0 comments on commit 74b2625

Please sign in to comment.