aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2021-10-24 15:35:12 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2021-10-24 15:35:12 +0200
commit627c0643e7d8d158741dc2b34efde3ecd89bd78d (patch)
tree0a7270f9f76e1ba57d2fd58231006f4b4d1c6eb1
parent89644e4702c824f5080ae9ebcf49ff45031f4e00 (diff)
Send user to the last server they were connected to
This implements #67
-rw-r--r--config.go3
-rw-r--r--doc/config.md8
-rw-r--r--hop.go4
-rw-r--r--run.go18
4 files changed, 29 insertions, 4 deletions
diff --git a/config.go b/config.go
index 02eb9e5..39f9cf2 100644
--- a/config.go
+++ b/config.go
@@ -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
diff --git a/hop.go b/hop.go
index 2626d03..7dc56b6 100644
--- a/hop.go
+++ b/hop.go
@@ -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
}
diff --git a/run.go b/run.go
index b03d44a..bca6348 100644
--- a/run.go
+++ b/run.go
@@ -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)
}()
}