2024-11-15 16:49:01 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
"git.pyer.club/kingecg/command"
|
|
|
|
"git.pyer.club/kingecg/gotunnelserver/client"
|
|
|
|
"git.pyer.club/kingecg/gotunnelserver/util"
|
|
|
|
)
|
|
|
|
|
|
|
|
type TunnelAgent struct {
|
2024-11-16 13:18:22 +08:00
|
|
|
Username string `flag_default:"tagent" flag_usage:"username for tunnel server"`
|
2024-11-15 16:49:01 +08:00
|
|
|
Salt string `flag_default:"" flag_usage:"salt for tunnel server"`
|
|
|
|
Address string `flag_default:"ws://127.0.0.1:8080" flag_usage:"address for tunnel server"`
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
cmdClient *client.CommandClient
|
|
|
|
dataEp *client.DataEndPoint
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
cargs := new(TunnelAgent)
|
|
|
|
v, _ := command.NewFVSet(cargs)
|
|
|
|
err := command.Parse(os.Args[1:], v)
|
|
|
|
if err != nil {
|
|
|
|
os.Exit(0)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
clientConfig := &client.ClientConfig{
|
|
|
|
Username: cargs.Username,
|
|
|
|
Salt: cargs.Salt,
|
|
|
|
Address: cargs.Address,
|
|
|
|
}
|
|
|
|
cmdClient = client.NewAgent(clientConfig)
|
|
|
|
cmdClient.On(util.CmdTypeMap[util.ConnectInited], func(args ...interface{}) {
|
|
|
|
playload, _ := args[0].(map[string]string)
|
|
|
|
sessionId := playload["sessionId"]
|
|
|
|
dataEp = client.NewDataEndPoint(cmdClient, sessionId)
|
|
|
|
dataEp.Host = playload["host"]
|
|
|
|
dataEp.Port, _ = strconv.Atoi(playload["port"])
|
|
|
|
log.Println("connect inited:", sessionId, dataEp.Host, dataEp.Port)
|
|
|
|
go dataEp.Connect()
|
|
|
|
})
|
|
|
|
cmdClient.On(util.CmdTypeMap[util.ErrorCmd], func(args ...interface{}) {
|
|
|
|
playload, _ := args[0].(map[string]string)
|
|
|
|
log.Println("error:", playload["error"])
|
|
|
|
os.Exit(1)
|
|
|
|
})
|
|
|
|
defer func() {
|
|
|
|
if r := recover(); r != nil {
|
|
|
|
log.Println(r)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
cmdClient.Start()
|
|
|
|
}
|