diff options
author | Riley <riley@e926.de> | 2022-05-01 20:52:17 +0200 |
---|---|---|
committer | Riley <riley@e926.de> | 2022-05-01 20:52:17 +0200 |
commit | fbf490c12b79d979bcc8076dde9a332926ad3642 (patch) | |
tree | 97ebb24fa82357d36b0b895d1135ca54f8325edb | |
parent | f525780f39758fc1e8fd3c6d3365eaba35cf6646 (diff) |
texturePool things regarding to Issue #101
-rw-r--r-- | config.go | 26 | ||||
-rw-r--r-- | content.go | 53 | ||||
-rw-r--r-- | run.go | 1 |
3 files changed, 47 insertions, 33 deletions
@@ -88,30 +88,34 @@ func Conf() Config { return config } -// UniquePoolServers returns a []server where each Pool is only -// represented once -func UniquePoolServers() []Server { - var srvs []Server +// UniquePoolServers returns a [][]server where each Pool is represented by a []Server +// of all servers that use one pool +func UniquePoolServers() [][]Server { + var srvs = make(map[string][]Server) conf := Conf() + // every server needs a texturePool property for _, srv := range conf.Servers { if len(srv.TexturePool) == 0 { srv.TexturePool = srv.Name } } -AddLoop: + // map all to.. map of slices for _, srv := range conf.Servers { - for _, srv2 := range srvs { - if srv.TexturePool == srv2.TexturePool { - continue AddLoop - } + if srvs[srv.TexturePool] != nil { + srvs[srv.TexturePool] = append(srvs[srv.TexturePool], srv) + } else { + srvs[srv.TexturePool] = []Server{srv} } + } - srvs = append(srvs, srv) + var res [][]Server + for _, srvsPool := range srvs { + res = append(res, srvsPool) } - return srvs + return res } // AddServer dynamically configures a new Server at runtime. @@ -496,35 +496,44 @@ func muxRemotes(conns []*contentConn) []string { func muxContent(userName string) (itemDefs []mt.ItemDef, aliases []struct{ Alias, Orig string }, nodeDefs []mt.NodeDef, p0Map param0Map, p0SrvMap param0SrvMap, media []mediaFile, remotes []string, err error) { var conns []*contentConn - for _, srv := range UniquePoolServers() { + for _, pools := range UniquePoolServers() { var addr *net.UDPAddr - addr, err = net.ResolveUDPAddr("udp", srv.Addr) - if err != nil { - return - } + found := false + + for _, srv := range pools { + addr, err = net.ResolveUDPAddr("udp", srv.Addr) + if err != nil { + continue + } - var conn *net.UDPConn - conn, err = net.DialUDP("udp", nil, addr) - if err != nil { - return - } + var conn *net.UDPConn + conn, err = net.DialUDP("udp", nil, addr) + if err != nil { + continue + } - // get prefix of server - var prefix string - if len(srv.TexturePool) == 0 { - prefix = srv.Name - } else { - prefix = srv.TexturePool + // get prefix of server + var prefix string + if len(srv.TexturePool) == 0 { + prefix = srv.Name + } else { + prefix = srv.TexturePool + } + + var cc *contentConn + cc, err = connectContent(conn, srv.Name, userName, prefix) + if err != nil { + continue + } + defer cc.Close() + + found = true + conns = append(conns, cc) } - var cc *contentConn - cc, err = connectContent(conn, srv.Name, userName, prefix) - if err != nil { + if !found { return } - defer cc.Close() - - conns = append(conns, cc) } itemDefs, aliases = muxItemDefs(conns) @@ -118,6 +118,7 @@ func runFunc() { } } + cc.Log(srv.Addr) addr, err := net.ResolveUDPAddr("udp", srv.Addr) if err != nil { cc.Log("<-", "address resolution fail") |