NUEVA GESTIÓN DE USUARIOS Y PARTIDAS
This commit is contained in:
@@ -32,6 +32,7 @@ class ClienteSala {
|
||||
final String nombre;
|
||||
final bool esHost;
|
||||
final bool conectado;
|
||||
final int ultimaActividadMs;
|
||||
|
||||
const ClienteSala({
|
||||
required this.clientId,
|
||||
@@ -39,6 +40,7 @@ class ClienteSala {
|
||||
required this.nombre,
|
||||
this.esHost = false,
|
||||
this.conectado = true,
|
||||
this.ultimaActividadMs = 0,
|
||||
});
|
||||
|
||||
ClienteSala copiar({
|
||||
@@ -47,6 +49,7 @@ class ClienteSala {
|
||||
String? nombre,
|
||||
bool? esHost,
|
||||
bool? conectado,
|
||||
int? ultimaActividadMs,
|
||||
}) {
|
||||
return ClienteSala(
|
||||
clientId: clientId ?? this.clientId,
|
||||
@@ -54,6 +57,7 @@ class ClienteSala {
|
||||
nombre: nombre ?? this.nombre,
|
||||
esHost: esHost ?? this.esHost,
|
||||
conectado: conectado ?? this.conectado,
|
||||
ultimaActividadMs: ultimaActividadMs ?? this.ultimaActividadMs,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -63,6 +67,7 @@ class ClienteSala {
|
||||
'nombre': nombre,
|
||||
'esHost': esHost,
|
||||
'conectado': conectado,
|
||||
'ultimaActividadMs': ultimaActividadMs,
|
||||
};
|
||||
|
||||
factory ClienteSala.fromJson(Map<String, dynamic> json) => ClienteSala(
|
||||
@@ -71,6 +76,7 @@ class ClienteSala {
|
||||
nombre: json['nombre'] as String,
|
||||
esHost: json['esHost'] as bool? ?? false,
|
||||
conectado: json['conectado'] as bool? ?? true,
|
||||
ultimaActividadMs: (json['ultimaActividadMs'] as num?)?.toInt() ?? 0,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -121,6 +127,19 @@ class EstadoSalaMultijugador {
|
||||
|
||||
int get cantidadUsuariosSeleccionados => usuariosSeleccionados.length;
|
||||
|
||||
List<ClienteSala> get clientesDesconectados => clientes.values
|
||||
.where((cliente) => !cliente.esHost && !cliente.conectado)
|
||||
.toList();
|
||||
|
||||
List<Usuario> get usuariosDeClientesDesconectados {
|
||||
final desconectados = clientesDesconectados
|
||||
.map((cliente) => cliente.clientId)
|
||||
.toSet();
|
||||
return usuarios.values
|
||||
.where((usuario) => desconectados.contains(usuario.clienteIdSeleccionado))
|
||||
.toList();
|
||||
}
|
||||
|
||||
List<Usuario> usuariosPorCliente(String clientId) {
|
||||
return usuarios.values
|
||||
.where((usuario) => usuario.clienteIdSeleccionado == clientId)
|
||||
@@ -235,6 +254,33 @@ class EstadoSalaMultijugador {
|
||||
}
|
||||
}
|
||||
|
||||
void registrarActividadCliente(String clientId, {int? ahoraMs}) {
|
||||
final cliente = clientes[clientId];
|
||||
if (cliente == null) return;
|
||||
clientes[clientId] = cliente.copiar(
|
||||
conectado: true,
|
||||
ultimaActividadMs:
|
||||
ahoraMs ?? DateTime.now().millisecondsSinceEpoch,
|
||||
);
|
||||
}
|
||||
|
||||
int reasignarUsuariosDeCliente({
|
||||
required String clientIdOrigen,
|
||||
required String clientIdDestino,
|
||||
}) {
|
||||
if (!clientes.containsKey(clientIdDestino)) return 0;
|
||||
var reasignados = 0;
|
||||
for (final entry in usuarios.entries.toList()) {
|
||||
if (entry.value.clienteIdSeleccionado == clientIdOrigen) {
|
||||
usuarios[entry.key] = entry.value.copiar(
|
||||
clienteIdSeleccionado: clientIdDestino,
|
||||
);
|
||||
reasignados++;
|
||||
}
|
||||
}
|
||||
return reasignados;
|
||||
}
|
||||
|
||||
ResultadoOperacionSala validarInicio() {
|
||||
if (fase != FaseSalaMultijugador.lobby) {
|
||||
return const ResultadoOperacionSala.error('sala_cerrada');
|
||||
|
||||
Reference in New Issue
Block a user