/// <summary> /// Replica un mensaje recibido de una cuenta a las demas cuentas de las sala /// </summary> /// <param name="eventoEnJuego">EventoEnJuego</param> public void ReplicarMensajeACuentas(EventoEnJuego eventoEnJuego) { foreach (String DireccionIp in DireccionesIpDeCuentas.Values) { UdpSender EnviadorDePaquetesUDP = new UdpSender(DireccionIp, PUERTO_ENVIO_UDP_1, PUERTO_ENVIO_UDP_2); EnviadorDePaquetesUDP.EnviarPaquete(eventoEnJuego); } }
/// <summary> /// Envia un paquete Udp a los dos puertos y de la direccion ip /// </summary> /// <param name="eventoEnJuego">EventoEnJuego</param> public void EnviarPaquete(EventoEnJuego eventoEnJuego) { ClienteUDP = new UdpClient(); if (eventoEnJuego != null) { byte[] datos = SerializarAArregloDeBytes(eventoEnJuego); ClienteUDP.Send(datos, datos.Length, IpEnviarPaquete1); ClienteUDP.Send(datos, datos.Length, IpEnviarPaquete2); } }
/// <summary> /// Envia un mensaje a las cuentas de la sala indicando que el juego esta por comenzar /// </summary> /// <param name="source">object</param> /// <param name="e">ElapsedEventArgs</param> private void EnviarMensajeInicioJuego(object source, ElapsedEventArgs e) { EventoEnJuego eventoEnJuego = new EventoEnJuego(); eventoEnJuego.EventoEnJuegoIniciarPartida(Id); foreach (String direccionIp in DireccionesIpDeCuentas.Values) { UdpSender EnviadorDePaquetes = new UdpSender(direccionIp, PUERTO_ENVIO_UDP_1, PUERTO_ENVIO_UDP_2); EnviadorDePaquetes.EnviarPaquete(eventoEnJuego); } }
/// <summary> /// Busca la sala a la cual se le deben de reenviar los datos y se los reenvia /// </summary> /// <param name="eventoEnJuego">EventoEnJuego</param> public void ReplicarDatosRecibidosASala(EventoEnJuego eventoEnJuego) { foreach (Sala sala in SalasCreadas) { if (sala.Id == eventoEnJuego.IdSala) { sala.ReplicarMensajeACuentas(eventoEnJuego); break; } } }
/// <summary> /// Serializa un EventoEnJuego en un arreglo de bytes /// </summary> /// <param name="eventoEnJuego">EventoEnJuego</param> /// <returns>Arreglo de bytes del EventoEnJuegoSerializado</returns> private static byte[] SerializarAArregloDeBytes(EventoEnJuego eventoEnJuego) { if (eventoEnJuego != null) { BinaryFormatter FormateadorBinario = new BinaryFormatter(); using (MemoryStream StreamDeMemoria = new MemoryStream()) { FormateadorBinario.Serialize(StreamDeMemoria, eventoEnJuego); return(StreamDeMemoria.ToArray()); } } return(null); }
/// <summary> /// Deseariliza un arreglo de bytes en un EventoEnJuego /// </summary> /// <param name="byteArray">byte[]</param> /// <returns>El EventoEnJuego deserializado</returns> public static EventoEnJuego Deserializar(byte[] byteArray) { if (byteArray == null) { return(null); } BinaryFormatter FormateadorBinario = new BinaryFormatter(); using (MemoryStream StreamDeMemoria = new MemoryStream()) { StreamDeMemoria.Write(byteArray, 0, byteArray.Length); StreamDeMemoria.Seek(0, SeekOrigin.Begin); EventoEnJuego eventoEnJuego = (EventoEnJuego)FormateadorBinario.Deserialize(StreamDeMemoria); return(eventoEnJuego); } }
/// <summary> /// Recupera la cuenta la cual envio el EventoEnJuego /// </summary> /// <param name="eventoEnJuego">EventoEnJuego</param> /// <returns>La cuenta que envio el evento </returns> private CuentaModel RecuperarCuentaDelEvento(EventoEnJuego eventoEnJuego) { CuentaModel cuentaDelEvento = new CuentaModel(); switch (eventoEnJuego.TipoDeEvento) { case EnumTipoDeEventoEnJuego.MovimientoJugador: cuentaDelEvento.NombreUsuario = eventoEnJuego.DatosDelMovimiento.Usuario; break; case EnumTipoDeEventoEnJuego.MuerteJugador: cuentaDelEvento.NombreUsuario = eventoEnJuego.DatosMuerteDeUnJugador.Usuario; break; } return(cuentaDelEvento); }
/// <summary> /// Se encarga de escuhar en la red a la espera de paquetes UDP /// </summary> /// <param name="puerto">Int</param> public void RecibirDatos(object puerto) { ClienteUDP = new UdpClient((int)puerto); try { while (true) { IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0); byte[] data = ClienteUDP.Receive(ref anyIP); if (data != null && data.Length > 0) { EventoEnJuego eventoEnJuego = Deserializar(data); EventoRecibido?.Invoke(eventoEnJuego); } } } catch (Exception err) { Debug.Write(err.Message); } }