callbackPollTransport.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.cometd.callbackPollTransport"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  7. dojo._hasResource["dojox.cometd.callbackPollTransport"] = true;
  8. dojo.provide("dojox.cometd.callbackPollTransport");
  9. dojo.require("dojox.cometd._base");
  10. dojo.require("dojox.cometd.longPollTransport");
  11. dojo.require("dojo.io.script");
  12. dojox.cometd.callbackPollTransport = new function(){
  13. this._connectionType = "callback-polling";
  14. this._cometd = null;
  15. this.check = function(types, version, xdomain){
  16. // we handle x-domain!
  17. return (dojo.indexOf(types, "callback-polling") >= 0);
  18. }
  19. this.tunnelInit = function(){
  20. var message = {
  21. channel: "/meta/connect",
  22. clientId: this._cometd.clientId,
  23. connectionType: this._connectionType,
  24. id: "" + this._cometd.messageId++
  25. };
  26. message = this._cometd._extendOut(message);
  27. this.openTunnelWith([message]);
  28. }
  29. this.tunnelCollapse = dojox.cometd.longPollTransport.tunnelCollapse;
  30. this._connect = dojox.cometd.longPollTransport._connect;
  31. this.deliver = dojox.cometd.longPollTransport.deliver;
  32. this.openTunnelWith = function(content, url){
  33. this._cometd._polling = true;
  34. var script = {
  35. load: dojo.hitch(this, function(data){
  36. this._cometd._polling=false;
  37. this._cometd.deliver(data);
  38. this._cometd._backon();
  39. this.tunnelCollapse();
  40. }),
  41. error: dojo.hitch(this, function(err){
  42. this._cometd._polling = false;
  43. this._cometd._publishMeta("connect",false);
  44. this._cometd._backoff();
  45. this.tunnelCollapse();
  46. }),
  47. url: (url || this._cometd.url),
  48. content: { message: dojo.toJson(content) },
  49. callbackParamName: "jsonp"
  50. };
  51. var connectTimeout = this._cometd._connectTimeout();
  52. if(connectTimeout > 0){
  53. script.timeout=connectTimeout;
  54. }
  55. dojo.io.script.get(script);
  56. }
  57. this.sendMessages = function(/*array*/ messages){
  58. for(var i = 0; i < messages.length; i++){
  59. messages[i].clientId = this._cometd.clientId;
  60. messages[i].id = ""+this._cometd.messageId++;
  61. messages[i]=this._cometd._extendOut(messages[i]);
  62. }
  63. var bindArgs = {
  64. url: this._cometd.url || dojo.config["cometdRoot"],
  65. load: dojo.hitch(this._cometd, "deliver"),
  66. callbackParamName: "jsonp",
  67. content: { message: dojo.toJson( messages ) },
  68. error: dojo.hitch(this, function(err){
  69. this._cometd._publishMeta("publish",false,{messages:messages});
  70. }),
  71. timeout: this._cometd.expectedNetworkDelay
  72. };
  73. return dojo.io.script.get(bindArgs);
  74. }
  75. this.startup = function(handshakeData){
  76. if(this._cometd._connected){ return; }
  77. this.tunnelInit();
  78. }
  79. // FIXME: what is this supposed to do? ;)
  80. this.disconnect = dojox.cometd.longPollTransport.disconnect;
  81. this.disconnect = function(){
  82. var message = {
  83. channel: "/meta/disconnect",
  84. clientId: this._cometd.clientId,
  85. id: "" + this._cometd.messageId++
  86. };
  87. message = this._cometd._extendOut(message);
  88. dojo.io.script.get({
  89. url: this._cometd.url || dojo.config["cometdRoot"],
  90. callbackParamName: "jsonp",
  91. content: { message: dojo.toJson([message]) }
  92. });
  93. }
  94. this.cancelConnect = function(){}
  95. }
  96. dojox.cometd.connectionTypes.register("callback-polling", dojox.cometd.callbackPollTransport.check, dojox.cometd.callbackPollTransport);
  97. }