summaryrefslogtreecommitdiff
path: root/sources/protocols/VSRegisteredProtocols.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/protocols/VSRegisteredProtocols.java')
-rw-r--r--sources/protocols/VSRegisteredProtocols.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/sources/protocols/VSRegisteredProtocols.java b/sources/protocols/VSRegisteredProtocols.java
new file mode 100644
index 0000000..5153a07
--- /dev/null
+++ b/sources/protocols/VSRegisteredProtocols.java
@@ -0,0 +1,82 @@
+package protocols;
+
+import java.util.*;
+
+import prefs.*;
+import core.*;
+import utils.*;
+
+public final class VSRegisteredProtocols {
+ private static HashMap<String,String> protocolClassnames;
+ private static HashMap<String,String> protocolNames;
+ private static VSPrefs prefs;
+
+ public static void init(VSPrefs prefs_) {
+ prefs = prefs_;
+ protocolNames = new HashMap<String, String>();
+ protocolClassnames = new HashMap<String, String>();
+
+ registerProtocol("protocols.DummyProtocol");
+ registerProtocol("protocols.PingPongProtocol");
+ registerProtocol("protocols.ExternalTimeSyncProtocol");
+ registerProtocol("protocols.InternalTimeSyncProtocol");
+ registerProtocol("protocols.BroadcastSturmProtocol");
+ registerProtocol("protocols.BerkelyTimeProtocol");
+ }
+
+ public static Vector<String> getProtocolNames() {
+ Set<String> set = protocolClassnames.keySet();
+ Vector<String> vector = new Vector<String>();
+
+ for (String protocolName : set)
+ vector.add(protocolName);
+
+ Collections.sort(vector);
+
+ return vector;
+ }
+
+ public static String getProtocolClassname(String protocolName) {
+ return protocolClassnames.get(protocolName);
+ }
+
+ public static String getProtocolName(String protocolClassname) {
+ return protocolNames.get(protocolClassname);
+ }
+
+ public static VSProtocol getProtocolInstanceByName(String protocolName, VSProcess process) {
+ final String protocolClassname = protocolClassnames.get(protocolName);
+ final Object protocolObj = new VSClassLoader().newInstance(protocolClassname);
+
+ if (protocolObj instanceof VSProtocol) {
+ VSProtocol protocol = (VSProtocol) protocolObj;
+ protocol.init(process);
+ return protocol;
+ }
+
+ return null;
+ }
+
+ public static void registerProtocol(String protocolClassname) {
+ int index = protocolClassname.lastIndexOf('.');
+
+ if (index < 0) {
+ protocolNames.put(protocolClassname, protocolClassname);
+ protocolClassnames.put(protocolClassname, protocolClassname);
+ return;
+ }
+
+ String protocolName = protocolClassname.substring(index + 1);
+ index = protocolName.lastIndexOf("Protocol");
+
+ if (index < 0 || index != protocolName.length() - 8) {
+ protocolNames.put(protocolClassname, protocolName);
+ protocolClassnames.put(protocolName, protocolClassname);
+ return;
+ }
+
+ protocolName = protocolName.substring(0, index);
+ protocolNames.put(protocolClassname, protocolName);
+ protocolClassnames.put(protocolName, protocolClassname);
+ }
+}