ServerSocial: refactor "Server" to "Service"
authorTJ <hacker@iam.tj>
Mon, 4 May 2015 15:35:52 +0000 (16:35 +0100)
committerTJ <hacker@iam.tj>
Mon, 4 May 2015 15:35:52 +0000 (16:35 +0100)
Refactor some variable names to better reflect their purpose, and
fix some indentation.

src/uk/ac/ntu/n0521366/wsyd/server/ServerSocial.java

index 0867364..673ef46 100644 (file)
@@ -47,6 +47,7 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.IOException;
 import java.io.FileNotFoundException;
+import java.net.InetSocketAddress;
 import java.net.SocketException;
 import java.util.Arrays;
 import java.util.logging.LogRecord;
@@ -62,6 +63,8 @@ import uk.ac.ntu.n0521366.wsyd.libs.net.NetworkServerUDPMulticast;
 import uk.ac.ntu.n0521366.wsyd.libs.net.WSYD_SocketAddress;
 import uk.ac.ntu.n0521366.wsyd.libs.net.NetworkMessageEventListener;
 import uk.ac.ntu.n0521366.wsyd.libs.net.NetworkServerUDP;
+import uk.ac.ntu.n0521366.wsyd.libs.net.ServiceAddressMap;
+import uk.ac.ntu.n0521366.wsyd.libs.net.ServiceAddressMap.LastSeenHost;
 
 /**
  * The main Social Network server.
@@ -85,6 +88,16 @@ public final class ServerSocial implements NetworkMessageEventListener {
      */
     static final String _testData = "WSYD_TestData.csv";
     
+    /**
+     * Readable/displayable name of this application
+     */
+    final String _title = "ServerSocial";
+
+    /**
+     * Network services to address map.
+     */
+    ServiceAddressMap _serviceToAddressMap;
+
     /**
      * Indicates to start() loop and main() methods to exit completely.
      */
@@ -123,13 +136,13 @@ public final class ServerSocial implements NetworkMessageEventListener {
     /**
      * 
      */
-    NetworkServerUDPMulticast _multicastServer;
+    NetworkServerUDPMulticast _multicastService;
     
-    Timer _multicastAnnounce;
+    Timer _servicesAnnounce;
     
-    WSYD_SocketAddress _udpServerSA;
+    WSYD_SocketAddress _udpControlServiceSA;
     
-    NetworkServerUDP _udpServer;
+    NetworkServerUDP _udpControlService;
    
 
     /**
@@ -139,6 +152,7 @@ public final class ServerSocial implements NetworkMessageEventListener {
         String[] className = this.getClass().getName().split("\\.");
         LOGGER = Logger.getLogger(className[className.length - 1]);
         LOGGER.setLevel(Level.ALL);
+        _serviceToAddressMap = new ServiceAddressMap(_title, LOGGER);
         readMembers(_membersFile);
         _membersOnline = new ArrayList<>();
     }
@@ -149,44 +163,60 @@ public final class ServerSocial implements NetworkMessageEventListener {
     ServerSocial InitListeners()
     {
         _multicastAdvertiserSA = new WSYD_SocketAddress(Network.MULTICAST_IP, Network.PORTS_MULTICAST_DISCOVERY, WSYD_SocketAddress.Protocol.UDP);
-        _multicastServer = new NetworkServerUDPMulticast(_multicastAdvertiserSA, "ServerSocial", LOGGER);
-        _multicastServer.addNetworkMessageEventListener(this, "Neighbour");
-        _multicastServer.execute();
+        _multicastService = new NetworkServerUDPMulticast(_multicastAdvertiserSA, _title + "MC", _serviceToAddressMap, LOGGER);
+        _multicastService.addNetworkMessageEventListener(this, "Neighbour");
+        _multicastService.execute();
+        _serviceToAddressMap.put("all", new LastSeenHost(new InetSocketAddress(Network.MULTICAST_IP, Network.PORTS_MULTICAST_DISCOVERY), LastSeenHost.STATE.STATIC));
         
-        _udpServerSA = new WSYD_SocketAddress(Network.IPv4_WILDCARD, Network.PORTS_CLIENT_CONTROL_FIRST, WSYD_SocketAddress.Protocol.UDP);
-        _udpServer = new NetworkServerUDP(_udpServerSA, "ServerSocial", LOGGER);
-        _udpServer.addNetworkMessageEventListener(this, "Control");
-        _udpServer.execute();
+        _udpControlServiceSA = new WSYD_SocketAddress(Network.IPv4_WILDCARD, Network.PORTS_EPHEMERAL, WSYD_SocketAddress.Protocol.UDP);
+        _udpControlService = new NetworkServerUDP(_udpControlServiceSA, _title + "Control", _serviceToAddressMap, LOGGER);
+        _udpControlService.addNetworkMessageEventListener(this, "Control");
+        _udpControlService.execute();
         
-        ActionListener multicastAnnounceActionListener = new ActionListener() {
+        ActionListener servicesAnnounceActionListener = new ActionListener() {
             /**
-             * Activated by timer events to send multi-cast neighbour announcements for the Log Service.
+             * Activated by timer events to send multi-cast neighbour announcements and other regular notifications.
              * @param e 
              */
             @Override
             public void actionPerformed(ActionEvent e) {
-                LOGGER.log(Level.INFO, "Neighbour advert");
 
-                // Announce the Social Server service
-                MessagePresence mp = new MessagePresence("ServerSocial", Network.PORTS_SERVER_SOCIAL);
+                // Announce the Social Server Neighbour service
+                MessagePresence mp = new MessagePresence(_title, _multicastService.getSocketAddress());
                 NetworkMessage nm = NetworkMessage.createNetworkMessage("Neighbour", "all", mp);
-                nm.setSender("ServerSocial");
-                _multicastServer.queueMessage(nm);
+                nm.setSender(_title + "MC");
+                _multicastService.queueMessage(nm);
+                LOGGER.log(Level.INFO, "Neighbour advert");
+
+                // Notify ServerManagement of the Social Server Control service
+                String target = "ServerManagementControl";
+                LastSeenHost targetHost = _serviceToAddressMap.get(target);
+                if (targetHost != null) {
+                    mp = new MessagePresence(_title + "Control", _udpControlService.getSocketAddress());
+                    nm = NetworkMessage.createNetworkMessage("Control", target, mp);
+                    nm.setSender(_title + "Control");
+                    try {
+                        _udpControlService.queueMessage(nm);
+                        LOGGER.log(Level.INFO, "Control notification sent to ServerManagement");
+                    } catch (IllegalArgumentException ex) {
+                        // Not fatal - ServerManagement may not be currently known
+                    }
+                }
                 
-                // clean up the known hosts map and keep Server menu up-to-date
-                ArrayList<String> servicesRemoved = _multicastServer.cleanServiceToHostMap(5000);
+                // clean up the known hosts map
+                ArrayList<String> servicesRemoved = _serviceToAddressMap.cleanServiceAddressMap(5000);
                 for (String service: servicesRemoved) {
-                        switch (service) {
-                                                          
-                        }
+                    // FIXME: does the process care if hosts have been removed? if not, remove this array iteration
+                    switch (service) {
+                    }
                 }
 
             }
         };
         
-        _multicastAnnounce = new Timer(1000, multicastAnnounceActionListener);
-        _multicastAnnounce.setInitialDelay(100);
-        _multicastAnnounce.start();
+        _servicesAnnounce = new Timer(1000, servicesAnnounceActionListener);
+        _servicesAnnounce.setInitialDelay(100);
+        _servicesAnnounce.start();
         
         return this;
     }
@@ -219,9 +249,9 @@ public final class ServerSocial implements NetworkMessageEventListener {
         {
             //TODO: Do something
         }*/
-        _multicastAnnounce.stop();
-        _multicastServer.cancel(true);
-        _udpServer.cancel(true);
+        _servicesAnnounce.stop();
+        _multicastService.cancel(true);
+        _udpControlService.cancel(true);
         
         result = writeMembers(_membersFile);
 
@@ -394,21 +424,22 @@ public final class ServerSocial implements NetworkMessageEventListener {
     @Override
     public void NetworkMessageReceived(NetworkMessageEvent event)
     {
-        System.err.println("Packet received.");
         //TODO: NetworkMessageReceived: Handle Messages
         NetworkMessage nm = event.getNetworkMessage();
         if (nm == null)
             return;
         //Exit or Restart?
-        System.err.println(nm.getIntent());
+        System.err.println("Packet Received for intent " + nm.getIntent());
         if ("Control".equals(nm.getIntent()))
         {
             String type = nm.getMessage().getMessageType();
-                    if (type.equals(MessageServerControl.getType())) { // ServerControl
-                        MessageServerControl mp = (MessageServerControl)nm.getMessage();
-                        if (mp.exitReq == MessageServerControl.EXIT.YES) ServerSocial.exitRequested = true;
-                        if (mp.restartReq == MessageServerControl.RESTART.YES) ServerSocial.restartRequested = true;
-                        }
+            if (type.equals(MessageServerControl.getType())) { // ServerControl
+                if ("ServerManagement".equals(nm.getSender())) {
+                    MessageServerControl mp = (MessageServerControl)nm.getMessage();
+                    if (mp.exitReq == MessageServerControl.EXIT.YES) ServerSocial.exitRequested = true;
+                    if (mp.restartReq == MessageServerControl.RESTART.YES) ServerSocial.restartRequested = true;
+                }
+            }
         }
     }