diff --git a/web/about.html b/web/about.html
index 7e1107b..3c2bc90 100644
--- a/web/about.html
+++ b/web/about.html
@@ -10,7 +10,7 @@
}
-
diff --git a/web/bootstrap/template.xsl b/web/bootstrap/template.xsl
index dfbe270..7822935 100644
--- a/web/bootstrap/template.xsl
+++ b/web/bootstrap/template.xsl
@@ -20,7 +20,10 @@
-
+
+
+
+
[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]
diff --git a/web/bootstrap/templates/index.xml b/web/bootstrap/templates/index.xml
index 511de3c..3cd2173 100644
--- a/web/bootstrap/templates/index.xml
+++ b/web/bootstrap/templates/index.xml
@@ -1,6 +1,10 @@
Ocamlmsg
+
+ index.js
+
+
Server statistics
@@ -28,6 +32,4 @@
Debug
-
-
diff --git a/web/index.html b/web/index.html
index 4dde992..51ae838 100644
--- a/web/index.html
+++ b/web/index.html
@@ -10,7 +10,7 @@
}
-
diff --git a/web/index.js b/web/index.js
new file mode 100644
index 0000000..58d9201
--- /dev/null
+++ b/web/index.js
@@ -0,0 +1,46 @@
+function server_disconnected() {
+ $("#server_ok")[0].className = "btn-danger";
+ $("#server_ok").text("Disconnected");
+ $("#server_stats_connection_count").text("—");
+ $("#server_stats_boot_time").text("—");
+ $("#server_stats_uptime").text("—");
+ $("#server_classes").text("—");
+}
+
+function refresh_server_stats() {
+ $.getJSON("/_/server_stats", function (data) {
+ $("#server_ok")[0].className = "btn-success";
+ $("#server_ok").text("OK");
+ $("#server_stats_connection_count").text(data.connection_count);
+ $("#server_stats_boot_time").text(new Date(data.boot_time * 1000));
+ $("#server_stats_uptime").text(data.uptime);
+ $("#server_classes").text(data.classes.join(", "));
+ switch (Ocamlmsg.$tap.readyState) {
+ case 0: // connecting
+ case 1: // open
+ case 2: // closing
+ break;
+ case 3: // closed
+ Ocamlmsg.force_reinstall();
+ }
+ }).error(server_disconnected);
+}
+
+function ui_main() {
+ refresh_server_stats();
+ setInterval(refresh_server_stats, 5000);
+
+ Ocamlmsg.install_tap({
+ open: function (event, stream) {
+ refresh_server_stats();
+ Ocamlmsg.post(stream.id, {"test":true});
+ Ocamlmsg.create("fanout", ["system.log"], "completion1");
+ Ocamlmsg.subscribe("meta", "system.log", "sub_messages", "completion2");
+ Ocamlmsg.subscribe("system.log", "", "log_messages", "completion3");
+ },
+ message: function (event, stream) {
+ $("#debug_container").append(JSON.stringify(event.data) + "\n");
+ },
+ close: server_disconnected
+ });
+}
diff --git a/web/ocamlmsg.js b/web/ocamlmsg.js
new file mode 100644
index 0000000..6c6fa4f
--- /dev/null
+++ b/web/ocamlmsg.js
@@ -0,0 +1,76 @@
+var Ocamlmsg = {
+ $tap: null,
+ $args: null,
+
+ _send: function (msg) {
+ Ocamlmsg.$tap.send({data: JSON.stringify(msg)});
+ },
+
+ _post_msg: function (target, datum, token) {
+ return ["post", target, datum, token || ""];
+ },
+
+ post: function (target, datum, token) {
+ Ocamlmsg._send(Ocamlmsg._post_msg(target, datum, token));
+ },
+
+ _subscribe_msg: function (filter, sink, name, reply_sink, reply_name) {
+ return ["subscribe", filter, sink, name, reply_sink || "", reply_name || ""];
+ },
+
+ _subscribe: function (source, filter, name, reply_name) {
+ return Ocamlmsg._post_msg(source,
+ Ocamlmsg._subscribe_msg(filter, Ocamlmsg.$tap.id, name,
+ reply_name ? Ocamlmsg.$tap.id : "",
+ reply_name));
+ },
+
+ subscribe: function (source, filter, name, reply_name) {
+ Ocamlmsg._send(Ocamlmsg._subscribe(source, filter, name, reply_name));
+ },
+
+ _unsubscribe_msg: function (token) {
+ return ["unsubscribe", token];
+ },
+
+ _unsubscribe: function (source, token) {
+ return Ocamlmsg._post_msg(source, Ocamlmsg._unsubscribe_msg(token));
+ },
+
+ unsubscribe: function (source, token) {
+ Ocamlmsg._send(Ocamlmsg._unsubscribe(source, token));
+ },
+
+ _create_msg: function (classname, arg, reply_sink, reply_name) {
+ return ["create", classname, arg, reply_sink || "", reply_name || ""];
+ },
+
+ _create: function (classname, arg, reply_name, factory) {
+ return Ocamlmsg._post_msg(factory || "factory",
+ Ocamlmsg._create_msg(classname, arg,
+ reply_name ? Ocamlmsg.$tap.id : "",
+ reply_name));
+ },
+
+ create: function (classname, arg, reply_name, factory) {
+ Ocamlmsg._send(Ocamlmsg._create(classname, arg, reply_name, factory));
+ },
+
+ install_tap: function (args) {
+ Ocamlmsg.$args = args;
+ Ocamlmsg.$tap = $.stream("/_/tap", {
+ type: "http",
+ dataType: "json",
+ enableXDR: true,
+
+ open: args.open,
+ message: args.message,
+ error: args.close,
+ close: args.close
+ });
+ },
+
+ force_reinstall: function () {
+ Ocamlmsg.install_tap(Ocamlmsg.$args);
+ }
+}
diff --git a/web/ui_main.js b/web/ui_main.js
deleted file mode 100644
index 5fda8bd..0000000
--- a/web/ui_main.js
+++ /dev/null
@@ -1,113 +0,0 @@
-var $tap;
-
-function server_disconnected() {
- $("#server_ok")[0].className = "btn-danger";
- $("#server_ok").text("Disconnected");
- $("#server_stats_connection_count").text("—");
- $("#server_stats_boot_time").text("—");
- $("#server_stats_uptime").text("—");
- $("#server_classes").text("—");
-}
-
-function refresh_server_stats() {
- $.getJSON("/_/server_stats", function (data) {
- $("#server_ok")[0].className = "btn-success";
- $("#server_ok").text("OK");
- $("#server_stats_connection_count").text(data.connection_count);
- $("#server_stats_boot_time").text(new Date(data.boot_time * 1000));
- $("#server_stats_uptime").text(data.uptime);
- $("#server_classes").text(data.classes.join(", "));
- switch ($tap.readyState) {
- case 0: // connecting
- case 1: // open
- case 2: // closing
- break;
- case 3: // closed
- reset_tap_stream();
- }
- }).error(server_disconnected);
-}
-
-var Ocamlmsg = {
- _send: function (msg) {
- $tap.send({data: JSON.stringify(msg)});
- },
-
- _post_msg: function (target, datum, token) {
- return ["post", target, datum, token || ""];
- },
-
- post: function (target, datum, token) {
- Ocamlmsg._send(Ocamlmsg._post_msg(target, datum, token));
- },
-
- _subscribe_msg: function (filter, sink, name, reply_sink, reply_name) {
- return ["subscribe", filter, sink, name, reply_sink || "", reply_name || ""];
- },
-
- _subscribe: function (source, filter, name, reply_name) {
- return Ocamlmsg._post_msg(source,
- Ocamlmsg._subscribe_msg(filter, $tap.id, name,
- reply_name ? $tap.id : "",
- reply_name));
- },
-
- subscribe: function (source, filter, name, reply_name) {
- Ocamlmsg._send(Ocamlmsg._subscribe(source, filter, name, reply_name));
- },
-
- _unsubscribe_msg: function (token) {
- return ["unsubscribe", token];
- },
-
- _unsubscribe: function (source, token) {
- return Ocamlmsg._post_msg(source, Ocamlmsg._unsubscribe_msg(token));
- },
-
- unsubscribe: function (source, token) {
- Ocamlmsg._send(Ocamlmsg._unsubscribe(source, token));
- },
-
- _create_msg: function (classname, arg, reply_sink, reply_name) {
- return ["create", classname, arg, reply_sink || "", reply_name || ""];
- },
-
- _create: function (classname, arg, reply_name, factory) {
- return Ocamlmsg._post_msg(factory || "factory",
- Ocamlmsg._create_msg(classname, arg,
- reply_name ? $tap.id : "",
- reply_name));
- },
-
- create: function (classname, arg, reply_name, factory) {
- Ocamlmsg._send(Ocamlmsg._create(classname, arg, reply_name, factory));
- }
-};
-
-function reset_tap_stream() {
- $tap = $.stream("/_/tap", {
- type: "http",
- dataType: "json",
-
- open: function (event, stream) {
- refresh_server_stats();
- Ocamlmsg.post(stream.id, {"test":true});
- Ocamlmsg.create("fanout", ["system.log"], "completion1");
- Ocamlmsg.subscribe("meta", "system.log", "sub_messages", "completion2");
- Ocamlmsg.subscribe("system.log", "", "log_messages", "completion3");
- },
- message: function (event, stream) {
- $("#debug_container").append(JSON.stringify(event.data) + "\n");
- },
- error: server_disconnected,
- close: server_disconnected
- });
-}
-
-function ui_main() {
- refresh_server_stats();
- setInterval(refresh_server_stats, 5000);
-
- $.stream.setup({enableXDR: true});
- reset_tap_stream();
-}