summaryrefslogtreecommitdiff
path: root/js/demo/Ice/bidir/browser/Client.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/demo/Ice/bidir/browser/Client.js')
-rw-r--r--js/demo/Ice/bidir/browser/Client.js224
1 files changed, 224 insertions, 0 deletions
diff --git a/js/demo/Ice/bidir/browser/Client.js b/js/demo/Ice/bidir/browser/Client.js
new file mode 100644
index 00000000000..dd0b340d8d0
--- /dev/null
+++ b/js/demo/Ice/bidir/browser/Client.js
@@ -0,0 +1,224 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+(function(){
+
+var Promise = Ice.Promise;
+var CallbackSenderPrx = Demo.CallbackSenderPrx;
+
+//
+// Define a servant class that implements the Demo.CallbackReceiver
+// interface.
+//
+var CallbackReceiverI = Ice.Class(Demo.CallbackReceiver, {
+ callback: function(num, current)
+ {
+ writeLine("received callback #" + num);
+ }
+});
+
+var id = new Ice.InitializationData();
+id.properties = Ice.createProperties();
+//
+// Client-side ACM must be disabled for bidirectional connections.
+//
+id.properties.setProperty("Ice.ACM.Client", "0");
+
+//
+// Initialize the communicator
+//
+var communicator = Ice.initialize(id);
+
+var connection;
+
+var start = function()
+{
+ //
+ // Create a proxy to the sender object.
+ //
+ var hostname = document.location.hostname || "127.0.0.1";
+ var proxy = communicator.stringToProxy("sender:ws -p 10002 -h " + hostname);
+
+ //
+ // Down-cast the proxy to the Demo.CallbackSender interface.
+ //
+ return CallbackSenderPrx.checkedCast(proxy).then(
+ function(server)
+ {
+ //
+ // Create the client object adapter.
+ //
+ return communicator.createObjectAdapter("").then(
+ function(adapter)
+ {
+ //
+ // Create a callback receiver servant and add it to
+ // the object adapter.
+ //
+ var r = adapter.addWithUUID(new CallbackReceiverI());
+
+ //
+ // Set the connection adapter and remember the connection.
+ //
+ connection = proxy.ice_getCachedConnection();
+ connection.setAdapter(adapter);
+
+ //
+ // Register the client with the bidir server.
+ //
+ return server.addClient(r.ice_getIdentity());
+ });
+ });
+};
+
+var stop = function()
+{
+ //
+ // Close the connection, the server will unregister the client
+ // when it tries to invoke on the bi-dir proxy.
+ //
+ return connection.close(false);
+}
+
+//
+// Setup button click handlers
+//
+$("#start").click(
+ function()
+ {
+ if(isDisconnected())
+ {
+ setState(State.Connecting);
+ Promise.try(
+ function()
+ {
+ return start().then(function()
+ {
+ setState(State.Connected);
+ });
+ }
+ ).exception(
+ function(ex)
+ {
+ $("#output").val(ex.toString());
+ setState(State.Disconnected);
+ }
+ );
+ }
+ return false;
+ });
+
+$("#stop").click(
+ function()
+ {
+ if(isConnected())
+ {
+ setState(State.Disconnecting);
+ Promise.try(
+ function()
+ {
+ return stop();
+ }
+ ).exception(
+ function(ex)
+ {
+ $("#output").val(ex.toString());
+ }
+ ).finally(
+ function()
+ {
+ setState(State.Disconnected);
+ }
+ );
+ }
+ return false;
+ });
+
+//
+// Handle client state
+//
+var State = {
+ Disconnected: 0,
+ Connecting: 1,
+ Connected: 2,
+ Disconnecting: 3
+};
+
+var isConnected = function()
+{
+ return state == State.Connected;
+};
+
+var isDisconnected = function()
+{
+ return state == State.Disconnected;
+};
+
+var writeLine = function(msg)
+{
+ $("#output").val($("#output").val() + msg + "\n");
+ $("#output").scrollTop($("#output").get(0).scrollHeight);
+}
+
+var state;
+
+var setState = function(s)
+{
+ if(state == s)
+ {
+ return;
+ }
+ state = s;
+ switch(s)
+ {
+ case State.Disconnected:
+ {
+ $("#start").removeClass("disabled");
+
+ $("#progress").hide();
+ $("body").removeClass("waiting");
+ break;
+ }
+ case State.Connecting:
+ {
+ $("#output").val("");
+ $("#start").addClass("disabled");
+
+ $("#progress .message").text("Connecting...");
+ $("#progress").show();
+ $("body").addClass("waiting");
+ break;
+ }
+ case State.Connected:
+ {
+ $("#stop").removeClass("disabled");
+
+ $("#progress").hide();
+ $("body").removeClass("waiting");
+ break;
+ }
+ case State.Disconnecting:
+ {
+ $("#stop").addClass("disabled");
+
+ $("#progress .message").text("Disconnecting...");
+ $("#progress").show();
+ $("body").addClass("waiting");
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+};
+
+setState(State.Disconnected);
+
+}());