diff --git a/OpenRA.Server/Connection.cs b/OpenRA.Server/Connection.cs index a905ad6a17..50962f5d26 100644 --- a/OpenRA.Server/Connection.cs +++ b/OpenRA.Server/Connection.cs @@ -16,7 +16,6 @@ namespace OpenRA.Server public int Frame = 0; /* client data */ - public bool IsReady; public int PlayerIndex; public byte[] PopBytes(int n) @@ -25,6 +24,11 @@ namespace OpenRA.Server data.RemoveRange(0, n); return result.ToArray(); } + + /* file server state */ + public int NextChunk = 0; + public int NumChunks = 0; + public Stream Stream = null; } enum ReceiveState { Header, Data }; diff --git a/OpenRA.Server/Server.cs b/OpenRA.Server/Server.cs index 11a7e06f18..9287c4e9de 100644 --- a/OpenRA.Server/Server.cs +++ b/OpenRA.Server/Server.cs @@ -16,6 +16,7 @@ namespace OpenRA.Server static Dictionary> inFlightFrames = new Dictionary>(); static Session lobbyInfo = new Session(); + static bool GameStarted = false; public static void Main(string[] args) { @@ -223,7 +224,7 @@ namespace OpenRA.Server { "race", s => { - if (conn.IsReady) + if (GameStarted) { DispatchOrdersToClient(conn, 0, new ServerOrder( conn.PlayerIndex, "Chat", @@ -245,7 +246,7 @@ namespace OpenRA.Server { "pal", s => { - if (conn.IsReady) + if (GameStarted) { DispatchOrdersToClient(conn, 0, new ServerOrder( conn.PlayerIndex, "Chat", @@ -275,7 +276,7 @@ namespace OpenRA.Server return true; } - if (conn.IsReady) + if (GameStarted) { DispatchOrdersToClient(conn, 0, new ServerOrder( conn.PlayerIndex, "Chat", @@ -309,15 +310,22 @@ namespace OpenRA.Server switch (so.Name) { case "ToggleReady": - conn.IsReady ^= true; + // if we're downloading, we can't ready up. - Console.WriteLine("Player @{0} is {1}", - conn.socket.RemoteEndPoint, conn.IsReady ? "ready" : "not ready"); + var client = lobbyInfo.Clients[conn.PlayerIndex]; + if (client.State == Session.ClientState.NotReady) + client.State = Session.ClientState.Ready; + else if (client.State == Session.ClientState.Ready) + client.State = Session.ClientState.NotReady; + + Console.WriteLine("Player @{0} is {1}", + conn.socket.RemoteEndPoint, client.State); // start the game if everyone is ready. - if (conns.All(c => c.IsReady)) + if (conns.All(c => lobbyInfo.Clients[c.PlayerIndex].State == Session.ClientState.Ready)) { Console.WriteLine("All players are ready. Starting the game!"); + GameStarted = true; DispatchOrders(null, 0, new ServerOrder(0, "StartGame", "").Serialize()); } @@ -336,6 +344,11 @@ namespace OpenRA.Server foreach (var c in conns.Except(conn).ToArray()) DispatchOrdersToClient(c, 0, so.Serialize()); break; + + case "RequestFile": + Console.WriteLine("** Requesting file: `{0}`", so.Data); + // todo: start serving! + break; } } @@ -374,6 +387,7 @@ namespace OpenRA.Server Console.WriteLine("Server emptied out; doing a bit of housekeeping to prepare for next game.."); inFlightFrames.Clear(); lobbyInfo = new Session(); + GameStarted = false; } static void SyncLobbyInfo() diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 48ec5768a7..15a65ba70a 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -160,13 +160,12 @@ namespace OpenRa.Game buttons.Clear(); renderer.Device.DisableScissor(); - renderer.DrawText("RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\nReady: {4} (F8 to toggle)".F( + renderer.DrawText("RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\n".F( Game.RenderFrame, Game.orderManager.FrameNumber, PerfHistory.items["render"].LastValue, - PerfHistory.items["tick_time"].LastValue, - Game.LocalPlayer.IsReady ? "Yes" : "No" - ), new int2(140, 15), Color.White); + PerfHistory.items["tick_time"].LastValue), + new int2(140, 15), Color.White); if (Game.Settings.PerfGraph) PerfHistory.Render(renderer, Game.worldRenderer.lineRenderer); diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index 6be9b4fc8a..6d03fc3e2c 100755 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -146,10 +146,8 @@ namespace OpenRa.Game /* hack hack hack */ if (e.KeyCode == Keys.F8 && !Game.orderManager.GameStarted) { - Game.LocalPlayer.IsReady ^= true; Game.controller.AddOrder( - new Order( "ToggleReady", Game.LocalPlayer.PlayerActor, null, int2.Zero, - Game.LocalPlayer.IsReady ? "ready" : "not ready") { IsImmediate = true }); + new Order( "ToggleReady", Game.LocalPlayer.PlayerActor, null, int2.Zero, "") { IsImmediate = true }); } /* temporary hack: DO NOT LEAVE IN */ diff --git a/OpenRa.Game/Player.cs b/OpenRa.Game/Player.cs index 2cb84bd562..8463b2a6e6 100644 --- a/OpenRa.Game/Player.cs +++ b/OpenRa.Game/Player.cs @@ -26,8 +26,6 @@ namespace OpenRa.Game public int PowerProvided = 0; public int PowerDrained = 0; - public bool IsReady; - public Shroud Shroud = new Shroud(); public Dictionary SupportPowers;