private void KickNow( [NotNull] string message, LeaveReason leaveReason )
{
if ( message == null )
throw new ArgumentNullException( "message" );
if ( !Enum.IsDefined( typeof( LeaveReason ), leaveReason ) ) {
throw new ArgumentOutOfRangeException( "leaveReason" );
}
if ( Thread.CurrentThread != ioThread ) {
throw new InvalidOperationException( "KickNow may only be called from player's own thread." );
}
State = SessionState.PendingDisconnect;
LeaveReason = leaveReason;
canQueue = false;
canReceive = false;
canSend = false;
SendNow( PacketWriter.MakeDisconnect( message ) );
writer.Flush();
}