// Thread Method
        private void incomingMessage()
        {
            string  str;
            Mensaje message;

            while (tcpClient.Connected)
            {
                str = delivery.RecieveMessage();
                Console.WriteLine(str);
                if (str != null)
                {
                    message = SerializarcionJson.Deserializar(str) as Mensaje;
                    // TODO: Descerializar a Mensaje, checkear el tipo y descerializar a el tipo que corresponde
                    MsgConexion     menCon;
                    MsgLocalizacion menLoc;
                    MsgDBRespuesta  menDB;

                    if (message is MsgConexion)
                    {
                        menCon = message as MsgConexion;

                        if (menCon.Mensaje == "conectar")
                        {
                            OnConnect(menCon);
                        }
                        else if (menCon.Mensaje == "desconectar")
                        {
                            OnDisconnect(menCon);
                        }
                    }
                    else if (message is MsgLocalizacion)
                    {
                        menLoc = message as MsgLocalizacion;

                        OnLocationChanged(menLoc);
                    }
                    else if (message is MsgDBRespuesta)
                    {
                        menDB = message as MsgDBRespuesta;

                        OnDBRequested(menDB);
                    }
                }
                else
                {
                    Console.WriteLine("llega null");
                }
            }
        }
Esempio n. 2
0
        // Thread Method
        private void incomingMessage()
        {
            string  str     = null;
            Mensaje message = null;

            while (client.Client.Connected)
            {
                try
                {
                    str = delivery.RecieveMessage();
                }
                catch (Exception e)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("== ERROR EN: " + this.GetType().Name + " == -" + e.Message);
                    Console.ForegroundColor = ConsoleColor.White;
                }

                if (str != null)
                {
                    try
                    {
                        message = SerializarcionJson.Deserializar(str) as Mensaje;
                    }
                    catch (Exception e)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("== ERROR EN: " + this.GetType().Name + " == -" + e.Message);
                        Console.ForegroundColor = ConsoleColor.White;
                    }

                    MsgConexion     menCon;
                    MsgLocalizacion menLoc;
                    MsgDBPeticion   menDB;

                    {
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine("RECIBIENDO: " + message.Tipo);

                        switch (message.Tipo)
                        {
                        case "MsgConexion":
                            Console.ForegroundColor = ConsoleColor.Green; break;

                        case "MsgLocalizacion":
                            Console.ForegroundColor = ConsoleColor.Blue; break;

                        case "MsgDBPeticion":
                            Console.ForegroundColor = ConsoleColor.Yellow; break;
                        }

                        Console.WriteLine(str);
                        Console.ForegroundColor = ConsoleColor.White;
                    }

                    if (message is MsgConexion)
                    {
                        menCon = message as MsgConexion;

                        if (menCon.Mensaje == "conectar")
                        {
                            OnConnect(menCon);
                        }
                        else if (menCon.Mensaje == "desconectar")
                        {
                            OnDisconnect(menCon);
                        }
                    }
                    else if (message is MsgLocalizacion)
                    {
                        menLoc = message as MsgLocalizacion;
                        Historial h;

                        try
                        {
                            new Thread(() =>
                            {
                                MsgLocalizacion m = menLoc;
                                try
                                {
                                    foreach (string to in m.To)
                                    {
                                        h        = new Historial();
                                        h.Fecha  = m.Fecha;
                                        h.Lat    = Convert.ToDecimal(m.Latitud.Replace('.', ','));
                                        h.Long   = Convert.ToDecimal(m.Longitud.Replace('.', ','));
                                        h.Cuenta = dbcontrol.GetCuentaByUsuario(m.From);
                                        h.Grupo  = dbcontrol.GetGrupoByNombre(to);

                                        dbcontrol.CreateHistorial(h);
                                    }
                                }
                                catch (Exception e)
                                {
                                    Console.ForegroundColor = ConsoleColor.Red;
                                    Console.WriteLine("== ERROR EN: " + this.GetType().Name + " == -" + e.Message);
                                    Console.ForegroundColor = ConsoleColor.White;
                                }
                            }).Start();
                        }
                        catch (Exception e)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("== ERROR EN: " + this.GetType().Name + " == -" + e.Message);
                            Console.ForegroundColor = ConsoleColor.White;
                        }
                        finally
                        {
                            OnLocationChanged(menLoc);
                        }
                    }
                    else if (message is MsgDBPeticion)
                    {
                        menDB = message as MsgDBPeticion;

                        if (menDB.CodigoPeticion == "Login")
                        {
                            Cuenta         c = menDB.ParamsCuenta[0];
                            Cuenta         cres;
                            MsgDBRespuesta res = new MsgDBRespuesta();

                            try
                            {
                                cres = dbcontrol.Login(c);

                                res.ReturnCuenta.Add(cres);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "CrearCuenta")
                        {
                            Cuenta         c   = menDB.ParamsCuenta[0];
                            MsgDBRespuesta res = new MsgDBRespuesta();
                            Cuenta         cres;

                            try
                            {
                                cres = dbcontrol.CreateCuenta(c);

                                res.ReturnCuenta.Add(cres);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "BorrarCuenta")
                        {
                            Cuenta         c   = menDB.ParamsCuenta[0];
                            MsgDBRespuesta res = new MsgDBRespuesta();

                            try
                            {
                                dbcontrol.DeleteCuenta(c.Usuario);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;

                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "CrearGrupo")
                        {
                            Grupo           g    = menDB.ParamsGrupo[0];
                            Grupo           gres = new Grupo();
                            MsgDBRespuesta  res  = new MsgDBRespuesta();
                            MsgNotificacion not  = new MsgNotificacion();

                            try
                            {
                                gres = dbcontrol.CreateGrupo(g);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                                not.IsValido = false;
                                not.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnGrupo.Add(gres);

                                not.From      = menDB.From;
                                not.Fecha     = DateTime.Now;
                                not.Respuesta = res;
                                foreach (Cuenta c in gres.Integrantes)
                                {
                                    not.To.Add(c.Usuario);
                                }

                                OnDBRequested(res);
                                OnDBRequested(not);
                            }
                        }
                        else if (menDB.CodigoPeticion == "GetGrupoPorAnfitrion")
                        {
                            Cuenta         c   = menDB.ParamsCuenta[0];
                            List <Grupo>   g   = new List <Grupo>();
                            MsgDBRespuesta res = new MsgDBRespuesta();

                            try
                            {
                                g = dbcontrol.GetGrupoByAnfitrion(c.Id);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnGrupo.AddRange(g);

                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "GetGrupoPorIntegrante")
                        {
                            Cuenta         c   = menDB.ParamsCuenta[0];
                            MsgDBRespuesta res = new MsgDBRespuesta();
                            List <Grupo>   g   = new List <Grupo>();

                            try
                            {
                                g = dbcontrol.GetGrupoByIntegrante(c.Id);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnGrupo.AddRange(g);

                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "AgregarCuentaAGrupo")
                        {
                            Cuenta          c   = menDB.ParamsCuenta[0];
                            Grupo           g   = menDB.ParamsGrupo[0];
                            Grupo           gr  = new Grupo();
                            MsgDBRespuesta  res = new MsgDBRespuesta();
                            MsgNotificacion not = new MsgNotificacion();

                            try
                            {
                                gr = dbcontrol.AddCuentaToGrupo(c.Id, g.Id);

                                not.Fecha     = DateTime.Now;
                                not.From      = menDB.From;
                                not.To        = menDB.To;
                                not.Respuesta = res;
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnGrupo.Add(gr);

                                not.Fecha     = DateTime.Now;
                                not.From      = menDB.From;
                                not.To        = menDB.To;
                                not.Respuesta = res;

                                OnDBRequested(res);
                                OnDBRequested(not);
                            }
                        }
                        else if (menDB.CodigoPeticion == "BorrarCuentaDeGrupo")
                        {
                            Cuenta         c   = menDB.ParamsCuenta[0];
                            List <Grupo>   gr  = new List <Grupo>();
                            MsgDBRespuesta res = new MsgDBRespuesta();

                            try
                            {
                                foreach (Grupo g in menDB.ParamsGrupo)
                                {
                                    gr.Add(dbcontrol.DeleteCuentaFromGrupo(c.Id, g.Id));
                                }
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnGrupo.AddRange(gr);

                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "BorrarGrupo")
                        {
                            Grupo          g   = menDB.ParamsGrupo[0];
                            MsgDBRespuesta res = new MsgDBRespuesta();

                            try
                            {
                                dbcontrol.DeleteGrupo(g.Id);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;

                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "GetHistorialPorGrupo")
                        {
                            Grupo            g   = menDB.ParamsGrupo[0];
                            List <Historial> hr  = new List <Historial>();
                            MsgDBRespuesta   res = new MsgDBRespuesta();

                            try
                            {
                                hr = dbcontrol.GetHistorialByGrupo(g.Id);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnHistorial.AddRange(hr);

                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "GetHistorialPorCuenta")
                        {
                            Cuenta           c   = menDB.ParamsCuenta[0] as Cuenta;
                            List <Historial> hr  = new List <Historial>();
                            MsgDBRespuesta   res = new MsgDBRespuesta();

                            try
                            {
                                hr = dbcontrol.GetHistorialByCuenta(c.Id);
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnHistorial.AddRange(hr);

                                OnDBRequested(res);
                            }
                        }
                        else if (menDB.CodigoPeticion == "GetCuentas")
                        {
                            List <Cuenta>  lr  = new List <Cuenta>();
                            MsgDBRespuesta res = new MsgDBRespuesta();

                            try
                            {
                                lr = dbcontrol.GetAllCuentas();
                            }
                            catch (Exception e)
                            {
                                res.IsValido = false;
                                res.Errores.Add(e.Message);
                            }
                            finally
                            {
                                res.From           = menDB.From;
                                res.To             = menDB.To;
                                res.Fecha          = DateTime.Now;
                                res.CodigoPeticion = menDB.CodigoPeticion;
                                res.ReturnCuenta.AddRange(lr);

                                OnDBRequested(res);
                            }
                        }
                        else
                        {
                            menDB.IsValido = false;
                            menDB.Errores.Add("Este codigo de peticion no es valido.");

                            OnDBRequested(menDB);
                        }
                    }
                }
                else
                {
                    client.RemoveMe();
                }
            }
        }