public void AddPlayer(NetConnection connection, PlayerInformation playerInfo)
{
String denyReason;
Byte slot = AllocateSlot(playerInfo, out denyReason);
// could not allocate the player if AllocateSlot returns DummySlot
if (slot == ProtocolInformation.DummySlot)
{
Log.InfoFormat("Player \"{0}\" from {1} tried to join, but was rejected ({2}).",
playerInfo.Callsign, connection, denyReason);
connection.Deny(denyReason);
return;
}
// we can now approve the player if we get here
connection.Approve();
// add player to our list
players[slot] = new Player(this, slot, connection, playerInfo);
// and tell everyone else about this awesome new player
Log.DebugFormat("Sending MsgAddPlayer to everyone else about player #{0}", slot);
NetOutgoingMessage packet = Server.CreateMessage();
MsgAddPlayerPacket message = new MsgAddPlayerPacket(players[slot].PlayerInfo, false);
packet.Write((Byte)message.MsgType);
message.Write(packet);
Log.DebugFormat("MsgAddPlayer Compiled ({0} bytes) and being sent to {1} recipients",
packet.LengthBytes, players.Count - 1);
// send to everyone except our new player, we let Player itself decide when to send the state to the new guy
Server.SendToAll(packet, connection, NetDeliveryMethod.ReliableOrdered, 0);
}