// usage $ java Acumulador import java.io.*; import java.net.*; import java.sql.*; public class Acumulador_DB { private Statement sentencia; public Acumulador_DB() { // Este metodo no se medía Connection conexion; try { Class.forName("org.mariadb.jdbc.Driver"); } catch( Exception e ) { System.out.println( "No se pudo cargar el driver" ); e.printStackTrace(); return; } try { conexion = DriverManager.getConnection("jdbc:mysql://localhost/Votacion","root", ""); System.out.println( "Conexion establecida" ); sentencia = conexion.createStatement(); } catch (Exception e) { e.printStackTrace(); } } public void createTable() { // Metodo pedido try { sentencia.execute( "DROP TABLE ConteoGeneral" ); } catch( SQLException e ) {System.out.println( "Tabla no eliminada" );} try { sentencia.executeUpdate( "CREATE TABLE ConteoGeneral (Correlativo INT(11), Preferencia CHAR)"); } catch( SQLException e ) {System.out.println( "Tabla no eliminada" );} } public void storeVote(int corr, char vote) { // Metodo pedido try { sentencia.executeUpdate("INSERT INTO ConteoGeneral VALUES (' "+corr+"','"+vote+"' )"); } catch (Exception e) {System.out.print(e);} } public static void main(String[] args ) throws Exception { Acumulador_DB db= new Acumulador_DB(); db.createTable(); Conteo conteo = new Conteo(db); Thread tcpService = new TCPClientServer(Integer.parseInt(args[0]), conteo); Thread udpService = new UDPClientService(Integer.parseInt(args[0]), conteo); tcpService.start(); udpService.start(); } } class Conteo { private Acumulador_DB db; // no se pedia private int correlativo=0; // no se pedia public Conteo(Acumulador_DB dataBase) { db = dataBase; } synchronized public void incrA(){ A++; correlativo++; db.storeVote(correlativo, 'A'); } synchronized public void incrB(){ B++; correlativo++; db.storeVote(correlativo, 'B'); } synchronized public void printCount() { System.out.println("Preferencias: A:"+A+" B:"+B); } private int A=0, B=0; } class TCPClientServer extends Thread { public TCPClientServer(int port, Conteo cont) throws Exception { s = new ServerSocket(port); conteo = cont; } public void run() { while (true) { try { Socket client = s.accept( ); Thread t = new TCPClientService(client, conteo); System.out.println("New TCP client"); t.start(); } catch (Exception e){ e.printStackTrace(); } } } private ServerSocket s; private Conteo conteo; } class TCPClientService extends Thread { public TCPClientService (Socket cs, Conteo cont) { incoming = cs; conteo = cont; } public void run() { try { BufferedReader in = new BufferedReader (new InputStreamReader(incoming.getInputStream())); boolean done = false; while (!done) { String str = in.readLine(); if (str == null) done = true; else { if (str.charAt(0)=='A') conteo.incrA(); else conteo.incrB(); conteo.printCount(); } } incoming.close(); } catch (Exception e) { e.printStackTrace();} } private Socket incoming; private Conteo conteo; } class UDPClientService extends Thread { public UDPClientService (int port, Conteo cont) throws Exception { incoming = new DatagramSocket(port); conteo=cont; } public void run() { try { DatagramPacket dp = new DatagramPacket(new byte[10],10); while(true) { incoming.receive(dp); if (dp.getData()[0]=='A') conteo.incrA(); else conteo.incrB(); conteo.printCount(); } } catch (Exception e) { e.printStackTrace(); } } private DatagramSocket incoming ; private Conteo conteo; }