diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ + diff --git a/Actividad31/build.xml b/Actividad31/build.xml new file mode 100644 index 0000000..78b5c0d --- /dev/null +++ b/Actividad31/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project Actividad31. + + + diff --git a/Actividad31/build/built-jar.properties b/Actividad31/build/built-jar.properties new file mode 100644 index 0000000..732bfbe --- /dev/null +++ b/Actividad31/build/built-jar.properties @@ -0,0 +1,4 @@ +#Mon, 11 Mar 2024 18:54:03 +0100 + + +/home/DAM2024/PSP03_Tarea/Actividad31= diff --git a/Actividad31/build/classes/actividad31/Actividad31.class b/Actividad31/build/classes/actividad31/Actividad31.class new file mode 100644 index 0000000..4c3ab8f Binary files /dev/null and b/Actividad31/build/classes/actividad31/Actividad31.class differ diff --git a/Actividad31/build/classes/actividad31/Aplicaciones/Cliente$1.class b/Actividad31/build/classes/actividad31/Aplicaciones/Cliente$1.class new file mode 100644 index 0000000..2c75f14 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Aplicaciones/Cliente$1.class differ diff --git a/Actividad31/build/classes/actividad31/Aplicaciones/Cliente$2.class b/Actividad31/build/classes/actividad31/Aplicaciones/Cliente$2.class new file mode 100644 index 0000000..5db4e01 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Aplicaciones/Cliente$2.class differ diff --git a/Actividad31/build/classes/actividad31/Aplicaciones/Cliente.class b/Actividad31/build/classes/actividad31/Aplicaciones/Cliente.class new file mode 100644 index 0000000..c71c034 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Aplicaciones/Cliente.class differ diff --git a/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$1.class b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$1.class new file mode 100644 index 0000000..cc23ad1 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$1.class differ diff --git a/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$2.class b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$2.class new file mode 100644 index 0000000..499d306 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$2.class differ diff --git a/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$3.class b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$3.class new file mode 100644 index 0000000..c13f77f Binary files /dev/null and b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor$3.class differ diff --git a/Actividad31/build/classes/actividad31/Aplicaciones/Servidor.class b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor.class new file mode 100644 index 0000000..540390d Binary files /dev/null and b/Actividad31/build/classes/actividad31/Aplicaciones/Servidor.class differ diff --git a/Actividad31/build/classes/actividad31/Drivers/Terminal$1.class b/Actividad31/build/classes/actividad31/Drivers/Terminal$1.class new file mode 100644 index 0000000..59d4bb8 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Drivers/Terminal$1.class differ diff --git a/Actividad31/build/classes/actividad31/Drivers/Terminal.class b/Actividad31/build/classes/actividad31/Drivers/Terminal.class new file mode 100644 index 0000000..1f97200 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Drivers/Terminal.class differ diff --git a/Actividad31/build/classes/actividad31/Interfaces/Terminalnterfaz.class b/Actividad31/build/classes/actividad31/Interfaces/Terminalnterfaz.class new file mode 100644 index 0000000..10f0998 Binary files /dev/null and b/Actividad31/build/classes/actividad31/Interfaces/Terminalnterfaz.class differ diff --git a/Actividad31/dist/Actividad31.jar b/Actividad31/dist/Actividad31.jar new file mode 100644 index 0000000..ea74db4 Binary files /dev/null and b/Actividad31/dist/Actividad31.jar differ diff --git a/Actividad31/dist/README.TXT b/Actividad31/dist/README.TXT new file mode 100644 index 0000000..f550aa9 --- /dev/null +++ b/Actividad31/dist/README.TXT @@ -0,0 +1,32 @@ +======================== +BUILD OUTPUT DESCRIPTION +======================== + +When you build an Java application project that has a main class, the IDE +automatically copies all of the JAR +files on the projects classpath to your projects dist/lib folder. The IDE +also adds each of the JAR files to the Class-Path element in the application +JAR files manifest file (MANIFEST.MF). + +To run the project from the command line, go to the dist folder and +type the following: + +java -jar "Actividad31.jar" + +To distribute this project, zip up the dist folder (including the lib folder) +and distribute the ZIP file. + +Notes: + +* If two JAR files on the project classpath have the same name, only the first +JAR file is copied to the lib folder. +* Only JAR files are copied to the lib folder. +If the classpath contains other types of files or folders, these files (folders) +are not copied. +* If a library on the projects classpath also has a Class-Path element +specified in the manifest,the content of the Class-Path element has to be on +the projects runtime path. +* To set a main class in a standard Java project, right-click the project node +in the Projects window and choose Properties. Then click Run and enter the +class name in the Main Class field. Alternatively, you can manually type the +class name in the manifest Main-Class element. diff --git a/Actividad31/manifest.mf b/Actividad31/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/Actividad31/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Actividad31/nbproject/build-impl.xml b/Actividad31/nbproject/build-impl.xml new file mode 100644 index 0000000..dc168b6 --- /dev/null +++ b/Actividad31/nbproject/build-impl.xml @@ -0,0 +1,1771 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Actividad31/nbproject/genfiles.properties b/Actividad31/nbproject/genfiles.properties new file mode 100644 index 0000000..415bfb7 --- /dev/null +++ b/Actividad31/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=6e889fd8 +build.xml.script.CRC32=7a5578bc +build.xml.stylesheet.CRC32=f85dc8f2@1.110.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=6e889fd8 +nbproject/build-impl.xml.script.CRC32=09e79c3a +nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.110.0.48 diff --git a/Actividad31/nbproject/private/private.properties b/Actividad31/nbproject/private/private.properties new file mode 100644 index 0000000..9b263d1 --- /dev/null +++ b/Actividad31/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=/home/kyman/snap/netbeans/93/build.properties diff --git a/Actividad31/nbproject/project.properties b/Actividad31/nbproject/project.properties new file mode 100644 index 0000000..272856d --- /dev/null +++ b/Actividad31/nbproject/project.properties @@ -0,0 +1,95 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/Actividad31.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/Actividad31 +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.modulepath= +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} +javac.source=19 +javac.target=19 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.modulepath=\ + ${javac.modulepath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=Actividad31 +main.class=actividad31.Actividad31 +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/Actividad31/nbproject/project.xml b/Actividad31/nbproject/project.xml new file mode 100644 index 0000000..6795fa1 --- /dev/null +++ b/Actividad31/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + Actividad31 + + + + + + + + + diff --git a/Actividad31/src/actividad31/Actividad31.java b/Actividad31/src/actividad31/Actividad31.java new file mode 100644 index 0000000..2a18d0e --- /dev/null +++ b/Actividad31/src/actividad31/Actividad31.java @@ -0,0 +1,76 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template + */ +package actividad31; + +import actividad31.Aplicaciones.Cliente; +import actividad31.Aplicaciones.Servidor; +import actividad31.Drivers.Terminal; +import java.util.Arrays; + +/** + * + * @author kyman + */ +public class Actividad31 { + + // Configuración. + public static final int puerto = 2000; + public static final String host = "localhost"; + public static final int[] rango_aleatorio = {0, 100}; + public static final String modo_por_defecto = "servidor"; + // Configuración. + + public static boolean trabajando = true; + public static Servidor servidor = null; + public static Cliente cliente = null; + public static Terminal terminal = null; + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + // TODO code application logic here + + String accion = args.length != 0 ? args[0] : modo_por_defecto; + + if(accion != null){ + switch(accion){ + case "servidor", "server" -> crear_servidor(); + case "cliente", "client" -> crear_cliente(); + default -> System.out.println("La acción '" + accion + "' existe. Por favor, indique si quiere lanzar el servidor o el cliente simplemente indicando 'servidor' o 'cliente'."); + } + }else + System.out.println("Por favor, indique si quiere arrancar como servidor o como cliente con las palabras clave 'servidor' o 'cliente'."); + + } + + private static void crear_servidor(){ + + terminal = new Terminal(servidor = new Servidor()); + + } + + private static void crear_cliente(){ + + terminal = new Terminal(cliente = new Cliente()); + + } + + public static void excepcion(Exception excepcion){ + System.out.println(excepcion.getMessage()); + System.out.println(Arrays.toString(excepcion.getStackTrace())); + } + + public static void cerrar(){ + trabajando = false; + if(servidor != null) + servidor.cerrar(); + if(cliente != null) + cliente.cerrar(); + if(terminal != null) + terminal.cerrar(); + } + +} diff --git a/Actividad31/src/actividad31/Aplicaciones/Cliente.java b/Actividad31/src/actividad31/Aplicaciones/Cliente.java new file mode 100644 index 0000000..f5438c9 --- /dev/null +++ b/Actividad31/src/actividad31/Aplicaciones/Cliente.java @@ -0,0 +1,111 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package actividad31.Aplicaciones; + +import actividad31.Actividad31; +import actividad31.Drivers.Terminal; +import actividad31.Interfaces.Terminalnterfaz; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author kyman + */ +public class Cliente implements Terminalnterfaz { + + private Socket socket; + private PrintWriter salida; + + public Cliente(){ + System.out.println("Lanzando cliente."); + + try{ + + socket = new Socket(Actividad31.host, Actividad31.puerto); + BufferedReader lectura = new BufferedReader(new InputStreamReader(socket.getInputStream())); + salida = new PrintWriter(socket.getOutputStream()); + + new Thread(new Runnable(){ + @Override + public void run() { + + String mensaje; + + try { + while((mensaje = lectura.readLine()) != null) + System.out.println(mensaje); + } catch (IOException excepcion) { + Actividad31.excepcion(excepcion); + } + + Actividad31.cerrar(); + + } + }).start(); + + } catch (IOException excepcion) { + // Actividad31.excepcion(excepcion); + System.out.println("No se pudo conectar contra el servidor '" + Actividad31.host + ":" + Actividad31.puerto + ". Comprueba que el servidor esté lanzado en ese host."); + Actividad31.cerrar(); + } + + } + + @Override + public boolean terminal(String comando) { + + boolean estado = false; + + try{ + + int numero = Integer.parseInt(comando); + + enviar("" + numero); + estado = true; + + }catch(Exception excepcion){} + + return estado; + } + + @Override + public void cerrar() { + + try { + if(salida != null) + salida.close(); + socket.close(); + } catch (IOException excepcion) { + Actividad31.excepcion(excepcion); + } + + } + + public boolean enviar(String mensaje){ + + boolean estado = false; + + try{ + new Thread(new Runnable(){ + @Override + public void run() { + salida.println(mensaje); + salida.flush(); + } + }).start(); + }catch(Exception excepcion){ + Actividad31.excepcion(excepcion); + } + + return estado; + } + +} diff --git a/Actividad31/src/actividad31/Aplicaciones/Servidor.java b/Actividad31/src/actividad31/Aplicaciones/Servidor.java new file mode 100644 index 0000000..fefaca2 --- /dev/null +++ b/Actividad31/src/actividad31/Aplicaciones/Servidor.java @@ -0,0 +1,184 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package actividad31.Aplicaciones; + +import actividad31.Actividad31; +import actividad31.Drivers.Terminal; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; +import actividad31.Interfaces.Terminalnterfaz; + +/** + * + * @author kyman + */ +public class Servidor implements Terminalnterfaz { + + private ServerSocket socket; + private ArrayList clientes = new ArrayList<>(); + private ArrayList salidas = new ArrayList<>(); + private int numero_aleatorio = 0; + + public Servidor(){ + System.out.println("Lanzando el servidor."); + + new Thread(new Runnable(){ + @Override + public void run() { + try{ + + socket = new ServerSocket(Actividad31.puerto); + + while(Actividad31.trabajando){ + + Socket cliente = socket.accept(); + int i = 0; + int l = clientes.size(); + PrintWriter salida = new PrintWriter(cliente.getOutputStream()); + + for(; i < l; i ++) + if(clientes.get(i) == null) + break; + + if(i == l){ + clientes.add(cliente); + salidas.add(salida); + }else{ + clientes.set(i, cliente); + salidas.set(i, salida); + } + + System.out.println("Escuchando al cliente '" + i + "'."); + + escuchar(i, new BufferedReader(new InputStreamReader(cliente.getInputStream()))); + + } + + } catch (IOException excepcion) { + Actividad31.excepcion(excepcion); + Actividad31.cerrar(); + } + } + + }).start(); + + } + + @Override + public boolean terminal(String comando) { + + boolean estado = true; + + switch(comando){ + case "regenerar" -> { + numero_aleatorio = (int)(Math.random() * (Actividad31.rango_aleatorio[1] + 1 - Actividad31.rango_aleatorio[0])) - Actividad31.rango_aleatorio[0]; + System.out.println("El nuevo número aleatorio es '" + numero_aleatorio + "'."); + } + default -> estado = false; + } + + return estado; + } + + @Override + public void cerrar() { + + for(int i = 0, l = clientes.size(); i < l; i ++){ + + Socket cliente = clientes.get(i); + + if(cliente != null){ + + PrintWriter salida = salidas.get(i); + + try { + + if(salida != null){ + salida.close(); + salidas.set(i, null); + } + + cliente.close(); + clientes.set(i, null); + + } catch (IOException excepcion) { + Actividad31.excepcion(excepcion); + } + + } + + } + + try{ + socket.close(); + } catch (IOException excepcion) { + Actividad31.excepcion(excepcion); + } + + } + + public boolean enviar(int i, String mensaje){ + + boolean exito = false; + PrintWriter salida; + + try{ + salida = salidas.get(i); + new Thread(new Runnable() { + @Override + public void run() { + salida.println(mensaje); + salida.flush(); + } + }).start(); + exito = true; + }catch(Exception excepcion){ + Actividad31.excepcion(excepcion); + } + + return exito; + } + + private void escuchar(int i, BufferedReader entrada){ + new Thread(new Runnable() { + @Override + public void run() { + + String mensaje; + + try{ + while((mensaje = entrada.readLine()) != null) + switch(mensaje){ + default -> { + try{ + + int valor = Integer.parseInt(mensaje.trim()); + + if(valor == numero_aleatorio) + enviar(i, "¡¡Has acertado!! El número es " + valor + "."); + else if(valor < numero_aleatorio) + enviar(i, "El número es mayor que '" + valor + "'."); + else + enviar(i, "El número es menor que '" + valor + "'."); + + }catch(Exception excepcion){ + Actividad31.excepcion(excepcion); + } + } + } + entrada.close(); + } catch (IOException excepcion) { + Actividad31.excepcion(excepcion); + } + } + }).start(); + } + +} diff --git a/Actividad31/src/actividad31/Drivers/Terminal.java b/Actividad31/src/actividad31/Drivers/Terminal.java new file mode 100644 index 0000000..7ee8723 --- /dev/null +++ b/Actividad31/src/actividad31/Drivers/Terminal.java @@ -0,0 +1,58 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package actividad31.Drivers; + +import actividad31.Actividad31; +import actividad31.Interfaces.Terminalnterfaz; +import java.util.Scanner; + +/** + * + * @author kyman + */ +public class Terminal { + + private boolean activo = true; + + public Terminal(Terminalnterfaz padre){ + + if(!Actividad31.trabajando){ + activo = false; + return; + } + + System.out.println("Lanzando terminal."); + + new Thread(new Runnable(){ + @Override + public void run() { + + Scanner entrada = new Scanner(System.in); + String comando; + + while(Actividad31.trabajando) + switch(comando = entrada.nextLine()){ + case "cerrar", "terminar", "close", "exit", "salir", "bye" -> { + Actividad31.trabajando = false; + padre.cerrar(); + } + default -> { + if(!padre.terminal(comando) && Actividad31.trabajando) + System.out.println("El comando '" + comando + "' no existe."); + } + } + activo = false; + + } + }).start(); + + } + + public void cerrar(){ + if(activo) + System.out.println("Por favor, presione cualquier tecla para terminar de cerrar la aplicación."); + } + +} diff --git a/Actividad31/src/actividad31/Interfaces/Terminalnterfaz.java b/Actividad31/src/actividad31/Interfaces/Terminalnterfaz.java new file mode 100644 index 0000000..26ed349 --- /dev/null +++ b/Actividad31/src/actividad31/Interfaces/Terminalnterfaz.java @@ -0,0 +1,16 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package actividad31.Interfaces; + +/** + * + * @author kyman + */ +public interface Terminalnterfaz { + + public boolean terminal(String comando); + public void cerrar(); + +}