public void HandleCommunication(Object obj) { ThreadParams param = (ThreadParams)obj; Socket client = param.obj; if (client != null) { Console.WriteLine("Cliente conectado. Esperando datos"); string msg = ""; Message message = new Message(); while (message != null && !message.MessageString.Equals("bye")) { try { // Enviar un mensaje al cliente byte[] data = Encoding.UTF8.GetBytes("Envía datos. Envía \"bye\" para terminar"); client.Send(data); // Escucha por nuevos mensajes byte[] buffer = new byte[1024]; client.Receive(buffer); msg = Encoding.UTF8.GetString(buffer); Console.WriteLine(msg); message = JsonConvert.DeserializeObject <Message>(msg); messages.Add(message); } catch (Exception ex) { Console.WriteLine("Exception", msg, ex.Message); } } Console.WriteLine("Cerrando conexión"); client.Dispose(); foreach (var item in threadsIds) { Console.WriteLine(item); } Console.WriteLine("------------"); threadsIds.Remove(param.id); foreach (var item in threadsIds) { Console.WriteLine(item); } Thread.CurrentThread.Join(); } }
public void ControlarComunicacion(Object obj) { ThreadParams param = (ThreadParams)obj; Socket client = param.Obj; if (client != null) { Console.WriteLine("Cliente conectado. Esperando datos"); string msg = ""; byte[] data; Message mensaje = new Message(); while (mensaje != null && !mensaje.MessageString.Equals("bye")) { try { if (mensaje.Tipo == TipoMensaje.Crear) { Mensajes.Add(mensaje); MostrarMensaje(mensaje); // Enviar un mensaje al cliente data = Encoding.UTF8.GetBytes("\n--OPCIONES--\n-Envía \"read\" para consultar tus mensajes" + "\n-Envía \"update id_mensaje nuevo_mensaje\" para actualizar un mensaje con el id específicado" + "\n-Envía \"delete id_mensaje\" para eliminar un mensaje con el id específicado" + "\n-Envía \"bye\" para terminar\n---------------------"); client.Send(data); } else if (mensaje.Tipo == TipoMensaje.Read) { string mensajesCliente = ObtenerMensajes(mensaje.User); data = Encoding.UTF8.GetBytes(mensajesCliente); client.Send(data); } else if (mensaje.Tipo == TipoMensaje.Update) { string respuesta = ""; string[] updateInfo = mensaje.MessageString.Split(" "); string idMensaje = ""; int idMensajeEntero = 0; try { idMensaje = updateInfo[1]; idMensajeEntero = int.Parse(idMensaje); } catch (System.Exception ex) { respuesta = "El id no fue específicado correctamente"; data = Encoding.UTF8.GetBytes(respuesta); client.Send(data); Console.WriteLine(ex.Message); } string mensajeActualizado = ""; try { int startIndex = 8 + idMensaje.Length; int largoMensajeNuevo = mensaje.MessageString.Length - startIndex; mensajeActualizado = mensaje.MessageString.Substring(startIndex, largoMensajeNuevo); } catch (System.Exception) { respuesta = "El nuevo mensaje no fue específicado correctamente"; data = Encoding.UTF8.GetBytes(respuesta); client.Send(data); } if (ExisteMensaje(idMensajeEntero)) { ActualizarMensaje(idMensajeEntero, mensajeActualizado); respuesta = "---Mensaje actualizado---"; data = Encoding.UTF8.GetBytes(respuesta); client.Send(data); } else { respuesta = "---No existe el mensaje con el id específicado---"; data = Encoding.UTF8.GetBytes(respuesta); client.Send(data); } } else if (mensaje.Tipo == TipoMensaje.Delete) { string respuesta = ""; string[] updateInfo = mensaje.MessageString.Split(" "); string idMensaje = ""; int idMensajeEntero = 0; try { idMensaje = updateInfo[1]; idMensajeEntero = int.Parse(idMensaje); } catch (System.Exception ex) { respuesta = "El id no fue específicado correctamente"; data = Encoding.UTF8.GetBytes(respuesta); client.Send(data); Console.WriteLine(ex.Message); } if (ExisteMensaje(idMensajeEntero)) { if (EliminarMensaje(idMensajeEntero)) { respuesta = "---Mensaje eliminado---"; } else { respuesta = "---El mensaje no pudo ser eliminado. Intente más tarde.---"; } data = Encoding.UTF8.GetBytes(respuesta); client.Send(data); } else { respuesta = "--No existe mensaje con el id específicado--"; data = Encoding.UTF8.GetBytes(respuesta); client.Send(data); } } // Escucha por nuevos mensajes byte[] buffer = new byte[1024]; client.Receive(buffer); msg = Encoding.UTF8.GetString(buffer); mensaje = JsonConvert.DeserializeObject <Message>(msg); } catch (System.Exception ex) { Console.WriteLine(ex.Message); break; } } Console.WriteLine("Cerrando conexión"); client.Dispose(); IdHilos.Remove(param.Id); Thread.CurrentThread.Join(); } }
public void HandleCommunication(Object obj) { ThreadParams param = (ThreadParams)obj; Socket client = param.obj; if (client != null) { Console.WriteLine("Cliente conectado. Esperando datos"); string msg = ""; Message message = new Message(); string mensajeextra = "..."; while (message != null && !message.MessageString.Equals("bye")) { try { // Enviar un mensaje al cliente byte[] data = Encoding.UTF8.GetBytes(mensajeextra); client.Send(data); // Escucha por nuevos mensajes byte[] buffer = new byte[1024]; client.Receive(buffer); msg = Encoding.UTF8.GetString(buffer); message = JsonConvert.DeserializeObject <Message>(msg); switch (message.Type) { case "remover": string [] partesR = message.MessageString.Split("-r"); string idMensajeR = partesR[1].Trim(); eliminarMensaje(idMensajeR); break; case "editar": string nuevotextox = message.MessageString.Split("/")[1]; string [] partes = message.MessageString.Split("/"); string idMensaje = partes[0].Split("-e")[1].Trim(); editarMensaje(idMensaje, nuevotextox); break; case "buscar": string palabraBuscada = message.MessageString.Split("-b")[1].Trim(); mensajeextra = buscarMensaje(message.User, palabraBuscada); break; case "buscarPorUsuario": buscarMensajesDelUsuario(message.User); break; default: Console.WriteLine(message.User + ": " + message.MessageString + " " + message.Date); messages.Add(message); break; } } catch (Exception ex) { Console.WriteLine("Exception", msg, ex.Message); } } Console.WriteLine("Cerrando conexión"); client.Dispose(); foreach (var item in threadsIds) { Console.WriteLine(item); } Console.WriteLine("------------"); threadsIds.Remove(param.id); foreach (var item in threadsIds) { Console.WriteLine(item); } Thread.CurrentThread.Join(); } }
public void HandleCommunication(Object obj) { ThreadParams param = (ThreadParams)obj; Socket client = param.obj; if (client != null) { Console.WriteLine("Cliente conectado. Esperando datos"); string msg = "|"; DateTime now = DateTime.Now; Message mensaje = new Message(); while (mensaje != null && !mensaje.MessageString.Equals("bye")) { try { switch (msg) { case "list": var asString = JsonConvert.SerializeObject(mensajes, SerializerSettings); client.Send(Encoding.Unicode.GetBytes(asString)); break; case "change": bool cambio = false; byte[] buffer1 = new byte[1024]; client.Receive(buffer1); var uft8Reader1 = new Utf8JsonReader(buffer1); mensaje = System.Text.Json.JsonSerializer.Deserialize <Message>(ref uft8Reader1); foreach (Message mes12 in mensajes) { if (mes12.id == mensaje.id) { cambio = true; mes12.MessageString = mensaje.MessageString; break; } } if (cambio == true) { byte[] data1 = Encoding.UTF8.GetBytes("Mensaje Actualizado"); client.Send(data1); } else { byte[] data1 = Encoding.UTF8.GetBytes("No se encontro el mensaje"); client.Send(data1); } break; case "delete": byte[] buffer2 = new byte[1024]; client.Receive(buffer2); var uft8Reader2 = new Utf8JsonReader(buffer2); mensaje = System.Text.Json.JsonSerializer.Deserialize <Message>(ref uft8Reader2); mensajes.RemoveAt(mensaje.id); byte[] data3 = Encoding.UTF8.GetBytes("Mensaje Eliminado"); client.Send(data3); break; case "|": break; default: // Enviar un mensaje al cliente byte[] data = Encoding.UTF8.GetBytes("Mensaje Enviado"); client.Send(data); break; } // Escucha por nuevos mensajes byte[] buffer = new byte[1024]; client.Receive(buffer); var uft8Reader = new Utf8JsonReader(buffer); mensaje = System.Text.Json.JsonSerializer.Deserialize <Message>(ref uft8Reader); msg = mensaje.MessageString; if (msg != "list" && msg != "bye" && msg != "change" && msg != "delete") { Console.WriteLine(mensaje.Hour.Hour + ":" + mensaje.Hour.Minute + " " + mensaje.User + "- " + mensaje.MessageString); mensajes.Add(mensaje); } } catch (Exception ex) { Console.WriteLine("Exception", msg, ex.Message); } } Console.WriteLine("Cerrando conexión"); client.Dispose(); foreach (var item in hilosId) { Console.WriteLine(item); } Console.WriteLine("------------"); hilosId.Remove(param.id); foreach (var item in hilosId) { Console.WriteLine(item); } Thread.CurrentThread.Join(); } }
public void HandleCommunication(Object obj) { ThreadParams param = (ThreadParams)obj; Socket client = param.obj; if (client != null) { Console.WriteLine("Cliente conectado. Esperando datos"); string msg = ""; Message newMessage = new Message(); while (newMessage != null && !newMessage.MessageString.Equals("bye")) { try { switch (msg) { case "0": // Envia un mensaje al cliente byte[] data = Encoding.UTF8.GetBytes("Mensaje guardado en servidor"); client.Send(data); break; case "1": // Muestra los mensajes en el servidor Operación Read string jsonMessage = JsonConvert.SerializeObject(messageList); byte[] listBuffer = Encoding.UTF8.GetBytes(jsonMessage); client.Send(listBuffer); break; case "2": // Actualiza el texto de un mensaje en el servidor Operación Update byte[] updateBuffer = new byte[1024]; client.Receive(updateBuffer); msg = Encoding.UTF8.GetString(updateBuffer); newMessage = JsonConvert.DeserializeObject <Message>(msg); bool messageUpdated = ChangeMessage(newMessage); if (messageUpdated) { msg = "Mensaje con id: " + newMessage.MessageID + " actualizado exitosamente"; } else { msg = "ERROR: Mensaje con texto: " + newMessage.MessageString + " no fue actualizado."; } byte[] updateResultBuffer = Encoding.UTF8.GetBytes(msg); client.Send(updateResultBuffer); break; case "3": // Elimina un mensaje en el servidor Operación Delete byte[] deleteBuffer = new byte[1024]; client.Receive(deleteBuffer); msg = Encoding.UTF8.GetString(deleteBuffer); newMessage = JsonConvert.DeserializeObject <Message>(msg); bool messageDeleted = ChangeMessage(newMessage); if (messageDeleted) { msg = "Mensaje con id: " + newMessage.MessageID + " eliminado exitosamente"; } else { msg = "ERROR: El Mensaje con id: " + newMessage.MessageID + " no fue eliminado"; } byte[] deleteResultBuffer = Encoding.UTF8.GetBytes(msg); client.Send(deleteResultBuffer); break; default: Console.WriteLine("Esperando datos..."); break; } // Escucha por nuevos mensajes byte[] buffer = new byte[1024]; client.Receive(buffer); msg = Encoding.UTF8.GetString(buffer); newMessage = JsonConvert.DeserializeObject <Message>(msg); Console.WriteLine(newMessage.User + ": " + newMessage.MessageString + "\t Mandado - " + newMessage.CreationTime.ToString("HH:mm")); msg = newMessage.Type.ToString(); // Guarda un mensaje en el servidor Operación Create if (newMessage.Type == 0) { messageList.Add(newMessage); } } catch (Exception ex) { Console.WriteLine("Exception", msg, ex.Message); } } Console.WriteLine("Cerrando conexión"); client.Dispose(); foreach (var item in threadsIds) { Console.WriteLine(item); } Console.WriteLine("------------"); threadsIds.Remove(param.id); foreach (var item in threadsIds) { Console.WriteLine(item); } Thread.CurrentThread.Join(); } }
public void HandleCommunication(Object obj) { ThreadParams param = (ThreadParams)obj; Socket client = param.obj; if (client != null) { Console.WriteLine("Cliente conectado. Esperando datos"); string comando = "|"; DateTime now = DateTime.Now; Message mensaje = new Message(); while (mensaje != null && !mensaje.MessageString.Equals("bye")) { try { switch (comando) { case "historial": var asString = JsonConvert.SerializeObject(listaDeMensajes, SerializerSettings); client.Send(Encoding.Unicode.GetBytes(asString)); break; case "edit": bool cambio = false; byte[] buffer1 = new byte[1024]; client.Receive(buffer1); var uft8Reader1 = new Utf8JsonReader(buffer1); mensaje = System.Text.Json.JsonSerializer.Deserialize <Message>(ref uft8Reader1); foreach (Message mensajeServidor in listaDeMensajes) { if (mensaje.id == mensajeServidor.id) { mensajeServidor.MessageString = mensaje.MessageString; cambio = true; break; } } if (cambio == true) { byte[] data1 = Encoding.UTF8.GetBytes("Mensaje actualizado correctamente"); client.Send(data1); } else { byte[] data1 = Encoding.UTF8.GetBytes("No se encontro el mensaje buscado"); client.Send(data1); } break; case "borrar": byte[] buffer2 = new byte[1024]; client.Receive(buffer2); var uft8Reader2 = new Utf8JsonReader(buffer2); mensaje = System.Text.Json.JsonSerializer.Deserialize <Message>(ref uft8Reader2); listaDeMensajes.RemoveAt(mensaje.id - 1); byte[] datos = Encoding.UTF8.GetBytes("Mensaje eliminado correctamente"); client.Send(datos); break; case "|": break; default: byte[] data = Encoding.UTF8.GetBytes("Mensaje Enviado"); client.Send(data); break; } // Escucha por nuevos mensajes byte[] buffer = new byte[1024]; client.Receive(buffer); var uft8Reader = new Utf8JsonReader(buffer); mensaje = System.Text.Json.JsonSerializer.Deserialize <Message>(ref uft8Reader); comando = mensaje.MessageString; if (comando != "historial" && comando != "bye" && comando != "edit" && comando != "borrar") { Console.WriteLine(mensaje.Hora + "-" + mensaje.User + ": " + mensaje.MessageString); listaDeMensajes.Add(mensaje); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } Console.WriteLine("Cerrando conexión"); client.Dispose(); foreach (var item in listaDeIdsDeHilos) { Console.WriteLine(item); } Console.WriteLine("------------"); listaDeIdsDeHilos.Remove(param.id); foreach (var item in listaDeIdsDeHilos) { Console.WriteLine(item); } Thread.CurrentThread.Join(); } }