From: TJ Date: Mon, 4 May 2015 15:35:52 +0000 (+0100) Subject: ServerSocial: refactor "Server" to "Service" X-Git-Url: https://iam.tj/gitweb/gitweb.cgi?p=WeStealzYourDataz.git;a=commitdiff_plain;h=356a1d45f0c52a18f0a5ce2d0689551c6009c5c7 ServerSocial: refactor "Server" to "Service" Refactor some variable names to better reflect their purpose, and fix some indentation. --- diff --git a/src/uk/ac/ntu/n0521366/wsyd/server/ServerSocial.java b/src/uk/ac/ntu/n0521366/wsyd/server/ServerSocial.java index 0867364..673ef46 100644 --- a/src/uk/ac/ntu/n0521366/wsyd/server/ServerSocial.java +++ b/src/uk/ac/ntu/n0521366/wsyd/server/ServerSocial.java @@ -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 servicesRemoved = _multicastServer.cleanServiceToHostMap(5000); + // clean up the known hosts map + ArrayList 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; + } + } } }