package AASMini; import org.pmw.tinylog.Logger; import java.net.InetAddress; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Arrays; @SuppressWarnings({"FieldCanBeLocal", "UnusedReturnValue"}) public class AASMini { private final String targetIP; private final int targetPort; private final int msgId = 1; private final String zones = "Zone_1,Zone_2,Zone_3,Zone_4"; private Socket socket; /** * Create a new AAS Mini object * @param ip IP Address of the AAS Mini * @param port Port of the AAS Mini */ public AASMini(String ip , int port){ this.targetIP = ip; this.targetPort = port; } /** * Check if the AAS Mini is connected * @return true if connected, false otherwise */ public boolean IsConnected(){ return socket != null && socket.isConnected(); } /** * Connect to AAS Mini * @return true if connected, false otherwise */ public boolean Connect(){ try{ if (InetAddress.getByName(targetIP).isReachable(2000)){ if (targetPort > 0 && targetPort < 65535){ Socket sock = new Socket(targetIP, targetPort); if (sock.isConnected()){ Logger.info("Connected to {}:{{}", targetIP, targetPort); socket = sock; return true; } } else Logger.error("Invalid port number {}", targetPort); } else Logger.error("Failed to reach {}", targetIP); } catch (Exception e){ Logger.error("Failed to connect to {}:{}, Error : {}", targetIP, targetPort, e.getMessage()); } return false; } /** * Disconnect from AAS Mini */ public void Disconnect(){ try{ if (socket != null && socket.isConnected()){ socket.close(); Logger.info("Disconnected from {}:{}", targetIP, targetPort); } } catch (Exception e){ Logger.error("Failed to disconnect from {}:{}, Error : {}", targetIP, targetPort, e.getMessage()); } socket = null; } private String ConvertToString(byte[] data){ StringBuilder sb = new StringBuilder(); for (byte b : data){ if (b>0x1F && b<0x7F) sb.append((char)b); else break; } return sb.toString(); } public void SendPlatNoToAAS(String platNo){ String protocol = "BROADCAST;"+msgId+";IND;$PLATNOMOR$="+platNo+";"+zones; byte[] data = protocol.getBytes(); byte[] rplyData = SendAndReceive(data); if (rplyData!=null && rplyData.length>0){ String rplyInStr = ConvertToString(rplyData); Logger.info("Response from AAS : {}", rplyInStr); String[] rply = rplyInStr.split(";"); if (rply.length ==2){ if (rply[0].equals("BROADCAST")){ if (rply[1].equals("OK")){ Logger.info("Success sending data to AAS!"); }else Logger.info("Failed sending data to AAS!"); }else Logger.info("Wrong format answer!"); }else Logger.info("Wrong size answer"); } else Logger.info("SendAndReceive return null"); } /** * Send data to AAS Mini and receive response * @param data Data to be sent * @return byte array of response or null if failed */ private byte[] SendAndReceive(byte[] data){ if (IsConnected()){ if (data!=null && data.length>0){ try{ socket.getOutputStream().write(data); byte[] buffer = new byte[1024]; int read = socket.getInputStream().read(buffer); if (read>0){ return buffer; } } catch (Exception e){ Logger.error("Failed to send data to {}:{}, Error : {}", targetIP, targetPort, e.getMessage()); } } } return null; } /* * Send data to AAS Mini * @param data Data to be sent private void SendData(byte[] data){ if (IsConnected()){ if (data!=null && data.length>0){ try{ socket.getOutputStream().write(data); } catch (Exception e){ Logger.error("Failed to send data to {}:{}, Error : {}", targetIP, targetPort, e.getMessage()); } } } } */ }