public void broadcastPuja(Puja p) { const string TOPIC_NAME = "Pujas"; const string BROKER = "tcp://localhost:61616"; TopicPublisher publisher; publisher = new TopicPublisher(TOPIC_NAME, BROKER); var javaScriptSerializer = new JavaScriptSerializer(); String item = javaScriptSerializer.Serialize(p); publisher.SendMessage(item); }
//Procesa el json de la puja public void procesarMensaje(string m) { Puja p = new Puja(); string jsonPuja = m; var javaScriptSerializer = new JavaScriptSerializer(); p = javaScriptSerializer.Deserialize<Puja>(jsonPuja); //Comprobar si la venta no ha terminado if (!isVentaTerminada(p.ventaId)) { //Comprobar si supera la puja mas alta if (p.cantidad > getVenta(p.ventaId).precio) { //Establecer nuevo precio Console.WriteLine("Cantidad antigua: " + getVenta(p.ventaId).precio); LogMessageToFile("Nueva puja superior (Item " + p.ventaId + " ): " + p.cantidad); Console.WriteLine(p.ventaId + ", " + p.cantidad); setNuevoPrecio(p.ventaId, p.cantidad, p.pujadorId); //Informar mediante topic del nuevo precio broadcastPuja(p); } else { LogMessageToFile("Puja descartada (Item " + p.ventaId + " ): " + p.cantidad); } } }
public void gestionarVentaFinalizada(Venta v) { //Dar como finalizada la venta en la BD MySqlConnection conn = new MySqlConnection(connString); MySqlCommand command = conn.CreateCommand(); command.CommandText = "update ventas set finalizada = 1 where id =" + v.id; conn.Open(); command.ExecuteNonQuery(); conn.Close(); //Informar al vendedor y comprador de que la venta ha finalizado //Obtener la puja maxima command.CommandText = "select * from pujas p where p.idVenta = " + v.id; conn.Open(); Puja pMax = new Puja(); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Puja p = new Puja(); p.ventaId = int.Parse(reader["idVenta"].ToString()); p.pujadorId = int.Parse(reader["idUsuario"].ToString()); p.cantidad = int.Parse(reader["precioPuja"].ToString()); if (p.cantidad > pMax.cantidad){ pMax = p; } } conn.Close(); //Obtener al usuario de la puja maxima command.CommandText = "select * from usuarios u where u.id = " + pMax.pujadorId; conn.Open(); Usuario uGanador = new Usuario(); reader = command.ExecuteReader(); while (reader.Read()) { uGanador.Nombre = reader["nombre"].ToString(); uGanador.Mail = reader["mail"].ToString(); } conn.Close(); //Obtener al usuario vendedor command.CommandText = "select * from usuarios u, ventas v where u.id = v.vendedor and v.id =" + pMax.ventaId; conn.Open(); Usuario uVendedor = new Usuario(); reader = command.ExecuteReader(); while (reader.Read()) { uVendedor.Nombre = reader["nombre"].ToString(); uVendedor.Mail = reader["mail"].ToString(); } conn.Close(); //Enviar un mail ambos enviarMail(uGanador, v, "Le informamos que ha ganado la subasta del articulo: " + v.tipo + " con ID: " + v.id); enviarMail(uVendedor, v, "Le informamos que ha vendido el articulo: " + v.tipo + " con ID: " + v.id); //Informar a los pujadores de la venta finalizada (TOPIC) informarVentaFinalizada(v, uGanador); //Purgar venta de la lista actual for (int i = 0; i < listaVentas.Count; i++) { if (listaVentas[i].id == v.id) { listaVentas.RemoveAt(i); } } LogMessageToFile(uGanador.Nombre + " ha ganado la subasta del artículo: " + v.tipo + " con ID: " + v.id.ToString() + ". Vendido por: " + uVendedor.Nombre); }