void RechazarDuelo() { MensajeBase msg = Shark.instance.mensaje <MsgChallengeAnswer>(); (msg as MsgChallengeAnswer).m_accepted = false; msg.send(); }
void registrarMensajes() { foreach (Type type in System.Reflection.Assembly.GetExecutingAssembly().GetTypes()) { object[] obj = type.GetCustomAttributes(typeof(NetMessage), true); if (obj.Length > 0) { MsgType id = (obj[0] as NetMessage).ID; MensajeBase msg = Activator.CreateInstance(type) as MensajeBase; msg.ID = id; ushort uid = (ushort)id; if (!m_mensajes.ContainsKey(uid)) { m_mensajes.Add(uid, msg); } } } /* * Debug.Log( "NetMessage attributes registered" ); * * Debug.Log( "Id -> Type" ); * foreach (var pair in m_mensajes) { * Debug.Log( " " + (MsgType)pair.Key + " -> " + pair.Value ); * } */ }
void AceptarDuelo() { MensajeBase msg = Shark.instance.mensaje <MsgChallengeAnswer>(); (msg as MsgChallengeAnswer).m_accepted = true; msg.send(); ifcDuelo.m_rival = MsgLobbyGroup.NetToUsuario(m_client); }
public void enviarMensaje(MensajeBase msg) { string mensaje = JsonConvert.SerializeObject(msg); if (Enviar != null) { Enviar(mensaje); } }
//los usuarios deben recibir los mensajes como eventos del lado del cliente /* * TCP Client se lo paso a una clase que maneja con ID y guardar en una lista */ /* private void atender(object tcpClient) * { * Console.WriteLine("Atendiendo al cliente"); * TcpClient cliente = (TcpClient)tcpClient; * NetworkStream stream = cliente.GetStream(); * StreamWriter writer = new StreamWriter(stream, Encoding.ASCII) { AutoFlush = true }; * StreamReader reader = new StreamReader(stream, Encoding.ASCII); * while (cliente.Connected) * { * try * { * string mens = reader.ReadLine(); * MensajeBase msjBase = JsonConvert.DeserializeObject<MensajeBase>(mens); * Console.WriteLine("Es del tipo " + msjBase.TipoMensaje); * try { MensajeLogin msj = (MensajeLogin)msjBase; } catch (InvalidCastException e) { } * if (nombreUsuarios.Contains(msjBase.From)) * { * MensajeLogin respuesta = new MensajeLogin("", "", 0); * respuesta.Conectado = false; * respuesta.Mensaje = "Nombre de usuario ya existente"; * string resp = JsonConvert.SerializeObject(respuesta); * Console.WriteLine("Nombre de usuario ya existente " + msjBase.From); * writer.WriteLine(resp); * } * else * { * MensajeLogin respuesta = new MensajeLogin("","", 0); * respuesta.Conectado = true; * respuesta.Mensaje = "Conectado"; * nombreUsuarios.Add(msjBase.From); * Console.WriteLine("El usuario se ha logeado: " + msjBase.From); * string resp = JsonConvert.SerializeObject(respuesta); * writer.WriteLine(resp); * } * * // manejarMensaje(msjBase,cliente); * } * catch (ArgumentNullException e) { } * } * * }*/ /* private void manejarMensaje(MensajeBase msjBase,TcpClient cliente) * { * if (msjBase.TipoMensaje == "MensajeLogin") * { * Console.WriteLine("Es del tipo "+ msjBase.TipoMensaje); * MensajeLogin msj = (MensajeLogin)msjBase; * if (nombreUsuarios.Contains(msjBase.From)) * { * MensajeLogin respuesta = new MensajeLogin("","",0); * respuesta.Conectado = false; * respuesta.Mensaje = "Nombre de usuario ya existente"; * } * } * else if (msjBase.TipoMensaje == "MensajeDibujarPuntos") * { * Console.WriteLine("Es del tipo "+ msjBase.TipoMensaje); * } * else if (msjBase.TipoMensaje == "EntraSala") { * Console.WriteLine("Es del tipo "+msjBase.TipoMensaje); * } * }*/ #endregion public void autenticar(object client) { TcpClient clienteAutenticando = (TcpClient)client; NetworkStream stream = clienteAutenticando.GetStream(); StreamWriter writer = new StreamWriter(stream, Encoding.ASCII) { AutoFlush = true }; StreamReader reader = new StreamReader(stream, Encoding.ASCII); while (true) { string mens = reader.ReadLine(); MensajeBase msjBase = JsonConvert.DeserializeObject <MensajeBase>(mens); string nombre = msjBase.From; try { MensajeLogin msj = (MensajeLogin)msjBase; } catch (InvalidCastException e) { } if (estaLibreElNombre(nombre)) { MensajeLogin respuesta = new MensajeLogin("", nombre, 0); respuesta.Conectado = true; Cliente c = new Cliente(clienteAutenticando, nombre); c.Recibir += C_Recibir; c.Desconectar += C_Desconectar; lock (_ListaLocker) { //despues verificar sala, de momento es prueba //if(conectados > 4) mandar mensaje de "server lleno" //o poner al usuario en lista de espera listaClientes.Add(c); orden.Add(c.Id); } Thread HiloAtender = new Thread(c.atender); Console.Out.NewLine = "\r\n\r\n"; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(msjBase.Fecha + ":El usuario se ha logeado: " + nombre); Console.WriteLine("Total conectados " + listaClientes.Count); string resp = JsonConvert.SerializeObject(respuesta); writer.WriteLine(resp); HiloAtender.Start(); break; } else { MensajeLogin respuesta = new MensajeLogin("", "", 0); respuesta.Conectado = false; respuesta.Mensaje = "Nombre de usuario ya existente "; string resp = JsonConvert.SerializeObject(respuesta); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Nombre de usuario ya existente " + msjBase.From); writer.WriteLine(resp); } } }
public void enviar(MensajeBase msj) { string str = JsonConvert.SerializeObject(msj); try { writer.WriteLine(str); } catch (IOException e) { Console.WriteLine("No se pudo enviar el mensaje a " + id); } }
//enviar todos manda un msj a TODOS los clientes //excepto quien lo origina //puede modificarse al enviar todos los que pertenezcan en una sala cuando sea multipartida. private void enviarTodos(MensajeBase mb, string evitar) { lock (_ListaLocker) { foreach (Cliente c in listaClientes) { if (c.Id != evitar) { c.enviar(mb); } } } }
public void recibirMensaje(string mensaje) { MensajeBase mb = JsonConvert.DeserializeObject <MensajeBase>(mensaje); switch (mb.TipoMensaje) { case "MensajeLogin": mb = JsonConvert.DeserializeObject <MensajeLogin>(mensaje); break; case "MensajeEntrarSala": mb = JsonConvert.DeserializeObject <MensajeEntrarSala>(mensaje); break; case "MensajeDibujarPuntos": mb = JsonConvert.DeserializeObject <MensajeDibujarPuntos>(mensaje); break; case "MensajeEnviarPalabra": mb = JsonConvert.DeserializeObject <MensajeEnviarPalabra>(mensaje); break; case "MensajeIniciarPartida": mb = JsonConvert.DeserializeObject <MensajeIniciarPartida>(mensaje); break; case "MensajedibujarPuntos": mb = JsonConvert.DeserializeObject <MensajeDibujarPuntos>(mensaje); break; case "MensajeTocaDibujar": mb = JsonConvert.DeserializeObject <MensajeTocaDibujar>(mensaje); break; case "MensajeFinTrazo": mb = JsonConvert.DeserializeObject <MensajeFinTrazo>(mensaje); break; case "MensajeContador": mb = JsonConvert.DeserializeObject <MensajeContador>(mensaje); break; case "MensajeUsuariosEnSala": mb = JsonConvert.DeserializeObject <MensajeUsuariosEnSala>(mensaje); break; case "MensajeGanador": mb = JsonConvert.DeserializeObject <MensajeGanador>(mensaje); break; case "MensajeEmpate": mb = JsonConvert.DeserializeObject <MensajeEmpate>(mensaje); break; } if (Recibir != null) { Recibir(mb); } }
public byte[] serialize(MensajeBase _msg, out int len) { len = 0; if (_msg == null) { return(null); } ushort idx = 4; idx = Serializer.ByteSerialize(_msg.GetType(), _msg, ref m_sBuffer, idx); _msg.Len = idx; Array.Copy(BitConverter.GetBytes(_msg.Len), 0, m_sBuffer, 0, 2); // Longitud Array.Copy(BitConverter.GetBytes((ushort)_msg.ID), 0, m_sBuffer, 2, 2); // Identificador del paquete. len = idx; Debug.Log("Sending message: " + _msg.GetType()); return(m_sBuffer); }
public void deserialize() { ushort len = BitConverter.ToUInt16(m_eBuffer, 0); if (m_socket.Available >= len) { m_socket.Receive(m_eBuffer, len, SocketFlags.None); // Saca el paquete completo. ushort uid = BitConverter.ToUInt16(m_eBuffer, 2); ushort idx = 4; MensajeBase msg = (MensajeBase)m_mensajes[uid]; if (msg == null) { return; } msg.Len = len; msg.ID = (MsgType)uid; idx = Serializer.ByteDeserialize(msg.GetType(), msg, m_eBuffer, idx); Debug.Log("Received message: " + msg.GetType()); msg.process(); } }
public bool enviar(MensajeBase _msg) { if (m_socket == null) { return(false); } try{ int len; serialize(_msg, out len); m_socket.Send(m_sBuffer, len, SocketFlags.None); } catch (Exception e) { Debug.Log("error al enviar el mensaje " + e); if (OnDisconnect != null) { OnDisconnect(); } Desconectar(); return(false); } return(true); }
public void atender() { string mensaje = ""; while (true) { try { mensaje = reader.ReadLine(); Console.Out.NewLine = "\r\n\r\n"; MensajeBase msj = JsonConvert.DeserializeObject <MensajeBase>(mensaje); switch (msj.TipoMensaje) { case "MensajeLogin": msj = JsonConvert.DeserializeObject <MensajeLogin>(mensaje); Console.ForegroundColor = ConsoleColor.Cyan; break; case "MensajeDibujarPuntos": msj = JsonConvert.DeserializeObject <MensajeDibujarPuntos>(mensaje); Console.ForegroundColor = ConsoleColor.Blue; break; case "MensajeEntrarSala": msj = JsonConvert.DeserializeObject <MensajeEntrarSala>(mensaje); Console.ForegroundColor = ConsoleColor.DarkRed; break; case "MensajeGanador": msj = JsonConvert.DeserializeObject <MensajeGanador>(mensaje); break; case "MensajeEnviarPalabra": msj = JsonConvert.DeserializeObject <MensajeEnviarPalabra>(mensaje); Console.ForegroundColor = ConsoleColor.DarkCyan; break; } if (Recibir != null) { Recibir(msj); } } catch (ArgumentNullException e) { if (mensaje == null) { if (Desconectar != null) { Desconectar(this.id); break; } } } catch (IOException c) { if (Desconectar != null) { Desconectar(this.id); break; } } } }
private void Serializador_Recibir(MensajeBase msg) { switch (msg.TipoMensaje) { case "MensajeLogin": if (Logear != null) { try { MensajeLogin msgL = (MensajeLogin)msg; Logear(msgL); } catch (InvalidCastException e) { } } break; case "MensajeEntrarSala": if (EntraSala != null) { try { MensajeEntrarSala msgEn = (MensajeEntrarSala)msg; EntraSala(msgEn); } catch (InvalidCastException e) { } } break; case "MensajeDibujarPuntos": MensajeDibujarPuntos msgDibPun = (MensajeDibujarPuntos)msg; if (Dibujar != null) { Dibujar(msgDibPun); } break; case "MensajeEnviarPalabra": MensajeEnviarPalabra msgEnvPal = (MensajeEnviarPalabra)msg; if (RespuestaPalabraEnviada != null) { RespuestaPalabraEnviada(msgEnvPal); } break; case "MensajeIniciarPartida": if (IniciarPartida != null) { try { MensajeIniciarPartida msgEn = (MensajeIniciarPartida)msg; IniciarPartida(msgEn); } catch (InvalidCastException e) { } } break; case "MensajeTocaDibujar": if (TocaDibujar != null) { try { MensajeTocaDibujar msgEn = (MensajeTocaDibujar)msg; TocaDibujar(msgEn); } catch (InvalidCastException e) { } } break; case "MensajeFinTrazo": if (FinTrazo != null) { try { MensajeFinTrazo msgEn = (MensajeFinTrazo)msg; FinTrazo(msgEn); } catch (InvalidCastException e) { } } break; case "MensajeContador": if (Contador != null) { try { MensajeContador msgCon = (MensajeContador)msg; Contador(msgCon); } catch (InvalidCastException e) { Console.WriteLine("151" + e.Message); } } break; case "MensajeUsuariosEnSala": if (UsuariosEnSala != null) { try { MensajeUsuariosEnSala msgUsSala = (MensajeUsuariosEnSala)msg; UsuariosEnSala(msgUsSala); } catch (InvalidCastException e) { Console.WriteLine("164" + e.Message); } } break; case "MensajeGanador": if (Ganador != null) { try { MensajeGanador msgGanador = (MensajeGanador)msg; Ganador(msgGanador); } catch (InvalidCastException e) { Console.WriteLine("180" + e.Message); } } break; case "MensajeEmpate": if (Empate != null) { try { MensajeEmpate msgempate = (MensajeEmpate)msg; Empate(msgempate); } catch (InvalidCastException e) { Console.WriteLine("195" + e.Message); } } break; } }
private void C_Recibir(MensajeBase msg) { //si es para el servidor: if (msg.To == "") { switch (msg.TipoMensaje) { case "MensajeEnviarPalabra": MensajeEnviarPalabra mj = (MensajeEnviarPalabra)msg; Cliente c = filtrar(mj.From); if (corroborar(mj.Palabra)) { if (c != null) { filtrar(mj.From).Puntos = mj.Puntos; mj.To = mj.From; mj.From = ""; mj.Correcta = true; enviarTodos(mj, ""); RecToken.Cancel(); actualizarSala(); empezarPartida(); } } else { enviarTodos(mj, ""); // filtrar(mj.From).enviar(); } break; case "MensajeDibujandoPuntos": enviarTodos(msg, msg.From); break; case "MensajeGanador": msg = (MensajeGanador)msg; break; case "MensajeEntrarSala": Console.WriteLine("ENTRO A LA BENDITA SALA"); enSala++; msg = (MensajeEntrarSala)msg; usuarioEnsala.Add(msg.From); actualizarSala(); if (enSala > 1 && !EmpezoPartida) { empezarPartida(); } break; case "MensajeFinTrazo": enviarTodos(msg, msg.From); break; case "MensajeIniciarPartida": rondaActual = 0; turnoActual = 0; foreach (Cliente cli in listaClientes) { cli.Puntos = -cli.Puntos; } actualizarSala(); empezarPartida(); break; } } #region msg todos o server //si el msj es para todos: else if (msg.To == "*") { lock (_ListaLocker) { foreach (Cliente c in listaClientes) { c.enviar(msg); } } } //todos menos uno else if (msg.To == "-") { enviarTodos(msg, msg.From); } // si no es para el servidor: else { if (filtrar(msg.To) != null) { filtrar(msg.To).enviar(msg); } } #endregion }
/// <summary> /// Muestra el control con los valores de los parametros recibidos /// </summary> /// <param name="_usuario"></param> /// <param name="_habilitarRetar">Indica si pulsar al pulsar sobre este control se permite retar a este jugador o no</param> /// <param name="_ocultarBotonesFavorito">Fuerza que no se muestren los botones añadir / eliminar favorito</param> public void AsignarValores(Usuario _usuario, bool _habilitarRetar = true, bool _ocultarBotonesFavorito = false) { // guardar la informacion del usuario m_usuario = _usuario; // actualizar textos m_txtUsuario.text = _usuario.alias; // actualizar collider if (_habilitarRetar) { m_btnRetar.action = (_name) => { Interfaz.ClickFX(); #if !DEBUG_RETO /* * // comprobar si el jugador tiene suficiente dinero para ofrecer un duelo * //H4CK para evitar pagar duelos * if (Interfaz.m_monedas< Stats.PRECIO_RETO) { * // informar al jugador de que no tiene suficiente dinero para retar al rival * ifcDialogBox.instance.Show(ifcDialogBox.TipoBotones.ACEPTAR_CANCELAR, "DINERO INSUFICIENTE", "Para retar a <color=#ffd200>" + _usuario.alias + "</color> a un duelo necesitas disponer al menos <color=#ffd200>" + Stats.PRECIO_RETO + "$</color>."); * * } else { */ #endif // retar al rival ifcDuelo.m_rival = _usuario; ifcDialogBox.instance.ShowTwoButtonDialog( ifcDialogBox.TwoButtonType.POSITIVE_NEGATIVE, LocalizacionManager.instance.GetTexto(102).ToUpper(), string.Format(LocalizacionManager.instance.GetTexto(103), "<color=#ddf108> " + _usuario.alias + "</color>", _usuario.getRatio() + "%"), LocalizacionManager.instance.GetTexto(45).ToUpper(), LocalizacionManager.instance.GetTexto(48).ToUpper(), // accion al pulsar aceptar (_name1) => { // enviar el mensaje al server MensajeBase msg = Shark.instance.mensaje <MsgRequestDuel>(); (msg as MsgRequestDuel).m_challenge = _usuario.alias; (msg as MsgRequestDuel).m_uid = _usuario.uid; msg.send(); // indicar que este jugador paga por el duelo // Interfaz.m_tegoQuePagarDuelo = true; // mostrar un dialogo mientras se espera la respuesta ifcDialogBox.instance.ShowZeroButtonDialog(LocalizacionManager.instance.GetTexto(104).ToUpper(), LocalizacionManager.instance.GetTexto(105)); ifcDialogBox.instance.WaitToCloseAutomatically(Stats.TIEMPO_ESPERA_CONFIRMACION_RETO_RIVAL); }); #if !DEBUG_RETO //} #endif }; m_btnRetar.gameObject.SetActive(true); } else { m_btnRetar.gameObject.SetActive(false); } // instanciar y mostrar el jugador en la escena if (m_jugadorEscena != null) { GameObject.Destroy(m_jugadorEscena); } Vector3 relPosition = new Vector3(transform.position.x, transform.position.y + 0.05f, transform.position.z); m_jugadorEscena = Interfaz.instance.InstantiatePlayerAtScreenRelative(relPosition, _usuario.initMode, _usuario.DefaultCharacter.idModelo, (_usuario.initMode) ? _usuario.equipacionGoalkeeper : _usuario.equipacionShooter); // actualizar control gameObject.SetActive(true); }