summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/replica3/QUEServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/derms/replica3/QUEServer.java')
-rw-r--r--src/main/java/derms/replica3/QUEServer.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/main/java/derms/replica3/QUEServer.java b/src/main/java/derms/replica3/QUEServer.java
new file mode 100644
index 0000000..c03d329
--- /dev/null
+++ b/src/main/java/derms/replica3/QUEServer.java
@@ -0,0 +1,111 @@
+package derms.replica3;
+
+//import logger.Logger;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.SocketException;
+import java.nio.charset.StandardCharsets;
+
+import javax.xml.ws.Endpoint;
+//
+//import constants.Constants;
+//import constants.PortConstants;
+public class QUEServer {
+ public static void main(String[] args) {
+
+ try{
+ final Logger activityLogger = new Logger("QUEServer.log");
+ int udpPort = PortConstants.getUdpPort("QUE");
+ City ct = new City("QUE");
+ /* Create servant and register it with the ORB */
+ final Replica3 ServerImpl = new Replica3(ct, null);
+// Endpoint endpoint = Endpoint.publish(Constants.QUEBEC_ADDRESS, ServerImpl);
+
+ /*Start UDP server for QUE*/
+ new Thread(() -> {
+ startUdpServer(activityLogger, ServerImpl, udpPort);
+ }).start();
+
+ System.out.println("#=== QUE Server is started ===#");
+
+ } catch (Exception e) {
+ System.err.println("ERROR: " + e);
+ e.printStackTrace(System.out);
+ }
+ }
+
+ private static void startUdpServer(final Logger activityLogger, final Replica3 server, int udpPort) {
+ DatagramSocket socket = null;
+ try {
+ socket = new DatagramSocket(udpPort);
+ while (true) {
+ try {
+ final byte[] data = new byte[1000];
+ final DatagramPacket packet = new DatagramPacket(data, data.length);
+ socket.receive(packet);
+ System.out.println("request received" + udpPort);
+
+ new Thread(() -> {
+ processRequest(activityLogger, server, packet);
+ }).start();
+ } catch (IOException e) {
+ activityLogger.log("", "EXCEPTION", e.getMessage());
+ }
+ }
+ } catch (SocketException e1) {
+ activityLogger.log("", "EXCEPTION", e1.getMessage());
+ } finally {
+ if (socket != null) {
+ socket.close();
+ }
+ }
+ }
+
+ private static void processRequest(final Logger activityLogger, final Replica3 server, final DatagramPacket packet) {
+ byte[] response;
+ DatagramSocket socket = null;
+ final String request = new String(packet.getData(), StandardCharsets.UTF_8).trim();
+ final String[] packetData = request.split("-");
+ final String sourceServer = packetData[0].trim();
+ final String action = packetData[1].trim();
+ final String resourceName = packetData[2].trim();
+ String resourceID = "";
+ int duration = 0;
+
+ if(packetData.length == 4) {
+ resourceID = packetData[2].trim();
+ duration = Integer.parseInt(packetData[3]);
+ }
+
+ try {
+ socket = new DatagramSocket();
+
+ if("GET_AVAILABLE_RESOURCES".equalsIgnoreCase(action)) {
+ response = sanitizeXml(server.getAvailableResources(resourceName).toString()).getBytes(StandardCharsets.UTF_8);
+ socket.send(new DatagramPacket(response, response.length, packet.getAddress(), packet.getPort()));
+ }else if("GET_RESOURCE".equalsIgnoreCase(action)) {
+ response = server.getRequestedResource(resourceID, duration).toString().getBytes();
+ socket.send(new DatagramPacket(response, response.length, packet.getAddress(), packet.getPort()));
+ }
+
+ activityLogger.log("", action, "Response sent");
+ } catch (IOException e) {
+ activityLogger.log("", "EXCEPTION", e.getMessage());
+ } finally {
+ if (socket != null) {
+ socket.close();
+ }
+ }
+ }
+
+ private static String sanitizeXml(String input) {
+ if (input == null) {
+ return ""; // or handle as needed
+ }
+
+ return input.replaceAll("[\\x00]", "");
+ }
+
+}