ServerManagement: add support for sending UDP Control messages to servers
authorTJ <hacker@iam.tj>
Sun, 3 May 2015 10:50:14 +0000 (11:50 +0100)
committerTJ <hacker@iam.tj>
Sun, 3 May 2015 10:52:26 +0000 (11:52 +0100)
src/uk/ac/ntu/n0521366/wsyd/management/ServerManagement.java

index ada15f6..80cdee1 100644 (file)
@@ -32,6 +32,9 @@ import java.net.URI;
 import java.io.IOException;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetSocketAddress;
 import javax.swing.Timer;
 import javax.swing.table.DefaultTableModel;
 import java.net.UnknownHostException;
@@ -46,6 +49,7 @@ import java.util.ArrayList;
 import uk.ac.ntu.n0521366.wsyd.libs.logging.TableModelHandler;
 import uk.ac.ntu.n0521366.wsyd.libs.message.MessageLogRecord;
 import uk.ac.ntu.n0521366.wsyd.libs.message.MessagePresence;
+import uk.ac.ntu.n0521366.wsyd.libs.message.MessageServerControl;
 import uk.ac.ntu.n0521366.wsyd.libs.net.WSYD_SocketAddress.Protocol;
 import uk.ac.ntu.n0521366.wsyd.libs.net.*;
 
@@ -64,6 +68,11 @@ public class ServerManagement extends javax.swing.JFrame implements NetworkMessa
      */
     private static final String resourcePath = "/uk/ac/ntu/n0521366/wsyd/resources";
 
+    /**
+     * Readable/displayable name of this application
+     */
+    String _title;
+
     /**
      * The UDP listener address for incoming log messages
      */
@@ -107,6 +116,7 @@ public class ServerManagement extends javax.swing.JFrame implements NetworkMessa
      * @see #initListeners()
      */
     public ServerManagement() {
+        _title = "ServerManagement";
         LOGGER.setLevel(Level.ALL);
         initComponents();
         _doLogging = true;
@@ -217,6 +227,35 @@ public class ServerManagement extends javax.swing.JFrame implements NetworkMessa
         return _doLogging;
     }
 
+    protected boolean UDPSend(NetworkMessage message) {
+        boolean result = false;
+
+        if (message != null) {
+            InetSocketAddress address = this._multicastServer.getTargetAddress(message.getTarget());
+            if (address != null) {
+                message.setSender("ServerManagement");
+                try {
+                    byte[] dataSend = NetworkMessage.serialize(message);
+                    DatagramPacket packetSend = new DatagramPacket(dataSend, dataSend.length);
+                    // set target's remote host address and port
+                    packetSend.setAddress(address.getAddress());
+                    packetSend.setPort(address.getPort());
+
+                    DatagramSocket socket = new DatagramSocket();
+                    // acknowledge receipt
+                    socket.send(packetSend);
+                    System.err.println(MessageFormat.format("Sending packet for {0} to {1} ({3}:{4}) from {2}", message.getIntent(), message.getTarget(), message.getSender(), packetSend.getAddress().getHostAddress(), packetSend.getPort()));
+
+                    result = true; // successful
+                } catch (IOException e) {
+                    // TODO: serverSend() add IOException handler
+                    e.printStackTrace();
+                }
+            }
+        }
+        return result;
+    }
+
     /**
      * This method is called from within the constructor to initialize the form.
      * WARNING: Do NOT modify this code. The content of this method is always
@@ -430,7 +469,13 @@ public class ServerManagement extends javax.swing.JFrame implements NetworkMessa
 
     private void gMenuServerSocialRestartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_gMenuServerSocialRestartActionPerformed
         // TODO add your handling code here:
+        System.err.println("Requesting ServerSocial Restart");
+        MessageServerControl mc = new MessageServerControl(MessageServerControl.EXIT.NO , MessageServerControl.RESTART.YES);
+        NetworkMessage nm = NetworkMessage.createNetworkMessage("Control", "ServerSocial", mc);
+        nm.setSender("ServerLog");
+        UDPSend(nm);
 
+                
     }//GEN-LAST:event_gMenuServerSocialRestartActionPerformed
 
     /**