Add a mechanism for custom drop messages. Implement for kick.

This commit is contained in:
Paul Chote
2011-01-15 13:49:18 +13:00
parent d835c14988
commit 06612d0f68
6 changed files with 19 additions and 11 deletions

View File

@@ -27,6 +27,7 @@ namespace OpenRA.Network
public readonly string Host; public readonly string Host;
public readonly int Port; public readonly int Port;
public string ServerError;
public int NetFrameNumber { get; private set; } public int NetFrameNumber { get; private set; }
public int LocalFrameNumber; public int LocalFrameNumber;

View File

@@ -128,7 +128,9 @@ namespace OpenRA.Network
orderManager.IssueOrder(Order.HandshakeResponse(response.Serialize())); orderManager.IssueOrder(Order.HandshakeResponse(response.Serialize()));
break; break;
} }
case "ServerError":
orderManager.ServerError = order.TargetString;
break;
case "SyncInfo": case "SyncInfo":
{ {
orderManager.LobbyInfo = Session.Deserialize(order.TargetString); orderManager.LobbyInfo = Session.Deserialize(order.TargetString);

View File

@@ -309,9 +309,14 @@ namespace OpenRA.Server
} }
public void SendChatTo(Connection conn, string text) public void SendChatTo(Connection conn, string text)
{
SendOrderTo(conn, "Chat", text);
}
public void SendOrderTo(Connection conn, string order, string data)
{ {
DispatchOrdersToClient(conn, 0, 0, DispatchOrdersToClient(conn, 0, 0,
new ServerOrder("Chat", text).Serialize()); new ServerOrder(order, data).Serialize());
} }
public void SendChat(Connection asConn, string text) public void SendChat(Connection asConn, string text)

View File

@@ -242,6 +242,7 @@ namespace OpenRA.Mods.RA.Server
return true; return true;
} }
server.SendOrderTo(connToKick, "ServerError", "You have been kicked from the server");
server.DropClient(connToKick); server.DropClient(connToKick);
server.SyncLobbyInfo(); server.SyncLobbyInfo();

View File

@@ -37,8 +37,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public ConnectionFailedDelegate( public ConnectionFailedDelegate(
[ObjectCreator.Param] Widget widget, [ObjectCreator.Param] Widget widget,
[ObjectCreator.Param] string host, [ObjectCreator.Param] OrderManager orderManager)
[ObjectCreator.Param] int port )
{ {
widget.GetWidget("CONNECTION_BUTTON_CANCEL").OnMouseUp = mi => { widget.GetWidget("CONNECTION_BUTTON_CANCEL").OnMouseUp = mi => {
widget.GetWidget("CONNECTION_BUTTON_CANCEL").Parent.Visible = false; widget.GetWidget("CONNECTION_BUTTON_CANCEL").Parent.Visible = false;
@@ -46,12 +45,12 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
return true; return true;
}; };
widget.GetWidget("CONNECTION_BUTTON_RETRY").OnMouseUp = mi => { widget.GetWidget("CONNECTION_BUTTON_RETRY").OnMouseUp = mi => {
Game.JoinServer(host, port); Game.JoinServer(orderManager.Host, orderManager.Port);
return true; return true;
}; };
widget.GetWidget<LabelWidget>("CONNECTION_FAILED_DESC").GetText = () => widget.GetWidget<LabelWidget>("CONNECTION_FAILED_DESC").GetText = () => string.IsNullOrEmpty(orderManager.ServerError) ?
"Could not connect to {0}:{1}".F(host, port); "Could not connect to {0}:{1}".F(orderManager.Host, orderManager.Port) : orderManager.ServerError;
} }
} }
} }

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
break; break;
case ConnectionState.NotConnected: case ConnectionState.NotConnected:
Widget.OpenWindow( "CONNECTION_FAILED_BG", Widget.OpenWindow( "CONNECTION_FAILED_BG",
new Dictionary<string, object> { { "host", orderManager.Host }, { "port", orderManager.Port } } ); new Dictionary<string, object> { { "orderManager", orderManager } } );
break; break;
case ConnectionState.Connected: case ConnectionState.Connected:
var lobby = Widget.OpenWindow( "SERVER_LOBBY", new Dictionary<string, object> { { "orderManager", orderManager } } ); var lobby = Widget.OpenWindow( "SERVER_LOBBY", new Dictionary<string, object> { { "orderManager", orderManager } } );