From 772ffef046c473b88be9eddb47968aa69aacd036 Mon Sep 17 00:00:00 2001 From: xtophe Date: Sat, 22 Jan 2022 22:04:26 +0100 Subject: [PATCH 1/3] feat add APRS IS module --- ModuleAPRSIS/pom.xml | 41 +++++++ .../josast/aprsis/AThreadInputStream.java | 50 +++++++++ .../josast/aprsis/AprsIsConfiguration.java | 84 ++++++++++++++ .../java/org/avmdti/josast/aprsis/Client.java | 105 ++++++++++++++++++ .../org/avmdti/josast/aprsis/ICompute.java | 17 +++ .../avmdti/josast/aprsis/demo/DemoAPRSIS.java | 69 ++++++++++++ .../josast/aprsis/demo/DemoTreatment.java | 50 +++++++++ ModuleAPRSIS/src/site/apt/summary.apt | 3 + ModuleAPRSIS/src/site/fml/faqs.fml | 22 ++++ ModuleAPRSIS/src/site/site.xml | 29 +++++ .../avmdti/josast/AThreadInputStreamTest.java | 22 ++++ .../java/org/avmdti/josast/ClientTest.java | 73 ++++++++++++ .../java/org/avmdti/josast/SeveurDetest.java | 47 ++++++++ .../aprsis/AprsIsConfigurationTest.java | 51 +++++++++ 14 files changed, 663 insertions(+) create mode 100644 ModuleAPRSIS/pom.xml create mode 100644 ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AThreadInputStream.java create mode 100644 ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AprsIsConfiguration.java create mode 100644 ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java create mode 100644 ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/ICompute.java create mode 100644 ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java create mode 100644 ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java create mode 100644 ModuleAPRSIS/src/site/apt/summary.apt create mode 100644 ModuleAPRSIS/src/site/fml/faqs.fml create mode 100644 ModuleAPRSIS/src/site/site.xml create mode 100644 ModuleAPRSIS/src/test/java/org/avmdti/josast/AThreadInputStreamTest.java create mode 100644 ModuleAPRSIS/src/test/java/org/avmdti/josast/ClientTest.java create mode 100644 ModuleAPRSIS/src/test/java/org/avmdti/josast/SeveurDetest.java create mode 100644 ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java diff --git a/ModuleAPRSIS/pom.xml b/ModuleAPRSIS/pom.xml new file mode 100644 index 00000000..5b0a8956 --- /dev/null +++ b/ModuleAPRSIS/pom.xml @@ -0,0 +1,41 @@ + + + + org.josast + JOSAST-parent + 0.0.2 + + + + 4.0.0 + + aprsIs + jar + 1.0-SNAPSHOT + Module APRSIS + + + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + + + + + + + + + + + diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AThreadInputStream.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AThreadInputStream.java new file mode 100644 index 00000000..f0c6daf6 --- /dev/null +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AThreadInputStream.java @@ -0,0 +1,50 @@ +/** + * + */ +package org.avmdti.josast.aprsis; + +import java.util.logging.Logger; + +/** + * Simple Tread to help the use of the APRS-IS server. + * + * @author XTOPHE + * + */ +public class AThreadInputStream extends Thread { + + private static Logger logger = Logger.getLogger("AmsatLogger"); + + private boolean actif = true; + + private ICompute compute = null; + + /** + * @param compute specific treatment + */ + public AThreadInputStream(ICompute compute) { + super(); + this.compute = compute; + } + + /** + * @see java.lang.Runnable#run() + */ + public void run() + { + // set the process to actif + actif = true; + if (compute!= null) + { + while (actif) + { + actif = compute.execute(); + } + } + else + { + logger.severe("compute equal null"); + } + } + +} diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AprsIsConfiguration.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AprsIsConfiguration.java new file mode 100644 index 00000000..8f4de3f9 --- /dev/null +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/AprsIsConfiguration.java @@ -0,0 +1,84 @@ +package org.avmdti.josast.aprsis; + +public class AprsIsConfiguration { + private String call = null; + + private String password = null; + + private String filter =null ; + + private String host = "rotate.aprs.net";// "first.aprs.net"; + + private int port = 14580; + /** + * @return the callSign used + */ + public String getCall() { + return call; + } + + public void setCall(String call) { + this.call = call; + } + + public String getPass() { + return password; + } + + public void setPass(String pass) { + this.password = pass; + } + + public String getFilter() { + return filter; + } + + public void setFilter(String filter) { + this.filter = filter; + } + /** + * @return hostname of the server + */ + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + /** + * @return the port number + */ + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + /** + * @param host hostname of the APRS-IS server + * @param port port number + * @param call callsign used for the connection + * @param password password + * @param filter filter used to select packet + */ + public AprsIsConfiguration(String call, String password, String filter, + String host, int port) { + super(); + this.call = call; + this.password = password; + this.filter = filter; + this.host = host; + this.port = port; + } + + public AprsIsConfiguration() { + super(); + // TODO Auto-generated constructor stub + } + + +} diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java new file mode 100644 index 00000000..634aa526 --- /dev/null +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java @@ -0,0 +1,105 @@ +/* + * Client.java + * + * Created on 19 avril 2006, 16:15 + * + */ + +package org.avmdti.josast.aprsis; + +import java.io.IOException; +import java.io.InputStream; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Client used to perform the connection to the APRS-IS Serveur; + * + * @author XTOPHE + */ +public class Client { + + private static Logger logger = Logger.getLogger("AmsatLogger"); + + private Socket s = null; + + private AprsIsConfiguration Config; + + + + + + /** + * + * create a "client" to connect to an APRS-IS Server + * @param config + * + */ + public Client(AprsIsConfiguration config) { + Config = config; + } + + /** + * + * return an inputStream from the current connection + * + * @return InputStream when the a connection is avalailable. If the connection failed, null is returned. + * + */ + public void connect() { + + if (s == null) { + try { + s = new Socket(Config.getHost(), Config.getPort()) { + public void close() throws IOException { + logger.log(Level.SEVERE, "Closing " + this); + super.close(); + s = null; + } + }; + s.getOutputStream().write( + ("user " + Config.getCall() + " pass " + Config.getPass() + " vers josastaprssrvr 0.1\r\n") + .getBytes()); + s.getOutputStream().write( + ("# filter " + Config.getFilter() + "\r\n").getBytes()); + s.getOutputStream().flush(); + + } catch (UnknownHostException ex) { + + logger.severe(ex.getMessage()); + + } catch (IOException ex) { + logger.severe(ex.getMessage()); + } + } + + } + + public InputStream getInputStream() { + if (s != null) { + try { + return s.getInputStream(); + } catch (IOException ex) { + logger.log(Level.SEVERE, "input Stream " + this + ex.getMessage()); + } + } + + return null; + } + + + /** + * close the connection. + */ + public void close() { + try { + s.close(); + } catch (IOException ex) { + logger.log(Level.SEVERE, "close " + this + ex.getMessage()); + } + } + + +} diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/ICompute.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/ICompute.java new file mode 100644 index 00000000..b9300277 --- /dev/null +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/ICompute.java @@ -0,0 +1,17 @@ +package org.avmdti.josast.aprsis; + +/** + * + * Interface for the thread used in AThreadInputStream + * @author XTOPHE + * + */ +public interface ICompute { + /** + * This method is call each time a set of data is received + *
at the end of the treatement, the return value indicate if we wait a new set of data. + * + * @return boolean true continue, false stop the thread + */ + boolean execute(); +} diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java new file mode 100644 index 00000000..99f359cb --- /dev/null +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java @@ -0,0 +1,69 @@ + + +package org.avmdti.josast.aprsis.demo; + +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.logging.Logger; + +import org.avmdti.josast.aprsis.AThreadInputStream; +import org.avmdti.josast.aprsis.AprsIsConfiguration; +import org.avmdti.josast.aprsis.Client; + +/** + * Simple demo to show how to use the APRS-IS module + *
this example : + *
create a link to the APRS-IS server + *
Display the data received + * + * + * + * @author XTOPHE + */ +public class DemoAPRSIS { + + + + /** + * Creates a new instance of Main * + */ + public DemoAPRSIS() { + } + + /** + * @param args the command line arguments + */ + static public void main(String[] args) { + + Logger logger = Logger.getLogger("AmsatLogger"); + /* set the configuration */ +// AprsIsConfiguration config = new AprsIsConfiguration("F6ZZZ","PASS","b/W3ADO*/PCSAT/ANDE-1/ANDE-2/RAFT/POLLUX-1/KD4HBO-1/NMARS/PCSAT* p/PCSAT2/POLLUX-1/PC2PSK/PC2TLM/PC2XXA/ISSTLM/PC2ISS/PC2RPT/PC2XXB/PCSAT*/ANDE-1/ANDE-2/RAFT/NMARS/W3ADO* d/PCSAT2/PC2PSK/KD4HBO-1/PC2TLM/PC2XXA/ISSTLM/PC2ISS/PC2RPT/PC2XXB/PCSAT*/ANDE-1/ANDE-2/RAFT/NMARS/W3ADO*","rotate.aprs.net",14580); + + AprsIsConfiguration config = new AprsIsConfiguration("TEST-1","PASS","p/PCSAT*/RS0ISS-4/ARISS b/PCSAT*/RS0ISS-4/ARISS d/PCSAT*/RS0ISS-4/ARISS","euro.aprs2.net",14580); + + + /* create the client */ + Client c = new Client (config); + c.connect(); + + PrintWriter fos = null; + try { + fos = new PrintWriter( new FileWriter("output1.txt")); + } catch (IOException e1) { + logger.severe(e1.getMessage()); + } + + DemoTreatment log = new DemoTreatment(c.getInputStream(),fos); + AThreadInputStream thread = new AThreadInputStream(log); + thread.start(); + try { + thread.join(); + } catch (InterruptedException e) { + logger.severe(e.getMessage()); + } + c.close(); + fos.close(); + } + +} diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java new file mode 100644 index 00000000..67240945 --- /dev/null +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java @@ -0,0 +1,50 @@ +package org.avmdti.josast.aprsis.demo; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.util.GregorianCalendar; +import java.util.logging.Logger; + +import org.avmdti.josast.aprsis.ICompute; + + + +//import org.avmdti.josast.aprsis.persistence.Persistence; + +public class DemoTreatment implements ICompute{ + Logger logger = Logger.getLogger("AmsatLogger"); + InputStream input = null; + PrintWriter output = null; + GregorianCalendar date; + + + // TlmDecoder td = new TlmDecoder(); + public DemoTreatment(InputStream input, PrintWriter fos) { + super(); + + this.input = input; + this.output = fos; + } + + + + public boolean execute() { + byte bytes[] = null; + int nbBytes =0; + try { + date = new GregorianCalendar(); + bytes= new byte[1000]; + nbBytes= input.read(bytes); + System.out.print("."+nbBytes+"."); + String buff = new String(bytes).trim(); + System.out.print(buff+"\n"); + + + } catch (IOException e) { + logger.severe(e.getMessage()); + } + return true; + } + +} diff --git a/ModuleAPRSIS/src/site/apt/summary.apt b/ModuleAPRSIS/src/site/apt/summary.apt new file mode 100644 index 00000000..5cf7d9ce --- /dev/null +++ b/ModuleAPRSIS/src/site/apt/summary.apt @@ -0,0 +1,3 @@ + This application demonstrates Maven 2 site generation functionalities. One of the nicer features of Maven is the ability to create an internal technical web site + at very little cost. Maven 2 extends this functionality, and gives you powerful new ways + to generate site content... \ No newline at end of file diff --git a/ModuleAPRSIS/src/site/fml/faqs.fml b/ModuleAPRSIS/src/site/fml/faqs.fml new file mode 100644 index 00000000..f9a24eba --- /dev/null +++ b/ModuleAPRSIS/src/site/fml/faqs.fml @@ -0,0 +1,22 @@ + + + + + + + What is APRS + +

+ APRS is a protocol used by Ham-radio. This protocol has been defined by B. Bruninga. +

+
+ What is APRS-IS + +

+ APSR-IS is a APRS frame server. The ham-radio user collect APRS data and sent them throught APRS-IS on internet. +

+
+
+ +
+
\ No newline at end of file diff --git a/ModuleAPRSIS/src/site/site.xml b/ModuleAPRSIS/src/site/site.xml new file mode 100644 index 00000000..07502015 --- /dev/null +++ b/ModuleAPRSIS/src/site/site.xml @@ -0,0 +1,29 @@ + + + + Module APRS-IS + http://maven.apache.org/images/apache-maven-project.png + http://http://josast.free.fr/ + + + http://maven.apache.org/images/maven-small.gif + + + + + + + + + + + + + + + + ${reports} + + + + \ No newline at end of file diff --git a/ModuleAPRSIS/src/test/java/org/avmdti/josast/AThreadInputStreamTest.java b/ModuleAPRSIS/src/test/java/org/avmdti/josast/AThreadInputStreamTest.java new file mode 100644 index 00000000..6aa069ea --- /dev/null +++ b/ModuleAPRSIS/src/test/java/org/avmdti/josast/AThreadInputStreamTest.java @@ -0,0 +1,22 @@ +package org.avmdti.josast; + +import junit.framework.TestCase; + +public class AThreadInputStreamTest extends TestCase { + + /* + * Test method for 'org.avmdti.josast.aprsis.AThreadInputStream.run()' + */ + public void testRun() { + + + } + + /* + * Test method for 'org.avmdti.josast.aprsis.AThreadInputStream.AThreadInputStream(ICompute)' + */ + public void testAThreadInputStream() { + + } + +} diff --git a/ModuleAPRSIS/src/test/java/org/avmdti/josast/ClientTest.java b/ModuleAPRSIS/src/test/java/org/avmdti/josast/ClientTest.java new file mode 100644 index 00000000..fb4026ab --- /dev/null +++ b/ModuleAPRSIS/src/test/java/org/avmdti/josast/ClientTest.java @@ -0,0 +1,73 @@ +package org.avmdti.josast; + +import java.io.InputStream; + +import org.avmdti.josast.aprsis.Client; + + +import junit.framework.Assert; +import junit.framework.TestCase; +import org.avmdti.josast.aprsis.AprsIsConfiguration; + +public class ClientTest extends TestCase { + + /* set the configuration */ + AprsIsConfiguration config = new AprsIsConfiguration("F6ZZZ","PASS","b/W3ADO*/PCSAT/ANDE-1/ANDE-2/RAFT/POLLUX-1/KD4HBO-1/NMARS/PCSAT* p/PCSAT2/POLLUX-1/PC2PSK/PC2TLM/PC2XXA/ISSTLM/PC2ISS/PC2RPT/PC2XXB/PCSAT*/ANDE-1/ANDE-2/RAFT/NMARS/W3ADO* d/PCSAT2/PC2PSK/KD4HBO-1/PC2TLM/PC2XXA/ISSTLM/PC2ISS/PC2RPT/PC2XXB/PCSAT*/ANDE-1/ANDE-2/RAFT/NMARS/W3ADO*","rotate.aprs.net",14580); + /* create the client */ + Client client = new Client (config); + + + public ClientTest(String arg0) { + super(arg0); + } + + protected void setUp() throws Exception { + super.setUp(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + /* + * Test method for 'org.avmdti.josast.aprsis.Client.Client(String, int, String, String, String)' + */ + public final void testClientStringIntStringStringString() { + // TODO Auto-generated method stub + + } + + /* + * Test method for 'org.avmdti.josast.aprsis.Client.connect()' + */ + public final void testConnect() { +// client.setHost("localhost"); +// client.connect(); +// InputStream in = client.getInputStream(); +// Assert.assertNotNull(in); +// client.close(); +// + + } + + /* + * Test method for 'org.avmdti.josast.aprsis.Client.getInputStream()' + */ + public final void testGetInputStream() { + InputStream in = client.getInputStream(); + Assert.assertEquals(in,null); + } + + /* + * Test method for 'org.avmdti.josast.aprsis.Client.close()' + */ + public final void testClose() { + // TODO Auto-generated method stub + + } + + + + + +} diff --git a/ModuleAPRSIS/src/test/java/org/avmdti/josast/SeveurDetest.java b/ModuleAPRSIS/src/test/java/org/avmdti/josast/SeveurDetest.java new file mode 100644 index 00000000..d18a0c62 --- /dev/null +++ b/ModuleAPRSIS/src/test/java/org/avmdti/josast/SeveurDetest.java @@ -0,0 +1,47 @@ +package org.avmdti.josast; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; + +/** + * Socket server for unit test. + * Simple ECHO server. + * + * @author cmercier + * + */ +public class SeveurDetest { + static final int port = 8080; + + public static void main(String[] args) throws Exception { + ServerSocket s = new ServerSocket(port); + Socket soc = s.accept(); + + // Un BufferedReader permet de lire par ligne. + BufferedReader plec = new BufferedReader( + new InputStreamReader(soc.getInputStream()) + ); + + // Un PrintWriter possède toutes les opérations print classiques. + // En mode auto-flush, le tampon est vidé (flush) à l'appel de println. + PrintWriter pred = new PrintWriter( + new BufferedWriter( + new OutputStreamWriter(soc.getOutputStream())), + true); + + while (true) { + String str = plec.readLine(); // lecture du message + if (str.equals("END")) break; + System.out.println("ECHO = " + str); // trace locale + pred.println(str); // renvoi d'un écho + } + plec.close(); + pred.close(); + soc.close(); + } + } diff --git a/ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java b/ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java new file mode 100644 index 00000000..ce138b0f --- /dev/null +++ b/ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java @@ -0,0 +1,51 @@ +package org.avmdti.josast.aprsis; + +import junit.framework.Assert; +import junit.framework.TestCase; + +public class AprsIsConfigurationTest extends TestCase { + + public void testSetCall() { + AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); + classUnderTest.setCall("test"); + Assert.assertEquals("test", classUnderTest.getCall()); + } + + public void testSetPass() { + AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); + classUnderTest.setPass("test"); + Assert.assertEquals("test", classUnderTest.getPass()); + } + + public void testSetFilter() { + AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); + classUnderTest.setFilter("test"); + Assert.assertEquals("test", classUnderTest.getFilter()); + } + + public void testSetHost() { + AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); + Assert.assertEquals("first.aprs.net", classUnderTest.getHost()); + classUnderTest.setHost("test"); + Assert.assertEquals("test", classUnderTest.getHost()); + } + + public void testSetPort() { + AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); + Assert.assertEquals(14580, classUnderTest.getPort()); + classUnderTest.setPort(10); + Assert.assertEquals(10, classUnderTest.getPort()); + } + + public void testAprsIsConfiguration() { + AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); + Assert.assertEquals(14580, classUnderTest.getPort()); + Assert.assertEquals("first.aprs.net", classUnderTest.getHost()); + Assert.assertEquals(null, classUnderTest.getFilter()); + Assert.assertEquals(null, classUnderTest.getPass()); + Assert.assertEquals(null, classUnderTest.getCall()); + + + } + +} -- GitLab From aa520147b989d802d168ae8885855bb83d768d34 Mon Sep 17 00:00:00 2001 From: xtophe Date: Sat, 22 Jan 2022 22:24:26 +0100 Subject: [PATCH 2/3] refactor : clean unused variable --- .../java/org/avmdti/josast/aprsis/Client.java | 164 +++++++++--------- .../avmdti/josast/aprsis/demo/DemoAPRSIS.java | 87 +++++----- .../josast/aprsis/demo/DemoTreatment.java | 66 ++++--- .../aprsis/AprsIsConfigurationTest.java | 4 +- 4 files changed, 151 insertions(+), 170 deletions(-) diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java index 634aa526..eeecb73d 100644 --- a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java @@ -14,92 +14,90 @@ import java.net.UnknownHostException; import java.util.logging.Level; import java.util.logging.Logger; -/** - * Client used to perform the connection to the APRS-IS Serveur; - * - * @author XTOPHE +/** + * Client used to perform the connection to the APRS-IS Serveur; + * + * @author XTOPHE */ public class Client { - - private static Logger logger = Logger.getLogger("AmsatLogger"); - private Socket s = null; - - private AprsIsConfiguration Config; - - - - - - /** - * - * create a "client" to connect to an APRS-IS Server - * @param config - * - */ - public Client(AprsIsConfiguration config) { - Config = config; - } - - /** - * - * return an inputStream from the current connection - * - * @return InputStream when the a connection is avalailable. If the connection failed, null is returned. - * - */ - public void connect() { - - if (s == null) { - try { - s = new Socket(Config.getHost(), Config.getPort()) { - public void close() throws IOException { - logger.log(Level.SEVERE, "Closing " + this); - super.close(); - s = null; - } - }; - s.getOutputStream().write( - ("user " + Config.getCall() + " pass " + Config.getPass() + " vers josastaprssrvr 0.1\r\n") - .getBytes()); - s.getOutputStream().write( - ("# filter " + Config.getFilter() + "\r\n").getBytes()); - s.getOutputStream().flush(); - - } catch (UnknownHostException ex) { - - logger.severe(ex.getMessage()); - - } catch (IOException ex) { - logger.severe(ex.getMessage()); - } - } - - } - - public InputStream getInputStream() { - if (s != null) { - try { - return s.getInputStream(); - } catch (IOException ex) { - logger.log(Level.SEVERE, "input Stream " + this + ex.getMessage()); - } - } - - return null; - } - - - /** - * close the connection. - */ - public void close() { - try { - s.close(); - } catch (IOException ex) { - logger.log(Level.SEVERE, "close " + this + ex.getMessage()); - } - } + private static Logger logger = Logger.getLogger("AmsatLogger"); + private Socket s = null; + + private AprsIsConfiguration Config; + + /** + * + * create a "client" to connect to an APRS-IS Server + * + * @param config + * + */ + public Client(AprsIsConfiguration config) { + Config = config; + } + + /** + * + * return an inputStream from the current connection + * + * @return InputStream when the a connection is avalailable. If the + * connection failed, null is returned. + * + */ + public void connect() { + + if (s == null) { + try { + s = new Socket(Config.getHost(), Config.getPort()) { + public void close() throws IOException { + logger.log(Level.SEVERE, "Closing " + this); + super.close(); + s = null; + } + }; + s.getOutputStream() + .write(("user " + Config.getCall() + " pass " + + Config.getPass() + + " vers josastaprssrvr 0.1\r\n").getBytes()); + s.getOutputStream().write( + ("# filter " + Config.getFilter() + "\r\n").getBytes()); + s.getOutputStream().flush(); + + } catch (UnknownHostException ex) { + + logger.severe(ex.getMessage()); + + } catch (IOException ex) { + logger.severe(ex.getMessage()); + } + } + + } + + public InputStream getInputStream() { + if (s != null) { + try { + return s.getInputStream(); + } catch (IOException ex) { + logger.log(Level.SEVERE, + "input Stream " + this + ex.getMessage()); + } + } + + return null; + } + + /** + * close the connection. + */ + public void close() { + try { + s.close(); + } catch (IOException ex) { + logger.log(Level.SEVERE, "close " + this + ex.getMessage()); + } + } } diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java index 99f359cb..ddb5b13d 100644 --- a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoAPRSIS.java @@ -1,69 +1,60 @@ - package org.avmdti.josast.aprsis.demo; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; + import java.util.logging.Logger; import org.avmdti.josast.aprsis.AThreadInputStream; import org.avmdti.josast.aprsis.AprsIsConfiguration; import org.avmdti.josast.aprsis.Client; -/** - * Simple demo to show how to use the APRS-IS module - *
this example : - *
create a link to the APRS-IS server - *
Display the data received - * - * - * - * @author XTOPHE +/** + * Simple demo to show how to use the APRS-IS module
+ * this example :
+ * create a link to the APRS-IS server
+ * Display the data received + * + * + * + * @author XTOPHE */ public class DemoAPRSIS { - - - /** - * Creates a new instance of Main * - */ - public DemoAPRSIS() { + /** + * Creates a new instance of Main * + */ + public DemoAPRSIS() { } - - /** - * @param args the command line arguments - */ - static public void main(String[] args) { - - Logger logger = Logger.getLogger("AmsatLogger"); - /* set the configuration */ + + /** + * @param args the command line arguments + */ + static public void main(String[] args) { + + Logger logger = Logger.getLogger("AmsatLogger"); + /* set the configuration */ // AprsIsConfiguration config = new AprsIsConfiguration("F6ZZZ","PASS","b/W3ADO*/PCSAT/ANDE-1/ANDE-2/RAFT/POLLUX-1/KD4HBO-1/NMARS/PCSAT* p/PCSAT2/POLLUX-1/PC2PSK/PC2TLM/PC2XXA/ISSTLM/PC2ISS/PC2RPT/PC2XXB/PCSAT*/ANDE-1/ANDE-2/RAFT/NMARS/W3ADO* d/PCSAT2/PC2PSK/KD4HBO-1/PC2TLM/PC2XXA/ISSTLM/PC2ISS/PC2RPT/PC2XXB/PCSAT*/ANDE-1/ANDE-2/RAFT/NMARS/W3ADO*","rotate.aprs.net",14580); - AprsIsConfiguration config = new AprsIsConfiguration("TEST-1","PASS","p/PCSAT*/RS0ISS-4/ARISS b/PCSAT*/RS0ISS-4/ARISS d/PCSAT*/RS0ISS-4/ARISS","euro.aprs2.net",14580); + AprsIsConfiguration config = new AprsIsConfiguration("TEST-1", "PASS", + "p/PCSAT*/RS0ISS-4/ARISS b/PCSAT*/RS0ISS-4/ARISS d/PCSAT*/RS0ISS-4/ARISS", + "euro.aprs2.net", 14580); - - /* create the client */ - Client c = new Client (config); - c.connect(); - - PrintWriter fos = null; - try { - fos = new PrintWriter( new FileWriter("output1.txt")); - } catch (IOException e1) { - logger.severe(e1.getMessage()); - } - - DemoTreatment log = new DemoTreatment(c.getInputStream(),fos); + /* create the client */ + Client c = new Client(config); + c.connect(); + + + + DemoTreatment log = new DemoTreatment(c.getInputStream()); AThreadInputStream thread = new AThreadInputStream(log); thread.start(); try { - thread.join(); - } catch (InterruptedException e) { - logger.severe(e.getMessage()); - } - c.close(); - fos.close(); + thread.join(); + } catch (InterruptedException e) { + logger.severe(e.getMessage()); + } + c.close(); + } - + } diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java index 67240945..08ad46b3 100644 --- a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java +++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java @@ -2,49 +2,41 @@ package org.avmdti.josast.aprsis.demo; import java.io.IOException; import java.io.InputStream; -import java.io.PrintWriter; -import java.util.GregorianCalendar; -import java.util.logging.Logger; -import org.avmdti.josast.aprsis.ICompute; +import java.util.logging.Logger; +import org.avmdti.josast.aprsis.ICompute; //import org.avmdti.josast.aprsis.persistence.Persistence; -public class DemoTreatment implements ICompute{ +public class DemoTreatment implements ICompute { Logger logger = Logger.getLogger("AmsatLogger"); - InputStream input = null; - PrintWriter output = null; - GregorianCalendar date; - - - // TlmDecoder td = new TlmDecoder(); - public DemoTreatment(InputStream input, PrintWriter fos) { - super(); - - this.input = input; - this.output = fos; - } - - - - public boolean execute() { - byte bytes[] = null; - int nbBytes =0; - try { - date = new GregorianCalendar(); - bytes= new byte[1000]; - nbBytes= input.read(bytes); - System.out.print("."+nbBytes+"."); - String buff = new String(bytes).trim(); - System.out.print(buff+"\n"); - - - } catch (IOException e) { - logger.severe(e.getMessage()); - } - return true; - } + InputStream input = null; + + // TlmDecoder td = new TlmDecoder(); + public DemoTreatment(InputStream input) { + super(); + + this.input = input; + + } + + public boolean execute() { + byte bytes[] = null; + int nbBytes = 0; + try { + + bytes = new byte[1000]; + nbBytes = input.read(bytes); + System.out.print("." + nbBytes + "."); + String buff = new String(bytes).trim(); + System.out.print(buff + "\n"); + + } catch (IOException e) { + logger.severe(e.getMessage()); + } + return true; + } } diff --git a/ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java b/ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java index ce138b0f..28a32012 100644 --- a/ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java +++ b/ModuleAPRSIS/src/test/java/org/avmdti/josast/aprsis/AprsIsConfigurationTest.java @@ -25,7 +25,7 @@ public class AprsIsConfigurationTest extends TestCase { public void testSetHost() { AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); - Assert.assertEquals("first.aprs.net", classUnderTest.getHost()); + Assert.assertEquals("rotate.aprs.net", classUnderTest.getHost()); classUnderTest.setHost("test"); Assert.assertEquals("test", classUnderTest.getHost()); } @@ -40,7 +40,7 @@ public class AprsIsConfigurationTest extends TestCase { public void testAprsIsConfiguration() { AprsIsConfiguration classUnderTest = new AprsIsConfiguration(); Assert.assertEquals(14580, classUnderTest.getPort()); - Assert.assertEquals("first.aprs.net", classUnderTest.getHost()); + Assert.assertEquals("rotate.aprs.net", classUnderTest.getHost()); Assert.assertEquals(null, classUnderTest.getFilter()); Assert.assertEquals(null, classUnderTest.getPass()); Assert.assertEquals(null, classUnderTest.getCall()); -- GitLab From 036d6028e44e739277c4b3ca414aa29db6ac3c5b Mon Sep 17 00:00:00 2001 From: xtophe Date: Sat, 22 Jan 2022 22:29:59 +0100 Subject: [PATCH 3/3] minot - pom update --- ModuleAPRSIS/pom.xml | 2 +- pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ModuleAPRSIS/pom.xml b/ModuleAPRSIS/pom.xml index 5b0a8956..a21e3fba 100644 --- a/ModuleAPRSIS/pom.xml +++ b/ModuleAPRSIS/pom.xml @@ -11,7 +11,7 @@ 4.0.0 - aprsIs + ModuleAPRSIS jar 1.0-SNAPSHOT Module APRSIS diff --git a/pom.xml b/pom.xml index 7be68d20..2f4953b0 100644 --- a/pom.xml +++ b/pom.xml @@ -725,6 +725,7 @@ ModuleSoundModem ModuleSIDS ModuleEquationKepler + ModuleAPRSIS ModuleJourJulien ModuleCubesatSim -- GitLab