aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiley <riley@e926.de>2022-05-01 20:52:17 +0200
committerRiley <riley@e926.de>2022-05-01 20:52:17 +0200
commitfbf490c12b79d979bcc8076dde9a332926ad3642 (patch)
tree97ebb24fa82357d36b0b895d1135ca54f8325edb
parentf525780f39758fc1e8fd3c6d3365eaba35cf6646 (diff)
texturePool things regarding to Issue #101
-rw-r--r--config.go26
-rw-r--r--content.go53
-rw-r--r--run.go1
3 files changed, 47 insertions, 33 deletions
diff --git a/config.go b/config.go
index 16e472c..a57ee4d 100644
--- a/config.go
+++ b/config.go
@@ -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.
diff --git a/content.go b/content.go
index 9696328..2436da7 100644
--- a/content.go
+++ b/content.go
@@ -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)
diff --git a/run.go b/run.go
index f7c1d72..4515651 100644
--- a/run.go
+++ b/run.go
@@ -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")