Guest User

Untitled

a guest
Dec 15th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. Web.Store = DS.Store.extend();
  2.  
  3. DS.WebsocketAdapter = DS.RESTAdapter.extend({
  4. callbacks: {},
  5. socket: null,
  6. beforeOpenQueue: [],
  7.  
  8. ajax: function(url, type, params) {
  9. var adapter = this;
  10. var uuid = adapter.generateUuid();
  11.  
  12. adapter.initializeSocket();
  13.  
  14. return new Ember.RSVP.Promise(function(resolve, reject) {
  15. var success = function(json) {
  16. Ember.run(null, resolve, json);
  17. };
  18. var error = function(json) {
  19. Ember.run(null, reject, json);
  20. }
  21. callback = { success: success, error: error }
  22. adapter.callbacks[uuid] = callback;
  23.  
  24. var payload = { uuid: uuid, path: adapter.path(url), type: type, params: params, version: adapter.version || 1 };
  25. if(adapter.socket.readyState === 1) {
  26. adapter.socket.send(JSON.stringify(payload));
  27. }
  28. else {
  29. adapter.beforeOpenQueue.push(payload);
  30. }
  31. });
  32. },
  33.  
  34. initializeSocket: function() {
  35. var adapter = this;
  36.  
  37. if(adapter.socket === null) {
  38. adapter.socket = new WebSocket(adapter.host + "/websocket");
  39. adapter.socket.onopen = function(event) { adapter.open.apply(adapter, [event]); };
  40. adapter.socket.onmessage = function(event) { adapter.message.apply(adapter, [event]); };
  41. adapter.socket.onerror = function(event) { adapter.error.apply(adapter, [event]); };
  42. }
  43. },
  44.  
  45. open: function(event) {
  46. var adapter = this;
  47.  
  48. if(adapter.beforeOpenQueue.length > 0) {
  49. adapter.beforeOpenQueue.forEach(function(payload) {
  50. adapter.socket.send(JSON.stringify(payload));
  51. });
  52. adapter.beforeOpenQueue = [];
  53. }
  54. },
  55.  
  56. message: function(event) {
  57. var adapter = this;
  58. var result = JSON.parse(event.data);
  59.  
  60. adapter.callbacks[result.uuid].success(result.payload);
  61. delete adapter.callbacks[result.uuid];
  62. },
  63.  
  64. error: function(event) {
  65. alert(event.data);
  66. },
  67.  
  68. generateUuid: function() {
  69. var date = new Date().getTime();
  70. var uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(character) {
  71. var random = (date + Math.random() * 16) % 16 | 0;
  72. date = Math.floor(date/16);
  73. return (character === "x" ? random : (random & 0x7 | 0x8)).toString(16);
  74. });
  75. return uuid;
  76. },
  77.  
  78. path: function(url) {
  79. return url.replace(this.host, "");
  80. }
  81. });
  82.  
  83. Web.ApplicationAdapter = DS.WebsocketAdapter.extend({
  84. host: "ws://localhost:4000",
  85. version: 1
  86. });
Add Comment
Please, Sign In to add comment