pakai TCP Server listening

This commit is contained in:
2024-12-13 14:37:42 +07:00
parent 90261e1b9c
commit 15114b1e52
2 changed files with 135 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
import ProtegeData.EventData;
import ProtegeData.TableID; import ProtegeData.TableID;
import ProtegeData.User; import ProtegeData.User;
import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.JAXBContext;
@@ -9,7 +10,11 @@ import org.tempuri.IService1;
import org.tempuri.Service1; import org.tempuri.Service1;
import jakarta.xml.ws.Holder; import jakarta.xml.ws.Holder;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader; import java.io.StringReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@@ -24,6 +29,7 @@ public class Main {
static Holder<String> ErrorMsg = new Holder<>(); static Holder<String> ErrorMsg = new Holder<>();
static Holder<Boolean> Success = new Holder<>(); static Holder<Boolean> Success = new Holder<>();
static IService1 basichttp; static IService1 basichttp;
static boolean isRunning = true;
public static void main(String[] args) { public static void main(String[] args) {
Logger.info("ProtegeGX Java 17 Project"); Logger.info("ProtegeGX Java 17 Project");
@@ -35,14 +41,97 @@ public class Main {
logon.setUserName(factory.createLogonUserName("admin")); logon.setUserName(factory.createLogonUserName("admin"));
logon.setPassword(factory.createLogonPassword("")); logon.setPassword(factory.createLogonPassword(""));
GetVersion(); //GetVersion();
GetUsers(4,3,4); //GetUsers(4,3,4);
// LocalDate today = LocalDate.now(); // LocalDate today = LocalDate.now();
// LocalDateTime startofDay = today.atStartOfDay(); // LocalDateTime startofDay = today.atStartOfDay();
// LocalDateTime endofDay = today.atTime(23,59,59); // LocalDateTime endofDay = today.atTime(23,59,59);
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
// RunReport(6,4,0,200, formatter.format(startofDay),formatter.format(endofDay)); // RunReport(6,4,0,200, formatter.format(startofDay),formatter.format(endofDay));
isRunning = true;
//new Thread(()-> CreateTCPServer(5000)).start();
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
Logger.info("Shutting down...");
isRunning = false;
}));
final String string = "PROTEGXEVENT,503,<Event>\n"
+ " <EventID>2892</EventID>\n"
+ " <EventType>799</EventType>\n"
+ " <Description>User Master User (0:2053917549) (UN3) Granted Entry To PINTU EXIT (DR4) Access Level ALL DOOR (AL) (AL1) Reading Mode Card Input</Description>\n"
+ " <Description2>Utilisateur Master User (0:2053917549) (UN3) Entrée accordée à PINTU EXIT (DR4) niveau d'accès ALL DOOR (AL) (AL1) Mode de lecture Entrée carte</Description2>\n"
+ " <FieldTime>13-12-2024 13:23:45</FieldTime>\n"
+ " <LoggedTime>13-12-2024 13:23:51</LoggedTime>\n"
+ "</Event>";
EventData event = EventData.Parse(string);
if (event!=null){
Logger.info("Event: \n{}", event.toString());
} else {
Logger.error("Invalid Event Data");
}
Logger.info("Press any key to exit...");
try{
System.in.read();
} catch (Exception e){
Logger.error("Error: {}", e.getMessage());
}
isRunning = false;
}
private static void CreateTCPServer(int port){
try{
ServerSocket server = new ServerSocket(port);
Logger.info("Server started at port: {}", port);
while (isRunning){
Logger.info("Waiting for connection...");
Socket client = server.accept();
new Thread(()->{
Logger.info("Client connected: {}", client.getInetAddress().getHostAddress());
try{
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
while(isRunning){
byte[] buffer = new byte[1024];
int bytesRead = in.read(buffer);
if (bytesRead == -1) break;
String message = new String(buffer, 0, bytesRead);
Logger.info("Message: {}", message);
EventData event = EventData.Parse(message);
if (event!=null){
Logger.info("Event: \n{}", event.toString());
}
}
} catch (Exception e){
Logger.error("Error: {}", e.getMessage());
}
try{
client.close();
Logger.info("Client disconnected");
} catch (Exception e){
Logger.error("Error: {}", e.getMessage());
}
}).start();
}
server.close();
Logger.info("Server closed");
} catch (Exception e){
Logger.error("Error: {}", e.getMessage());
}
} }
/** /**

View File

@@ -0,0 +1,44 @@
package ProtegeData;
import java.util.regex.Pattern;
public class EventData {
public String FirstName;
public String LastName;
public String CardNumber;
public int UserNode;
public String DoorName;
public int DoorNode;
public String FieldTime;
public String LoggedTime;
@Override
public String toString(){
return String.format("FirstName: %s\nLastName: %s\nCardNumber: %s\nUserNode: %d\nDoorName: %s\nDoorNode: %d\nFieldTime: %s\nLoggedTime: %s", FirstName, LastName, CardNumber, UserNode, DoorName, DoorNode, FieldTime, LoggedTime);
}
/**
* create EventData object from string data using Regex
* @param data string data
* @return EventData object if valid, or null if invalid
*/
public static EventData Parse(String data){
final String regex = "<Description>User (\\w*) (\\w*) \\(([:0-9]*)\\) \\(UN(\\d+)\\).*?To (.*?) \\(DR(\\d+)\\).*?</Description>.*?<FieldTime>(.*?)</FieldTime>.*?<LoggedTime>(.*?)</LoggedTime>";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
final java.util.regex.Matcher matcher = pattern.matcher(data);
if (matcher.find()){
EventData event = new EventData();
event.FirstName = matcher.group(1);
event.LastName = matcher.group(2);
event.CardNumber = matcher.group(3);
event.UserNode = Integer.parseInt(matcher.group(4));
event.DoorName = matcher.group(5);
event.DoorNode = Integer.parseInt(matcher.group(6));
event.FieldTime = matcher.group(7);
event.LoggedTime = matcher.group(8);
return event;
}
return null;
}
}