From e0e39bfb95e7b18272d225ababac6ee2513ec2ad Mon Sep 17 00:00:00 2001 From: HimbeerserverDE Date: Sat, 28 Aug 2021 11:44:54 +0200 Subject: [PATCH] Fix content handling --- content.go | 31 ++++++++++++++++++++++++++++--- main.go | 44 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/content.go b/content.go index 8bd207d..3c80e89 100644 --- a/content.go +++ b/content.go @@ -156,7 +156,6 @@ func handleContent(cc *contentConn) { cc.nodeDefs = append(cc.nodeDefs, def) } case *mt.ToCltAnnounceMedia: - // ToDo: OOB media support var filenames []string for _, f := range cmd.Files { @@ -255,9 +254,18 @@ func muxItemDefs(conns []*contentConn) ([]mt.ItemDef, []struct{ Alias, Orig stri go func() { <-cc.done() for _, def := range cc.itemDefs { - def.Name = cc.name + "_" + def.Name + if def.Name == "" { + def.Name = cc.name + "_hand" + } else { + def.Name = cc.name + "_" + def.Name + } + + def.InvImg = mt.Texture(cc.name) + "_" + def.InvImg + def.WieldImg = mt.Texture(cc.name) + "_" + def.WieldImg + def.Palette = mt.Texture(cc.name) + "_" + def.Palette + def.InvOverlay = mt.Texture(cc.name) + "_" + def.InvOverlay + def.WieldOverlay = mt.Texture(cc.name) + "_" + def.WieldOverlay itemDefs = append(itemDefs, def) - // ToDo: Hand mux } for _, alias := range cc.aliases { @@ -302,6 +310,23 @@ func muxNodeDefs(conns []*contentConn) (nodeDefs []mt.NodeDef, p0Map param0Map, def.Param0 = param0 def.Name = cc.name + "_" + def.Name + def.Mesh = cc.name + "_" + def.Mesh + for k, v := range def.Tiles { + def.Tiles[k].Texture = mt.Texture(cc.name) + "_" + v.Texture + } + for k, v := range def.OverlayTiles { + def.OverlayTiles[k].Texture = mt.Texture(cc.name) + "_" + v.Texture + } + for k, v := range def.SpecialTiles { + def.SpecialTiles[k].Texture = mt.Texture(cc.name) + "_" + v.Texture + } + def.Palette = mt.Texture(cc.name) + "_" + def.Palette + for k, v := range def.ConnectTo { + def.ConnectTo[k] = p0Map[cc.name][v] + } + def.FootstepSnd.Name = cc.name + "_" + def.FootstepSnd.Name + def.DiggingSnd.Name = cc.name + "_" + def.DiggingSnd.Name + def.DugSnd.Name = cc.name + "_" + def.DugSnd.Name nodeDefs = append(nodeDefs, def) param0++ diff --git a/main.go b/main.go index 74ba45b..5706830 100644 --- a/main.go +++ b/main.go @@ -38,7 +38,7 @@ func main() { l := listen(pc) defer l.close() - log.Print("{←|⇶} listening on ", l.addr()) + log.Print("{←|⇶} listen ", l.addr()) clts := make(map[*clientConn]struct{}) var mu sync.Mutex @@ -87,8 +87,46 @@ func main() { go func() { <-cc.init() cc.log("<->", "handshake completed") - // ToDo: establish serverConn - // and start handler goroutines + + if len(conf.Servers) == 0 { + cc.log("<--", "no servers") + ack, _ := cc.SendCmd(&mt.ToCltDisco{ + Reason: mt.Custom, + Custom: "No servers are configured.", + }) + <-ack + cc.Close() + return + } + + addr, err := net.ResolveUDPAddr("udp", conf.Servers[0].Addr) + if err != nil { + cc.log("<--", "address resolution fail") + ack, _ := cc.SendCmd(&mt.ToCltDisco{ + Reason: mt.Custom, + Custom: "Server address resolution failed.", + }) + <-ack + cc.Close() + return + } + + conn, err := net.DialUDP("udp", nil, addr) + if err != nil { + cc.log("<--", "connection fail") + ack, _ := cc.SendCmd(&mt.ToCltDisco{ + Reason: mt.Custom, + Custom: "Server connection failed.", + }) + <-ack + cc.Close() + return + } + + sc := connect(conn) + sc.clt = cc + cc.srv = sc + sc.log("-->", "connect") }() } }