diff options
-rw-r--r-- | config.go | 32 | ||||
-rw-r--r-- | content.go | 47 | ||||
-rw-r--r-- | run.go | 1 |
3 files changed, 54 insertions, 26 deletions
@@ -91,24 +91,34 @@ func Conf() Config { return config } -// UniquePoolServers returns a []Server where each -// MediaPool 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() -AppendLoop: + // every server needs a texturePool property for _, srv := range conf.Servers { - for _, s := range srvs { - if srv.MediaPool == s.MediaPool { - continue AppendLoop - } + if len(srv.MediaPool) == 0 { + srv.MediaPool = srv.Name } + } + + // map all to.. map of slices + for _, srv := range conf.Servers { + if srvs[srv.MediaPool] != nil { + srvs[srv.MediaPool] = append(srvs[srv.MediaPool], srv) + } else { + srvs[srv.MediaPool] = []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,27 +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 - var conn *net.UDPConn - conn, err = net.DialUDP("udp", nil, addr) - if err != nil { - return + 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 { + continue + } + + // get prefix of server + var prefix string + if len(srv.MediaPool) == 0 { + prefix = srv.Name + } else { + prefix = srv.MediaPool + } + + 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, srv.MediaPool) - 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") |