diff options
-rw-r--r-- | -p | 15 | ||||
-rw-r--r-- | client_conn.go | 23 | ||||
-rw-r--r-- | config.go | 30 | ||||
-rw-r--r-- | content.go | 2 | ||||
-rw-r--r-- | hop.go | 2 | ||||
-rw-r--r-- | main.go | 10 |
6 files changed, 39 insertions, 43 deletions
@@ -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 { @@ -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 } @@ -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 { @@ -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 @@ -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) }() } |