WebSockets Promises

Don't run in HTTPS

by Luis Valle

HTML

<div>
  <button id="btnCall">
    Call Websocket
  </button>
</div>
<div id="dvResponses">
  
</div>

JavaScript

(function () {
	$("#btnCall").on("click", function () {
  	WScall("helloMethod", { keys: "myKeys" })
    .then(function (response) {
      console.log(response.data.keys);
    });
    
    return false;
  });  
})();

var callbacks = {};
var websocket = new WebSocket("ws://echo.websocket.org/");
var messages = {
      requests:  [],
      unhandled: []
    };

    websocket.onmessage = function(event) {
    
      var data = $.parseJSON(event.data);
      
      if (data.request_id in callbacks) {
        var callback = callbacks[data.request_id];
        delete callbacks[data.request_id];
        callback.resolve(data);
      } else {
        console.log('not found');
      }
    };

var requestId = 0;
function getRequestId() {
   return requestId++;
   };
   
function WScall(method, spParams) {
	var d = $.Deferred();
  
  var request = {
    request_id: getRequestId(),
    data: spParams
  };

  callbacks[request.request_id] = d;
  messages.requests.push(request);
  websocket.send(JSON.stringify(request));
  
  return d.promise();
}