From 2efd47c301d8beecaaa4cad1d7b0315ef73b33af Mon Sep 17 00:00:00 2001 From: pztrn Date: Thu, 6 Oct 2016 17:11:36 +0500 Subject: [PATCH] Servers updating and ping detection fixes. On servers updating when all data successfully gathered we're now properly updating rows in Servers and Favorites lists. Increased "simultaneous ping limit" for now, but anyway it provides too bad results. Need to find a way to fix it. --- cachemodels/server.go | 6 ++-- requester/pooler.go | 7 ++--- ui/mainwindow.go | 73 ++++++++++++++++++++++--------------------- 3 files changed, 44 insertions(+), 42 deletions(-) diff --git a/cachemodels/server.go b/cachemodels/server.go index 91939c4..30879cf 100644 --- a/cachemodels/server.go +++ b/cachemodels/server.go @@ -19,6 +19,8 @@ import ( type Server struct { Server *datamodels.Server - TreeIter gtk.TreeIter - IterSet bool + AllServersIter *gtk.TreeIter + FavServersIter *gtk.TreeIter + AllServersIterSet bool + FavServersIterSet bool } diff --git a/requester/pooler.go b/requester/pooler.go index c810714..da2bb1a 100644 --- a/requester/pooler.go +++ b/requester/pooler.go @@ -33,7 +33,8 @@ type Pooler struct { func (p *Pooler) Initialize() { fmt.Println("Initializing requester goroutine pooler...") - p.maxrequests = runtime.NumCPU() * 4 + // ToDo: figure out how to make this work nice. + p.maxrequests = runtime.NumCPU() * 2000 p.pp = "\377\377\377\377" } @@ -99,7 +100,6 @@ func (p *Pooler) pingServersExecutor(server *datamodels.Server) error { conn_ping.Close() delta := strconv.Itoa(int(time.Since(start_p).Nanoseconds()) / 1000000) - fmt.Println(delta) server.Ping = delta return nil @@ -202,8 +202,5 @@ func (p *Pooler) updateSpecificServer(server *datamodels.Server) error { // ToDo: Calculate ping. 0 for now. server.Ping = "0" - - fmt.Println(server) - return nil } diff --git a/ui/mainwindow.go b/ui/mainwindow.go index 84fb7bb..4180e9d 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -14,7 +14,6 @@ import ( "encoding/base64" "errors" "fmt" - "reflect" "runtime" "strconv" "strings" @@ -891,33 +890,31 @@ func (m *MainWindow) launchGame() error { func (m *MainWindow) loadAllServers() { fmt.Println("Loading all servers...") // ToDo: do it without clearing. - srv_addrs := reflect.ValueOf(ctx.Cache.Servers).MapKeys() - fmt.Println(srv_addrs) for _, server := range ctx.Cache.Servers { if m.all_servers_hide_offline.GetActive() && server.Server.Name == "" && server.Server.Players == "" { continue } - var iter gtk.TreeIter - if !server.IterSet { - server.TreeIter = iter - m.all_servers_store.Append(&iter) - server.IterSet = true + iter := new (gtk.TreeIter) + if !server.AllServersIterSet { + server.AllServersIter = iter + m.all_servers_store.Append(iter) + server.AllServersIterSet = true } else { - iter = server.TreeIter + iter = server.AllServersIter } if server.Server.Name == "" && server.Server.Players == "" { - m.all_servers_store.Set(&iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_NO, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) + m.all_servers_store.Set(iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_NO, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) } else { - m.all_servers_store.Set(&iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_OK, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) + m.all_servers_store.Set(iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_OK, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) } server_name := ctx.Colorizer.Fix(server.Server.Name) - m.all_servers_store.Set(&iter, 1, server_name) - m.all_servers_store.Set(&iter, 2, m.gamemodes[server.Server.Gamemode]) - m.all_servers_store.Set(&iter, 3, server.Server.Map) - m.all_servers_store.Set(&iter, 4, server.Server.Players + "/" + server.Server.Maxplayers) - m.all_servers_store.Set(&iter, 5, server.Server.Ping) - m.all_servers_store.Set(&iter, 6, server.Server.Version) - m.all_servers_store.Set(&iter, 7, server.Server.Ip + ":" + server.Server.Port) + m.all_servers_store.SetValue(iter, 1, server_name) + m.all_servers_store.SetValue(iter, 2, m.gamemodes[server.Server.Gamemode]) + m.all_servers_store.SetValue(iter, 3, server.Server.Map) + m.all_servers_store.SetValue(iter, 4, server.Server.Players + "/" + server.Server.Maxplayers) + m.all_servers_store.SetValue(iter, 5, server.Server.Ping) + m.all_servers_store.SetValue(iter, 6, server.Server.Version) + m.all_servers_store.SetValue(iter, 7, server.Server.Ip + ":" + server.Server.Port) } } @@ -930,27 +927,31 @@ func (m *MainWindow) loadFavoriteServers() { if m.fav_servers_hide_offline.GetActive() && server.Server.Name == "" && server.Server.Players == "" { continue } - var iter gtk.TreeIter - if !server.IterSet { - server.TreeIter = iter - m.fav_servers_store.Append(&iter) - server.IterSet = true + iter := new(gtk.TreeIter) + if !server.FavServersIterSet { + server.FavServersIter = iter + m.fav_servers_store.Append(iter) + server.FavServersIterSet = true } else { - iter = server.TreeIter + iter = server.FavServersIter } - if server.Server.Name == "" && server.Server.Players == "" { - m.fav_servers_store.Set(&iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_NO, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) + if m.fav_servers_store.IterIsValid(iter) { + if server.Server.Name == "" && server.Server.Players == "" { + m.fav_servers_store.Set(iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_NO, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) + } else { + m.fav_servers_store.Set(iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_OK, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) + } + server_name := ctx.Colorizer.Fix(server.Server.Name) + m.fav_servers_store.SetValue(iter, 1, server_name) + m.fav_servers_store.SetValue(iter, 2, m.gamemodes[server.Server.Gamemode]) + m.fav_servers_store.SetValue(iter, 3, server.Server.Map) + m.fav_servers_store.SetValue(iter, 4, server.Server.Players + "/" + server.Server.Maxplayers) + m.fav_servers_store.SetValue(iter, 5, server.Server.Ping) + m.fav_servers_store.SetValue(iter, 6, server.Server.Version) + m.fav_servers_store.SetValue(iter, 7, server.Server.Ip + ":" + server.Server.Port) } else { - m.fav_servers_store.Set(&iter, 0, gtk.NewImage().RenderIcon(gtk.STOCK_OK, gtk.ICON_SIZE_SMALL_TOOLBAR, "").GPixbuf) + fmt.Println("Invalid iter for server: " + server.Server.Ip + ":" + server.Server.Port) } - server_name := ctx.Colorizer.Fix(server.Server.Name) - m.fav_servers_store.Set(&iter, 1, server_name) - m.fav_servers_store.Set(&iter, 2, m.gamemodes[server.Server.Gamemode]) - m.fav_servers_store.Set(&iter, 3, server.Server.Map) - m.fav_servers_store.Set(&iter, 4, server.Server.Players + "/" + server.Server.Maxplayers) - m.fav_servers_store.Set(&iter, 5, server.Server.Ping) - m.fav_servers_store.Set(&iter, 6, server.Server.Version) - m.fav_servers_store.Set(&iter, 7, server.Server.Ip + ":" + server.Server.Port) } } @@ -992,10 +993,12 @@ func (m *MainWindow) showHide() { } } +// Show tray menu on right-click on tray icon. func (m *MainWindow) showTrayMenu(cbx *glib.CallbackContext) { m.tray_menu.Popup(nil, nil, gtk.StatusIconPositionMenu, m.tray_icon, uint(cbx.Args(0)), uint32(cbx.Args(1))) } +// Unlocking interface after game shut down. func (m *MainWindow) unlockInterface() { m.launch_button.SetSensitive(true) m.statusbar.Push(m.statusbar_context_id, "URTrator is ready.")