mirror of
https://github.com/ayflying/p2p.git
synced 2026-03-04 17:29:22 +00:00
增加代理接口
This commit is contained in:
18
internal/message/consts.go
Normal file
18
internal/message/consts.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package message
|
||||
|
||||
import (
|
||||
v1 "github.com/ayflying/p2p/api/p2p/v1"
|
||||
"github.com/ayflying/p2p/internal/message/http"
|
||||
"github.com/ayflying/p2p/internal/message/proxy"
|
||||
"github.com/ayflying/p2p/internal/message/proxyAck"
|
||||
)
|
||||
|
||||
type P2PMessage interface {
|
||||
Message(msg *v1.Message) (err error)
|
||||
}
|
||||
|
||||
var Run = map[string]P2PMessage{
|
||||
"proxy": proxy.New,
|
||||
"proxy_ack": proxyAck.New,
|
||||
"http": http.New,
|
||||
}
|
||||
17
internal/message/http/http.go
Normal file
17
internal/message/http/http.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package http
|
||||
|
||||
import v1 "github.com/ayflying/p2p/api/p2p/v1"
|
||||
|
||||
type Http struct {
|
||||
Ip string `json:"ip"`
|
||||
Port int `json:"port"`
|
||||
Cname string `json:"cname"`
|
||||
Data []byte `json:"data"`
|
||||
}
|
||||
|
||||
var New = Http{}
|
||||
|
||||
func (h Http) Message(msg *v1.Message) (err error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
68
internal/message/proxy/proxy.go
Normal file
68
internal/message/proxy/proxy.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/ayflying/p2p/api/p2p/v1"
|
||||
"github.com/ayflying/p2p/internal/service"
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/net/gtcp"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
var New = Proxy{}
|
||||
|
||||
var (
|
||||
//ip, _ = service.P2P().GetIPv4PublicIP()
|
||||
)
|
||||
|
||||
type Proxy struct {
|
||||
Ip string `json:"ip"`
|
||||
Port int `json:"port"`
|
||||
Data []byte `json:"data"`
|
||||
}
|
||||
|
||||
func (p Proxy) Message(msg *v1.Message) (err error) {
|
||||
var data *Proxy
|
||||
|
||||
gjson.DecodeTo(msg.Data, &data)
|
||||
//g.Dump(data)
|
||||
// Client
|
||||
go func() {
|
||||
if conn, err := gtcp.NewConn(fmt.Sprintf("%s:%v", data.Ip, data.Port)); err == nil {
|
||||
defer conn.Close()
|
||||
|
||||
err = conn.Send(data.Data)
|
||||
if b, err := conn.SendRecv([]byte(gtime.Datetime()), -1); err == nil {
|
||||
//fmt.Println(string(b), conn.LocalAddr(), conn.RemoteAddr())
|
||||
|
||||
err = service.P2P().SendP2P(msg.From, "proxy_ack", gjson.MustEncode(&Proxy{
|
||||
Ip: data.Ip,
|
||||
Port: data.Port,
|
||||
Data: b,
|
||||
}))
|
||||
if err != nil {
|
||||
g.Log().Errorf(gctx.New(), "发送ACK失败:%v", err)
|
||||
}
|
||||
|
||||
} else {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
} else {
|
||||
//glog.Error(err)
|
||||
}
|
||||
//time.Sleep(time.Second)
|
||||
|
||||
}()
|
||||
|
||||
//conn, err := gtcp.NewConn(fmt.Sprintf("%s:%v", data.Ip, data.Port))
|
||||
//if err != nil {
|
||||
// g.Log().Errorf(ctx, "连接失败:%v", err)
|
||||
// return
|
||||
//}
|
||||
//defer conn.Close()
|
||||
return
|
||||
}
|
||||
28
internal/message/proxyAck/proxyAck.go
Normal file
28
internal/message/proxyAck/proxyAck.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package proxyAck
|
||||
|
||||
import (
|
||||
v1 "github.com/ayflying/p2p/api/p2p/v1"
|
||||
"github.com/ayflying/p2p/internal/service"
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
)
|
||||
|
||||
type ProxyAck struct {
|
||||
Ip string `json:"ip"`
|
||||
Port int `json:"port"`
|
||||
Data []byte `json:"data"`
|
||||
}
|
||||
|
||||
var New = ProxyAck{}
|
||||
|
||||
func (p ProxyAck) Message(msg *v1.Message) (err error) {
|
||||
var data *ProxyAck
|
||||
gjson.DecodeTo(msg.Data, &data)
|
||||
//g.Dump(data)
|
||||
|
||||
g.Log().Debugf(gctx.New(), "收到ACK发送到端口:%v", data.Port)
|
||||
err = service.P2P().TcpAck(data.Port).Send(data.Data)
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user