/**
* Regular presence announcements
*/
- Timer multicastAnnounce;
+ Timer regularTasks;
/**
* Creates new GUI
public ServerManagement(boolean multicastAnnouncements, InetAddress serverSocial) {
this();
this._multicastAnnouncements = multicastAnnouncements;
- // TODO: implement constructor setting IP address of SocialServer from command-line value - needs ServiceToHostMap separating from NetworkServerAbstract and do not allow manually added service map element being treated as stale
+ gMenuLogServiceAnnounce.setSelected(_multicastAnnouncements);
+ // TODO: implement constructor setting IP address of SocialServer from command-line value
}
/**
* Initialise listeners and other objects that require a reference to 'this'.
// permit broadcasting to pseudo-host 'all' since this is multicast
_serviceToAddressMap.put("all", new LastSeenHost(new InetSocketAddress(Network.MULTICAST_IP, Network.PORTS_MULTICAST_DISCOVERY), LastSeenHost.STATE.STATIC));
- if (this._multicastAnnouncements) {
- ActionListener multicastAnnounceActionListener = new ActionListener() {
- /**
- * Activated by timer events to send multi-cast neighbour
- * announcements for the Log Service.
- *
- * @param e
- */
- @Override
- public void actionPerformed(ActionEvent e) {
+ ActionListener regularTasksActionListener = new ActionListener() {
+ // provide a way to read the current version of the parent process object's fields
+ ServerManagement owner;
+
+ // XXX: Anonymous class initialisation - effectively used as the body of the object's constructor
+ {
+ // XXX: access to the outer class's instance object
+ owner = ServerManagement.this;
+ }
+
+ /**
+ * Activated by timer events to send multi-cast neighbour
+ * announcements for the Log Service.
+ *
+ * @param e
+ */
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String serviceName = "LogService";
+ // check the current value ofthe parent process' flag
+ if (owner._multicastAnnouncements) {
// Create local log report first
LogRecord record = new LogRecord(Level.FINEST, "Multicast: Announcing Presence");
- record.setSourceClassName("ServerLog");
+ record.setSourceClassName(serviceName);
record.setMillis(System.currentTimeMillis());
LOGGER.log(record);
- // Announce the Log Server service
- MessagePresence mp = new MessagePresence(_title + "Log", _udpLogService.getSocketAddress());
+ // Announce the log service
+ MessagePresence mp = new MessagePresence(_title + serviceName, _udpLogService.getSocketAddress());
NetworkMessage nm = NetworkMessage.createNetworkMessage("Neighbour", "all", mp);
- nm.setSender(_title + "Log");
+ nm.setSender(_title + serviceName);
_multicastServer.queueMessage(nm);
-
- // clean up the known hosts map and keep Server menu up-to-date
- ArrayList<String> servicesRemoved = _serviceToAddressMap.cleanServiceAddressMap(5000);
- for (String service : servicesRemoved) {
- switch (service) {
- case "ServerSocial":
- gMenuServerSocial.setEnabled(false);
- break;
- case "ServerChat":
- gMenuServerChat.setEnabled(false);
- break;
- }
+ }
+ // clean up the known hosts map
+ ArrayList<String> servicesRemoved = _serviceToAddressMap.cleanServiceAddressMap(5000);
+ // keep Server menu up-to-date
+ for (String service : servicesRemoved) {
+ switch (service) {
+ case "ServerSocial":
+ gMenuServerSocial.setEnabled(false);
+ break;
+ case "ServerChat":
+ gMenuServerChat.setEnabled(false);
+ break;
}
-
}
- };
- multicastAnnounce = new Timer(1000, multicastAnnounceActionListener);
- multicastAnnounce.setInitialDelay(100);
- multicastAnnounce.start();
- }
+
+ }
+ };
+ regularTasks = new Timer(1000, regularTasksActionListener);
+ regularTasks.setInitialDelay(100);
+ regularTasks.start();
return this;
}
gMenuLogClear = new javax.swing.JMenuItem();
gMenuLogControl = new javax.swing.JCheckBoxMenuItem();
gMenuLogAutoScroll = new javax.swing.JCheckBoxMenuItem();
+ gMenuLogServiceAnnounce = new javax.swing.JCheckBoxMenuItem();
gMenuServers = new javax.swing.JMenu();
gMenuServerSocial = new javax.swing.JMenu();
gMenuServerSocialRestart = new javax.swing.JMenuItem();
});
gMenuLog.add(gMenuLogAutoScroll);
+ gMenuLogServiceAnnounce.setSelected(true);
+ gMenuLogServiceAnnounce.setText("Multicast Announce");
+ gMenuLogServiceAnnounce.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ gMenuLogServiceAnnounceActionPerformed(evt);
+ }
+ });
+ gMenuLog.add(gMenuLogServiceAnnounce);
+
gMenuBar.add(gMenuLog);
gMenuServers.setText("Servers");
gMenuLogAutoScroll.setSelected(_autoScroll);
}//GEN-LAST:event_gMenuLogAutoScrollActionPerformed
+ /**
+ * Enable or disable multicast log service announcements.
+ * @param evt
+ */
+ private void gMenuLogServiceAnnounceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_gMenuLogServiceAnnounceActionPerformed
+ this._multicastAnnouncements = gMenuLogServiceAnnounce.isSelected();
+ }//GEN-LAST:event_gMenuLogServiceAnnounceActionPerformed
+
/**
* Receive a NetworkMessageEvent and dispose of it
* @param event
private javax.swing.JCheckBoxMenuItem gMenuLogAutoScroll;
private javax.swing.JMenuItem gMenuLogClear;
private javax.swing.JCheckBoxMenuItem gMenuLogControl;
+ private javax.swing.JCheckBoxMenuItem gMenuLogServiceAnnounce;
private javax.swing.JMenu gMenuServerChat;
private javax.swing.JMenuItem gMenuServerChatRestart;
private javax.swing.JMenuItem gMenuServerChatStop;