aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r---p15
-rw-r--r--client_conn.go23
-rw-r--r--config.go30
-rw-r--r--content.go2
-rw-r--r--hop.go2
-rw-r--r--main.go10
6 files changed, 39 insertions, 43 deletions
diff --git a/-p b/-p
deleted file mode 100644
index f329e3a..0000000
--- a/-p
+++ /dev/null
@@ -1,15 +0,0 @@
-00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
-00000010: 0000 0010 0000 0010 0806 0000 001f f3ff ................
-00000020: 6100 0000 0173 5247 4200 aece 1ce9 0000 a....sRGB.......
-00000030: 0006 624b 4744 008b 00b9 00f9 319b b5db ..bKGD......1...
-00000040: 0000 0009 7048 5973 0000 0b13 0000 0b13 ....pHYs........
-00000050: 0100 9a9c 1800 0000 0774 494d 4507 e102 .........tIME...
-00000060: 090e 371e 7692 ce30 0000 000c 6954 5874 ..7.v..0....iTXt
-00000070: 436f 6d6d 656e 7400 0000 0000 bcae b299 Comment.........
-00000080: 0000 0049 4944 4154 38cb 63e8 def9 f33f ...IIDAT8.c....?
-00000090: 0310 904b 5304 c086 50c5 249a bae0 3f10 ...KS...P.$...?.
-000000a0: d0cf 05ff 9100 ba0b 9069 a25c 458c 46bc .........i.\E.F.
-000000b0: 2ec0 6600 0329 8145 8c01 282e 20c7 00ac ..f..).E..(. ...
-000000c0: ae20 c50b 4324 2512 6f12 9934 00f0 bce0 . ..C$%.o..4....
-000000d0: 8954 1981 2400 0000 0049 454e 44ae 4260 .T..$....IEND.B`
-000000e0: 82 .
diff --git a/client_conn.go b/client_conn.go
index 7971313..cec49df 100644
--- a/client_conn.go
+++ b/client_conn.go
@@ -230,7 +230,7 @@ func handleClt(cc *clientConn) {
}
// user limit
- if len(players) >= conf.UserLimit {
+ if len(players) >= conf().UserLimit {
cc.log("<--", "player limit reached")
ack, _ := cc.SendCmd(&mt.ToCltDisco{Reason: mt.TooManyClts})
@@ -276,7 +276,7 @@ func handleClt(cc *clientConn) {
salt, srpA, srpB, srpM, srpK []byte
}{}
- if cmd.EmptyPasswd && conf.RequirePasswd {
+ if cmd.EmptyPasswd && conf().RequirePasswd {
cc.log("<--", "empty password disallowed")
ack, _ := cc.SendCmd(&mt.ToCltDisco{Reason: mt.EmptyPasswd})
@@ -306,7 +306,7 @@ func handleClt(cc *clientConn) {
cc.SendCmd(&mt.ToCltAcceptAuth{
PlayerPos: mt.Pos{0, 5, 0},
MapSeed: 0,
- SendInterval: conf.SendInterval,
+ SendInterval: conf().SendInterval,
SudoAuthMethods: mt.SRP,
})
} else {
@@ -439,7 +439,7 @@ func handleClt(cc *clientConn) {
cc.SendCmd(&mt.ToCltAcceptAuth{
PlayerPos: mt.Pos{0, 5, 0},
MapSeed: 0,
- SendInterval: conf.SendInterval,
+ SendInterval: conf().SendInterval,
SudoAuthMethods: mt.SRP,
})
}
@@ -499,28 +499,28 @@ func handleClt(cc *clientConn) {
cc.lang = cmd.Lang
var csmrf mt.CSMRestrictionFlags
- if conf.CSMRF.NoCSMs {
+ if conf().CSMRF.NoCSMs {
csmrf |= mt.NoCSMs
}
- if !conf.CSMRF.ChatMsgs {
+ if !conf().CSMRF.ChatMsgs {
csmrf |= mt.NoChatMsgs
}
- if !conf.CSMRF.ItemDefs {
+ if !conf().CSMRF.ItemDefs {
csmrf |= mt.NoItemDefs
}
- if !conf.CSMRF.NodeDefs {
+ if !conf().CSMRF.NodeDefs {
csmrf |= mt.NoNodeDefs
}
- if !conf.CSMRF.NoLimitMapRange {
+ if !conf().CSMRF.NoLimitMapRange {
csmrf |= mt.LimitMapRange
}
- if !conf.CSMRF.PlayerList {
+ if !conf().CSMRF.PlayerList {
csmrf |= mt.NoPlayerList
}
cc.SendCmd(&mt.ToCltCSMRestrictionFlags{
Flags: csmrf,
- MapRange: conf.MapRange,
+ MapRange: conf().MapRange,
})
case *mt.ToSrvReqMedia:
cc.sendMedia(cmd.Filenames)
@@ -550,7 +550,6 @@ func handleClt(cc *clientConn) {
cc.log("-->", "no server")
break
}
- go cc.hop("Map2")
cc.server().SendCmd(cmd)
case *mt.ToSrvDeletedBlks:
if cc.server() == nil {
diff --git a/config.go b/config.go
index e67d4ac..89249b6 100644
--- a/config.go
+++ b/config.go
@@ -5,6 +5,7 @@ import (
"log"
"os"
"path/filepath"
+ "sync"
)
const latestSerializeVer = 28
@@ -18,7 +19,8 @@ const defaultUserLimit = 10
const defaultAuthBackend = "sqlite3"
const defaultBindAddr = ":40000"
-var conf Config
+var config Config
+var configMu sync.RWMutex
type Config struct {
RequirePasswd bool
@@ -41,13 +43,23 @@ type Config struct {
MapRange uint32
}
+func conf() Config {
+ configMu.RLock()
+ defer configMu.RUnlock()
+
+ return config
+}
+
func loadConfig() error {
- oldConf := conf
+ configMu.Lock()
+ defer configMu.Unlock()
+
+ oldConf := config
- conf.SendInterval = defaultSendInterval
- conf.UserLimit = defaultUserLimit
- conf.AuthBackend = defaultAuthBackend
- conf.BindAddr = defaultBindAddr
+ config.SendInterval = defaultSendInterval
+ config.UserLimit = defaultUserLimit
+ config.AuthBackend = defaultAuthBackend
+ config.BindAddr = defaultBindAddr
executable, err := os.Executable()
if err != nil {
@@ -57,7 +69,7 @@ func loadConfig() error {
path := filepath.Dir(executable) + "/config.json"
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0666)
if err != nil {
- conf = oldConf
+ config = oldConf
return err
}
defer f.Close()
@@ -68,8 +80,8 @@ func loadConfig() error {
}
decoder := json.NewDecoder(f)
- if err := decoder.Decode(&conf); err != nil {
- conf = oldConf
+ if err := decoder.Decode(&config); err != nil {
+ config = oldConf
return err
}
diff --git a/content.go b/content.go
index 50791ca..890e571 100644
--- a/content.go
+++ b/content.go
@@ -423,7 +423,7 @@ func muxMedia(conns []*contentConn) []mediaFile {
func muxContent(userName string) (itemDefs []mt.ItemDef, aliases []struct{ Alias, Orig string }, nodeDefs []mt.NodeDef, p0Map param0Map, p0SrvMap param0SrvMap, media []mediaFile, err error) {
var conns []*contentConn
- for _, srv := range conf.Servers {
+ for _, srv := range conf().Servers {
var addr *net.UDPAddr
addr, err = net.ResolveUDPAddr("udp", srv.Addr)
if err != nil {
diff --git a/hop.go b/hop.go
index 3c6f82d..26beb3e 100644
--- a/hop.go
+++ b/hop.go
@@ -21,7 +21,7 @@ func (cc *clientConn) hop(serverName string) error {
}
var strAddr string
- for _, srv := range conf.Servers {
+ for _, srv := range conf().Servers {
if srv.Name == serverName {
strAddr = srv.Addr
break
diff --git a/main.go b/main.go
index a1bf2b8..2a9c123 100644
--- a/main.go
+++ b/main.go
@@ -18,14 +18,14 @@ func main() {
}
var err error
- switch conf.AuthBackend {
+ switch conf().AuthBackend {
case "sqlite3":
authIface = authSQLite3{}
default:
log.Fatal("{←|⇶} invalid auth backend")
}
- addr, err := net.ResolveUDPAddr("udp", conf.BindAddr)
+ addr, err := net.ResolveUDPAddr("udp", conf().BindAddr)
if err != nil {
log.Fatal("{←|⇶} ", err)
}
@@ -102,7 +102,7 @@ func main() {
<-cc.init()
cc.log("<->", "handshake completed")
- if len(conf.Servers) == 0 {
+ if len(conf().Servers) == 0 {
cc.log("<--", "no servers")
ack, _ := cc.SendCmd(&mt.ToCltDisco{
Reason: mt.Custom,
@@ -117,7 +117,7 @@ func main() {
return
}
- addr, err := net.ResolveUDPAddr("udp", conf.Servers[0].Addr)
+ addr, err := net.ResolveUDPAddr("udp", conf().Servers[0].Addr)
if err != nil {
cc.log("<--", "address resolution fail")
ack, _ := cc.SendCmd(&mt.ToCltDisco{
@@ -151,7 +151,7 @@ func main() {
return
}
- connect(conn, conf.Servers[0].Name, cc)
+ connect(conn, conf().Servers[0].Name, cc)
}()
}