增加代理接口

This commit is contained in:
2025-10-30 11:13:47 +08:00
parent 2f4097b697
commit 31d1b3d27e
18 changed files with 274 additions and 104 deletions

View 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,
}

View 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")
}

View 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
}

View 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
}