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 int Port;
public string ServerError;
public int NetFrameNumber { get; private set; }
public int LocalFrameNumber;

View File

@@ -38,7 +38,7 @@ namespace OpenRA.Network
switch (order.OrderString)
{
case "Chat":
case "Chat":
{
var client = orderManager.LobbyInfo.ClientWithIndex(clientId);
if (client != null)
@@ -128,7 +128,9 @@ namespace OpenRA.Network
orderManager.IssueOrder(Order.HandshakeResponse(response.Serialize()));
break;
}
case "ServerError":
orderManager.ServerError = order.TargetString;
break;
case "SyncInfo":
{
orderManager.LobbyInfo = Session.Deserialize(order.TargetString);

View File

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

View File

@@ -241,7 +241,8 @@ namespace OpenRA.Mods.RA.Server
server.SendChatTo( conn, "Noone in that slot." );
return true;
}
server.SendOrderTo(connToKick, "ServerError", "You have been kicked from the server");
server.DropClient(connToKick);
server.SyncLobbyInfo();

View File

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