pakai TCP Server listening
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import ProtegeData.EventData;
|
||||
import ProtegeData.TableID;
|
||||
import ProtegeData.User;
|
||||
import jakarta.xml.bind.JAXBContext;
|
||||
@@ -9,7 +10,11 @@ import org.tempuri.IService1;
|
||||
import org.tempuri.Service1;
|
||||
import jakarta.xml.ws.Holder;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.StringReader;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
@@ -24,6 +29,7 @@ public class Main {
|
||||
static Holder<String> ErrorMsg = new Holder<>();
|
||||
static Holder<Boolean> Success = new Holder<>();
|
||||
static IService1 basichttp;
|
||||
static boolean isRunning = true;
|
||||
public static void main(String[] args) {
|
||||
|
||||
Logger.info("ProtegeGX Java 17 Project");
|
||||
@@ -35,14 +41,97 @@ public class Main {
|
||||
logon.setUserName(factory.createLogonUserName("admin"));
|
||||
logon.setPassword(factory.createLogonPassword(""));
|
||||
|
||||
GetVersion();
|
||||
GetUsers(4,3,4);
|
||||
//GetVersion();
|
||||
//GetUsers(4,3,4);
|
||||
|
||||
// LocalDate today = LocalDate.now();
|
||||
// LocalDateTime startofDay = today.atStartOfDay();
|
||||
// LocalDateTime endofDay = today.atTime(23,59,59);
|
||||
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
44
src/ProtegeData/EventData.java
Normal file
44
src/ProtegeData/EventData.java
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user