add kick command to LobbyCommands

This commit is contained in:
Chris Forbes
2010-12-24 12:10:38 +13:00
parent b5b6b47e95
commit 54cf2e7993
3 changed files with 31 additions and 6 deletions

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Server
else else
{ {
if (len == 0) if (len == 0)
server.DropClient(this, null); server.DropClient(this);
break; break;
} }
@@ -57,7 +57,7 @@ namespace OpenRA.Server
catch (SocketException e) catch (SocketException e)
{ {
if (e.SocketErrorCode == SocketError.WouldBlock) break; if (e.SocketErrorCode == SocketError.WouldBlock) break;
server.DropClient(this, e); server.DropClient(this);
return false; return false;
} }
} }

View File

@@ -165,7 +165,7 @@ namespace OpenRA.Server
foreach (var t in ServerTraits.WithInterface<IClientJoined>()) foreach (var t in ServerTraits.WithInterface<IClientJoined>())
t.ClientJoined(this, newConn); t.ClientJoined(this, newConn);
} }
catch (Exception e) { DropClient(newConn, e); } catch (Exception e) { DropClient(newConn); }
} }
public void UpdateInFlightFrames(Connection conn) public void UpdateInFlightFrames(Connection conn)
@@ -193,7 +193,7 @@ namespace OpenRA.Server
ms.Write( data ); ms.Write( data );
c.socket.Send( ms.ToArray() ); c.socket.Send( ms.ToArray() );
} }
catch( Exception e ) { DropClient( c, e ); } catch (Exception e) { DropClient(c); }
} }
public void DispatchOrders(Connection conn, int frame, byte[] data) public void DispatchOrders(Connection conn, int frame, byte[] data)
@@ -277,7 +277,7 @@ namespace OpenRA.Server
return lobbyInfo.ClientWithIndex(conn.PlayerIndex); return lobbyInfo.ClientWithIndex(conn.PlayerIndex);
} }
public void DropClient(Connection toDrop, Exception e) public void DropClient(Connection toDrop)
{ {
conns.Remove(toDrop); conns.Remove(toDrop);
SendChat(toDrop, "Connection Dropped"); SendChat(toDrop, "Connection Dropped");

View File

@@ -129,7 +129,7 @@ namespace OpenRA.Mods.RA.Server
{ {
var occupantConn = server.conns.FirstOrDefault( c => c.PlayerIndex == occupant.Index ); var occupantConn = server.conns.FirstOrDefault( c => c.PlayerIndex == occupant.Index );
if (occupantConn != null) if (occupantConn != null)
server.DropClient( occupantConn, new Exception() ); server.DropClient(occupantConn);
} }
server.SyncLobbyInfo(); server.SyncLobbyInfo();
@@ -221,6 +221,31 @@ namespace OpenRA.Mods.RA.Server
bool.TryParse(s, out server.lobbyInfo.GlobalSettings.LockTeams); bool.TryParse(s, out server.lobbyInfo.GlobalSettings.LockTeams);
server.SyncLobbyInfo(); server.SyncLobbyInfo();
return true;
}},
{ "kick",
s =>
{
if (conn.PlayerIndex != 0)
{
server.SendChatTo( conn, "Only the host can kick players" );
return true;
}
int slot;
int.TryParse( s, out slot );
var connToKick = server.conns.SingleOrDefault( c => server.GetClient(c) != null && server.GetClient(c).Slot == slot);
if (connToKick == null)
{
server.SendChatTo( conn, "Noone in that slot." );
return true;
}
server.DropClient(connToKick);
server.SyncLobbyInfo();
return true; return true;
}}, }},
}; };