callbackPollTransport.js 3.2 KB

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