diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-10-24 15:35:12 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-10-24 15:35:12 +0200 |
commit | 627c0643e7d8d158741dc2b34efde3ecd89bd78d (patch) | |
tree | 0a7270f9f76e1ba57d2fd58231006f4b4d1c6eb1 | |
parent | 89644e4702c824f5080ae9ebcf49ff45031f4e00 (diff) |
Send user to the last server they were connected to
This implements #67
-rw-r--r-- | config.go | 3 | ||||
-rw-r--r-- | doc/config.md | 8 | ||||
-rw-r--r-- | hop.go | 4 | ||||
-rw-r--r-- | run.go | 18 |
4 files changed, 29 insertions, 4 deletions
@@ -36,7 +36,8 @@ type Config struct { Name string Addr string } - CSMRF struct { + ForceDefaultSrv bool + CSMRF struct { NoCSMs bool ChatMsgs bool ItemDefs bool diff --git a/doc/config.md b/doc/config.md index 2ebc2c5..c082667 100644 --- a/doc/config.md +++ b/doc/config.md @@ -96,6 +96,14 @@ Default: "" Description: The network address and port of an internal server. ``` +> `ForceDefaultSrv` +``` +Type: bool +Default: false +Description: Players are connected to the default server instead of +the server they were playing on if this is true. +``` + > `CSMRF` ``` Type: CSMRF @@ -156,5 +156,9 @@ func (cc *ClientConn) Hop(serverName string) error { cc.server().SendCmd(&mt.ToSrvJoinModChan{Channel: ch}) } + if !Conf().ForceDefaultSrv { + return authIface.SetLastSrv(cc.Name(), serverName) + } + return nil } @@ -97,13 +97,25 @@ func Run() { <-cc.Init() cc.Log("<->", "handshake completed") - if len(Conf().Servers) == 0 { + srvs := Conf().Servers + if len(srvs) == 0 { cc.Log("<-", "no servers") cc.Kick("No servers are configured.") return } - addr, err := net.ResolveUDPAddr("udp", Conf().Servers[0].Addr) + srv := srvs[0] + lastSrv, err := authIface.LastSrv(cc.Name()) + if err != nil && !Conf().ForceDefaultSrv && lastSrv != srv.Name { + for _, v := range srvs { + if v.Name == lastSrv { + srv = v + break + } + } + } + + addr, err := net.ResolveUDPAddr("udp", srv.Addr) if err != nil { cc.Log("<-", "address resolution fail") cc.Kick("Server address resolution failed.") @@ -117,7 +129,7 @@ func Run() { return } - connect(conn, Conf().Servers[0].Name, cc) + connect(conn, srv.Name, cc) }() } |