_ => throw new ArgumentOutOfRangeException(),
};
- Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, message);
-
- await connection.SendAsync(packet);
+ await DisconnectConnection(connection, message);
return;
}
if (name.Length > 10)
{
- using var packet = MessageWriter.Get(MessageType.Reliable);
- Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameLength);
- await connection.SendAsync(packet);
+ await DisconnectConnection(connection, DisconnectMessages.UsernameLength);
return;
}
if (string.IsNullOrWhiteSpace(name))
{
- using var packet = MessageWriter.Get(MessageType.Reliable);
- Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameIllegalCharacters);
- await connection.SendAsync(packet);
+ await DisconnectConnection(connection, DisconnectMessages.UsernameIllegalCharacters);
return;
}
// This may happen in the very rare case that version X is supported, X+2 is as well, but X+1 is not.
return VersionCompareResult.Unknown;
}
+
+ private async ValueTask DisconnectConnection(IHazelConnection connection, string message)
+ {
+ using var writer = MessageWriter.Get();
+ MessageDisconnect.Serialize(writer, true, DisconnectReason.Custom, message);
+
+ await connection.DisconnectAsync(DisconnectReason.Custom.ToString(), writer);
+ return;
+ }
}
}
{
Message01JoinGameC2S.Deserialize(reader, out var gameCode);
- using var packet = MessageWriter.Get(MessageType.Reliable);
var endpoint = await _nodeLocator.FindAsync(gameCode);
if (endpoint == null)
{
- Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.GameMissing);
+ await DisconnectAsync(DisconnectReason.GameMissing);
}
else
{
+ using var packet = MessageWriter.Get(MessageType.Reliable);
Message13RedirectS2C.Serialize(packet, false, endpoint);
+ await Connection.SendAsync(packet);
}
- await Connection.SendAsync(packet);
break;
}
case MessageFlags.GetGameListV2:
{
// TODO: Implement.
- using var packet = MessageWriter.Get(MessageType.Reliable);
- Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented);
- await Connection.SendAsync(packet);
+ await DisconnectAsync(DisconnectReason.Custom, DisconnectMessages.NotImplemented);
break;
}