コード例 #1
0
ファイル: TCPServer.cs プロジェクト: BaezCrdrmUV/template_tcp
        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();
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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();
            }
        }
コード例 #5
0
        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();
            }
        }
コード例 #6
0
        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();
            }
        }