From fd014e15a54a956654385dfa7e1672d8005389ff Mon Sep 17 00:00:00 2001 From: Matthew Bowra-Dean Date: Fri, 28 May 2010 23:22:08 +1200 Subject: [PATCH] Support for master game ID. --- OpenRA.Game/Game.cs | 3 ++- OpenRA.Game/Server/MasterServerQuery.cs | 1 + OpenRA.Game/Server/Server.cs | 10 ++++++++++ OpenRA.Game/Support/Program.cs | 6 ++++-- .../Widgets/Delegates/ConnectionDialogsDelegate.cs | 2 +- .../Widgets/Delegates/CreateServerMenuDelegate.cs | 2 +- OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs | 4 ++-- web/logs/upload.php | 9 +++++++-- web/master/list.php | 4 +++- 9 files changed, 31 insertions(+), 10 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 08fecd814f..253200c5ed 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -175,12 +175,13 @@ namespace OpenRA internal static string CurrentHost = ""; internal static int CurrentPort = 0; - internal static void JoinServer(string host, int port) + internal static void JoinServer(int id, string host, int port) { if (orderManager != null) orderManager.Dispose(); CurrentHost = host; CurrentPort = port; + MasterGameID = id; orderManager = new OrderManager(new NetworkConnection(host, port), ChooseReplayFilename()); } diff --git a/OpenRA.Game/Server/MasterServerQuery.cs b/OpenRA.Game/Server/MasterServerQuery.cs index 627a6e7b70..8bb07af431 100644 --- a/OpenRA.Game/Server/MasterServerQuery.cs +++ b/OpenRA.Game/Server/MasterServerQuery.cs @@ -48,6 +48,7 @@ namespace OpenRA.Server class GameServer { + public readonly int Id = 0; public readonly string Name = null; public readonly string Address = null; public readonly int State = 0; diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 130c1d4e10..6b1606a8d3 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -28,6 +28,7 @@ using System.Net.Sockets; using System.Security.Cryptography; using System.Threading; using OpenRA.FileFormats; +using System.Text; namespace OpenRA.Server { @@ -540,11 +541,14 @@ namespace OpenRA.Server if (wc.IsBusy || !isInternetServer) return; var url = "ping.php?port={0}&name={1}&state={2}&players={3}&mods={4}&map={5}"; + wc.DownloadDataCompleted += PingMasterServerResponse; if (isInitialPing) { url += "&new=1"; isInitialPing = false; } + else + wc.DownloadDataCompleted -= PingMasterServerResponse; wc.DownloadDataAsync(new Uri( masterServerUrl + url.F( @@ -556,5 +560,11 @@ namespace OpenRA.Server lastPing = Environment.TickCount; } + + static void PingMasterServerResponse(object sender, DownloadDataCompletedEventArgs e) + { + string s = Encoding.UTF8.GetString(e.Result); + int.TryParse(s.Trim(), out Game.MasterGameID); + } } } diff --git a/OpenRA.Game/Support/Program.cs b/OpenRA.Game/Support/Program.cs index a364bbcb8e..647fe23799 100644 --- a/OpenRA.Game/Support/Program.cs +++ b/OpenRA.Game/Support/Program.cs @@ -49,12 +49,12 @@ namespace OpenRA catch( Exception e ) { Log.Write( "{0}", e.ToString() ); - UploadLog(); + UploadLog(Game.MasterGameID); throw; } } - static void UploadLog() + static void UploadLog(int gameId) { Log.Close(); var logfile = File.OpenRead(Log.Filename); @@ -71,11 +71,13 @@ namespace OpenRA request.ContentType = "application/x-gzip"; request.ContentLength = buffer.Length; request.Method = "POST"; + request.Headers.Add("Game-ID", gameId.ToString()); using (var requestStream = request.GetRequestStream()) requestStream.Write(buffer, 0, buffer.Length); var response = (HttpWebResponse)request.GetResponse(); + MessageBox.Show(response.GetResponseStream().ReadAllText()); } static void Run( string[] args ) diff --git a/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs b/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs index 6af772931c..5821cf19d0 100644 --- a/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs @@ -36,7 +36,7 @@ namespace OpenRA.Widgets.Delegates return true; }; r.GetWidget("CONNECTION_BUTTON_RETRY").OnMouseUp = mi => { - Game.JoinServer(Game.CurrentHost, Game.CurrentPort); + Game.JoinServer(Game.MasterGameID, Game.CurrentHost, Game.CurrentPort); return true; }; diff --git a/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs b/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs index 2e8dad4391..de6192212a 100644 --- a/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs @@ -58,7 +58,7 @@ namespace OpenRA.Widgets.Delegates Game.Settings.ExternalPort, mods, map); Log.Write("Joining server"); - Game.JoinServer(IPAddress.Loopback.ToString(), Game.Settings.ListenPort); + Game.JoinServer(0, IPAddress.Loopback.ToString(), Game.Settings.ListenPort); return true; }; diff --git a/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs b/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs index b194aa51c5..38b1576271 100644 --- a/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs @@ -76,7 +76,7 @@ namespace OpenRA.Widgets.Delegates OnMouseUp = nmi => { r.GetWidget("JOINSERVER_BG").Visible = false; - Game.JoinServer(g.Address.Split(':')[0], int.Parse(g.Address.Split(':')[1])); + Game.JoinServer(g.Id, g.Address.Split(':')[0], int.Parse(g.Address.Split(':')[1])); return true; }, }; @@ -128,7 +128,7 @@ namespace OpenRA.Widgets.Delegates r.GetWidget("JOINSERVER_BUTTON_DIRECTCONNECT").OnMouseUp = mi => { /* rude hack. kill this as soon as we can do a direct connect via the commandline */ r.CloseWindow(); - Game.JoinServer(Game.Settings.NetworkHost, Game.Settings.NetworkPort); + Game.JoinServer(0, Game.Settings.NetworkHost, Game.Settings.NetworkPort); return true; }; } diff --git a/web/logs/upload.php b/web/logs/upload.php index 53fc40910f..cb518e12ed 100644 --- a/web/logs/upload.php +++ b/web/logs/upload.php @@ -1,6 +1,6 @@ $value) +{ + echo $key.': '.$value.'\n'; +} ?> diff --git a/web/master/list.php b/web/master/list.php index 7656c72fda..a2f187ae38 100644 --- a/web/master/list.php +++ b/web/master/list.php @@ -6,9 +6,11 @@ $db = new PDO('sqlite:openra.db'); $stale = 60 * 5; $result = $db->query('SELECT * FROM servers WHERE (' . time() . ' - ts < ' . $stale . ')'); + $n = 0; foreach ( $result as $row ) { - echo "Game@" . $row['id'] . ":\n"; + echo "Game@" . $n++ . ":\n"; + echo "\tId: " . $row['id'] . "\n"; echo "\tName: " . $row['name'] . "\n"; echo "\tAddress: " . $row['address'] . "\n"; echo "\tState: " . $row['state'] . "\n";