aboutsummaryrefslogtreecommitdiff
path: root/cmd/mt-multiserver-proxy/main.go
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2021-09-06 18:26:24 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2021-09-06 18:26:24 +0200
commitd87cc0484f99882b26f7cc2de2220459b58339ca (patch)
tree7e492028150e6a5f8d2aa1531754fbbcfb7ca683 /cmd/mt-multiserver-proxy/main.go
parent18a80c7a57639a540965f9b101db18c6490cd804 (diff)
Only load plugins once + memory optimisations
Diffstat (limited to 'cmd/mt-multiserver-proxy/main.go')
-rw-r--r--cmd/mt-multiserver-proxy/main.go147
1 files changed, 0 insertions, 147 deletions
diff --git a/cmd/mt-multiserver-proxy/main.go b/cmd/mt-multiserver-proxy/main.go
deleted file mode 100644
index e1b2b19..0000000
--- a/cmd/mt-multiserver-proxy/main.go
+++ /dev/null
@@ -1,147 +0,0 @@
-package main
-
-import (
- "errors"
- "log"
- "net"
- "os"
- "os/signal"
- "sync"
- "syscall"
-
- "github.com/HimbeerserverDE/mt-multiserver-proxy"
- "github.com/anon55555/mt"
-)
-
-func main() {
- if err := proxy.LoadConfig(); err != nil {
- log.Fatal("{←|⇶} ", err)
- }
-
- if !proxy.Conf().NoPlugins {
- if err := proxy.LoadPlugins(); err != nil {
- log.Fatal("{←|⇶} ", err)
- }
- }
-
- var err error
- switch proxy.Conf().AuthBackend {
- case "sqlite3":
- proxy.SetAuthBackend(proxy.AuthSQLite3{})
- default:
- log.Fatal("{←|⇶} invalid auth backend")
- }
-
- addr, err := net.ResolveUDPAddr("udp", proxy.Conf().BindAddr)
- if err != nil {
- log.Fatal("{←|⇶} ", err)
- }
-
- pc, err := net.ListenUDP("udp", addr)
- if err != nil {
- log.Fatal("{←|⇶} ", err)
- }
-
- l := proxy.Listen(pc)
- defer l.Close()
-
- log.Print("{←|⇶} listen ", l.Addr())
-
- go func() {
- sig := make(chan os.Signal, 1)
- signal.Notify(sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
- <-sig
-
- clts := l.Clts()
-
- var wg sync.WaitGroup
- wg.Add(len(clts))
-
- for cc := range clts {
- go func(cc *proxy.ClientConn) {
- ack, _ := cc.SendCmd(&mt.ToCltDisco{Reason: mt.Shutdown})
- select {
- case <-cc.Closed():
- case <-ack:
- cc.Close()
- }
-
- wg.Done()
- }(cc)
- }
-
- wg.Wait()
- os.Exit(0)
- }()
-
- for {
- cc, err := l.Accept()
- if err != nil {
- if errors.Is(err, net.ErrClosed) {
- log.Print("{←|⇶} stop listening")
- break
- }
-
- log.Print("{←|⇶} ", err)
- continue
- }
-
- go func() {
- <-cc.Init()
- cc.Log("<->", "handshake completed")
-
- if len(proxy.Conf().Servers) == 0 {
- cc.Log("<--", "no servers")
- ack, _ := cc.SendCmd(&mt.ToCltDisco{
- Reason: mt.Custom,
- Custom: "No servers are configured.",
- })
- select {
- case <-cc.Closed():
- case <-ack:
- cc.Close()
- }
-
- return
- }
-
- addr, err := net.ResolveUDPAddr("udp", proxy.Conf().Servers[0].Addr)
- if err != nil {
- cc.Log("<--", "address resolution fail")
- ack, _ := cc.SendCmd(&mt.ToCltDisco{
- Reason: mt.Custom,
- Custom: "Server address resolution failed.",
- })
- select {
- case <-cc.Closed():
- case <-ack:
- cc.Close()
- }
-
- return
- }
-
- conn, err := net.DialUDP("udp", nil, addr)
- if err != nil {
- cc.Log("<--", "connection fail")
-
- ack, _ := cc.SendCmd(&mt.ToCltDisco{
- Reason: mt.Custom,
- Custom: "Server connection failed.",
- })
-
- select {
- case <-cc.Closed():
- case <-ack:
- cc.Close()
- }
-
- return
- }
-
- proxy.Connect(conn, proxy.Conf().Servers[0].Name, cc)
- }()
- }
-
- select {}
-}