Support for master game ID.
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
$post_file = fopen("php://input", "rb");
|
||||
$log_file = fopen("log.".time().".gz", "wb");
|
||||
$post_file = fopen('php://input', 'rb');
|
||||
$log_file = fopen('log.'.time().'.gz', 'wb');
|
||||
$post_data = '';
|
||||
|
||||
while (!feof($post_file)) {
|
||||
@@ -11,4 +11,9 @@ fwrite($log_file, $post_data);
|
||||
|
||||
fclose($post_file);
|
||||
fclose($log_file);
|
||||
|
||||
foreach ($_SERVER as $key=>$value)
|
||||
{
|
||||
echo $key.': '.$value.'\n';
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user