Ejemplo n.º 1
0
        /// <summary>
        /// Endpoint que se utiliza para insertar un mensaje nuevo
        /// </summary>
        /// <param name="request">Recibe una petición con un valor de tipo Mensaje</param>
        private void ep_Mensaje_Nuevo(Request request)
        {
            try
            {
                if (Usuario == null)
                {
                    Send("error", "El usuario no ha iniciado sesión", false, 404);
                    return;
                }

                Mensaje mensajeRecibido = JsonConvert.DeserializeObject <Mensaje>(Convert.ToString(request.Value));

                if (mensajeRecibido == null)
                {
                    Send("error", "No se ha podido obtener el mensaje recibido", false, 404);
                    return;
                }

                if (string.IsNullOrEmpty(mensajeRecibido.NickUsuarioRemitente) && mensajeRecibido.IdGrupo != 0)
                {
                    // Send("error", "Se requiere un grupo o un usuario remitente", false, 404);
                    return;
                }

                Usuario usuarioRemitente = null;
                Mensaje mensaje          = null;

                if (mensajeRecibido.IdGrupo == 0 && string.IsNullOrEmpty(mensajeRecibido.NickUsuarioRemitente))
                {
                    mensaje = new Mensaje()
                    {
                        IdGrupo            = 0,
                        IdUsuarioRemitente = 0,
                        IdUsuario          = mensajeRecibido.IdUsuario,
                        Contenido          = mensajeRecibido.Contenido,
                        RutaContenido      = mensajeRecibido.RutaContenido,
                        Binario            = mensajeRecibido.Binario,
                        FechaAlta          = DateTime.Now
                    };
                }
                else
                {
                    bool    isEmpty = false;
                    DataSet result  = BD.sp_Usuarios_Select(ref isEmpty, mensajeRecibido.NickUsuarioRemitente);

                    if (isEmpty)
                    {
                        Send("error", "El usuario remitente no existe", false, 404);
                        return;
                    }

                    usuarioRemitente = new Usuario()
                    {
                        Id       = Convert.ToInt32(result.Tables[0].Rows[0]["Id"]),
                        Correo   = Convert.ToString(result.Tables[0].Rows[0]["Correo"]),
                        Nick     = string.IsNullOrEmpty(Convert.ToString(result.Tables[0].Rows[0]["Nick"])) ? Convert.ToString(result.Tables[0].Rows[0]["Correo"]) : Convert.ToString(result.Tables[0].Rows[0]["Nick"]),
                        Password = Convert.ToString(result.Tables[0].Rows[0]["Password"])
                    };

                    mensaje = new Mensaje()
                    {
                        IdGrupo            = 0,
                        IdUsuarioRemitente = usuarioRemitente.Id,
                        IdUsuario          = mensajeRecibido.IdUsuario,
                        Contenido          = mensajeRecibido.Contenido,
                        RutaContenido      = mensajeRecibido.RutaContenido,
                        Binario            = mensajeRecibido.Binario,
                        FechaAlta          = DateTime.Now
                    };
                }

                if (!BD.sp_Mensajes_Insert(mensaje))
                {
                    Send("error", "No se pudo enviar el mensaje", false, 404);
                    return;
                }

                mensaje.Contenido = $"{Usuario.Nick}: {mensaje.Contenido}";
                Send(request.Key, mensaje, status: 200);
            }
            catch (Exception ex)
            {
                Send("error", ex.Message, status: 200);
                Fun.PrintLog(Fun.Log.Error, ex.Message, "Client.ep_Mensaje_Nuevo");
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Endpoint que se utiliza para insertar un mensaje nuevo con un archivo
        /// </summary>
        /// <param name="request">Recibe una petición con un valor de tipo Mensaje</param>
        private void ep_Mensaje_Archivo_Nuevo(Request request)
        {
            try
            {
                if (Usuario == null)
                {
                    Send("error", "El usuario no ha iniciado sesión", false, 404);
                    return;
                }

                Mensaje mensajeRecibido = JsonConvert.DeserializeObject <Mensaje>(Convert.ToString(request.Value));

                if (mensajeRecibido == null)
                {
                    Send("error", "No se ha podido obtener el mensaje recibido", false, 404);
                    return;
                }

                if (string.IsNullOrEmpty(mensajeRecibido.NickUsuarioRemitente) && mensajeRecibido.IdGrupo != 0)
                {
                    // Send("error", "Se requiere un grupo o un usuario remitente", false, 404);
                    return;
                }

                Usuario usuarioRemitente = null;
                Mensaje mensaje          = null;

                bool    isEmpty = false;
                DataSet result  = null;

                if (mensajeRecibido.IdGrupo == 0 && string.IsNullOrEmpty(mensajeRecibido.NickUsuarioRemitente))
                {
                    mensaje = new Mensaje()
                    {
                        IdGrupo            = 0,
                        IdUsuarioRemitente = 0,
                        IdUsuario          = mensajeRecibido.IdUsuario,
                        Contenido          = mensajeRecibido.Contenido,
                        RutaContenido      = mensajeRecibido.RutaContenido,
                        Binario            = mensajeRecibido.Binario,
                        FechaAlta          = DateTime.Now
                    };
                }
                else
                {
                    isEmpty = false;
                    result  = BD.sp_Usuarios_Select(ref isEmpty, mensajeRecibido.NickUsuarioRemitente);

                    if (isEmpty)
                    {
                        Send("error", "El usuario remitente no existe", false, 404);
                        return;
                    }

                    usuarioRemitente = new Usuario()
                    {
                        Id       = Convert.ToInt32(result.Tables[0].Rows[0]["Id"]),
                        Correo   = Convert.ToString(result.Tables[0].Rows[0]["Correo"]),
                        Nick     = string.IsNullOrEmpty(Convert.ToString(result.Tables[0].Rows[0]["Nick"])) ? Convert.ToString(result.Tables[0].Rows[0]["Correo"]) : Convert.ToString(result.Tables[0].Rows[0]["Nick"]),
                        Password = Convert.ToString(result.Tables[0].Rows[0]["Password"])
                    };

                    mensaje = new Mensaje()
                    {
                        IdGrupo            = 0,
                        IdUsuarioRemitente = usuarioRemitente.Id,
                        IdUsuario          = mensajeRecibido.IdUsuario,
                        Contenido          = mensajeRecibido.Contenido,
                        RutaContenido      = mensajeRecibido.RutaContenido,
                        Binario            = mensajeRecibido.Binario,
                        FechaAlta          = DateTime.Now
                    };
                }

                if (!BD.sp_Mensajes_Insert(mensaje))
                {
                    Send("error", "No se pudo enviar el mensaje", false, 404);
                    return;
                }

                isEmpty = false;
                int?idMensaje = BD.sp_Mensajes_SelectMaxIdentity();

                if (!idMensaje.HasValue)
                {
                    Send(request.Key, "No se encontro el mensaje solicitado", false, 404);
                    return;
                }

                result = BD.sp_Mensajes_Select(ref isEmpty, idMensaje.Value);

                if (isEmpty)
                {
                    Send(request.Key, "No se encontro el mensaje solicitado", false, 404);
                    return;
                }

                DataTable dt = result.Tables[0];

                Mensaje mensajeInsertado = new Mensaje()
                {
                    Id            = idMensaje.Value,
                    IdGrupo       = !Convert.IsDBNull(dt.Rows[0]["IdGrupo"]) ? Convert.ToInt32(Convert.ToString(dt.Rows[0]["IdGrupo"])) : 0,
                    IdUsuario     = !Convert.IsDBNull(dt.Rows[0]["IdUsuario"]) ? Convert.ToInt32(Convert.ToString(dt.Rows[0]["IdUsuario"])) : 0,
                    Contenido     = !Convert.IsDBNull(dt.Rows[0]["Contenido"]) ? Convert.ToString(dt.Rows[0]["Contenido"]) : string.Empty,
                    RutaContenido = !Convert.IsDBNull(dt.Rows[0]["RutaContenido"]) ? Convert.ToString(dt.Rows[0]["RutaContenido"]) : string.Empty,
                    Binario       = !Convert.IsDBNull(dt.Rows[0]["Binario"]) ? (byte[])dt.Rows[0]["Binario"] : null,
                    FechaAlta     = !Convert.IsDBNull(dt.Rows[0]["FechaAlta"]) ? Convert.ToDateTime(dt.Rows[0]["FechaAlta"]) : DateTime.Now
                };

                Send(request.Key, mensajeInsertado, status: 200);
            }
            catch (Exception ex)
            {
                Send("error", ex.Message, status: 200);
                Fun.PrintLog(Fun.Log.Error, ex.Message, "Client.ep_Mensaje_Archivo_Nuevo");
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Método que contiene una estructura ciclica para escuchar peticiones del cliente
        /// </summary>
        /// <param name="client"></param>
        public async void ListenRequests(Client client)
        {
            while (true)
            {
                try
                {
                    bool    isEmptyValue = false;
                    string  mensaje      = string.Empty;
                    Request request      = null;
                    string  strRequest   = await Reader.ReadLineAsync();

                    if (!DebugRequest(ref request, ref mensaje, ref isEmptyValue, strRequest))
                    {
                        if (!string.IsNullOrEmpty(mensaje))
                        {
                            Fun.PrintLog(Fun.Log.Warning, mensaje, "Masengger.Client.ListenRequests.DebugRequest");
                        }

                        Stop();
                        break;
                    }

                    if (request == null)
                    {
                        continue;
                    }

                    switch (request.Key)
                    {
                    case "login_validuser":
                    {
                        ep_Login_ValidUser(request);
                        break;
                    }

                    case "register_create":
                    {
                        ep_Register_Create(request);
                        break;
                    }

                    case "user_getByNick":
                    {
                        ep_User_GetByNick(request);
                        break;
                    }

                    case "user_list":
                    {
                        ep_User_List(request);
                        break;
                    }

                    case "user_connected_list":
                    {
                        ep_User_Connected_List(request);
                        break;
                    }

                    case "file_get":
                    {
                        ep_File_Get(request);
                        break;
                    }

                    case "mensaje_nuevo":
                    {
                        ep_Mensaje_Nuevo(request);
                        break;
                    }

                    case "mensaje_archivo_nuevo":
                    {
                        ep_Mensaje_Archivo_Nuevo(request);
                        break;
                    }

                    case "mensajes_lista":
                    {
                        ep_Mensajes_Lista(request);
                        break;
                    }

                    case "video_get":
                    {
                        ep_Video_Get(request);
                        break;
                    }

                    default:
                    {
                        break;
                    }
                    }
                }
                catch (Exception ex)
                {
                    // se ignora este error porque al ocurre de parar el hilo, es decir, es un error controlado
                    if (ex.Message == "Thread was being aborted.")
                    {
                        break;
                    }

                    // errores que pasan cuando se pierde la conexión con el cliente de forma inesperada
                    if (ex.Message == "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host." ||
                        ex.Message == "Cannot read from a closed TextReader." ||
                        ex.Message.Contains("Cannot access a disposed object.") ||
                        ex.Message == "The stream is currently in use by a previous operation on the stream.")
                    {
                        Stop();
                        break;
                    }

                    Fun.PrintLog(Fun.Log.Error, ex.Message, "Client.ListenClient");
                }
            }
        }