148 lines
4.6 KiB
Java
148 lines
4.6 KiB
Java
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());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
}
|