Files
ProtegeToAASMini/src/AASMini/AASMini.java
2024-12-14 15:23:54 +07:00

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());
}
}
}
}
*/
}