im.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import config from './config';
  2. const im = {
  3. socket : {},
  4. status : false,
  5. //host
  6. url : '',
  7. //推送路径
  8. push_path : '',
  9. init : function(key, url, callback, connect) {
  10. if (url) {
  11. this.url = url;
  12. } else {
  13. this.url = config.im.host;
  14. }
  15. this.connect(key, callback, connect);
  16. },
  17. connect : function(key, callback, connect) {
  18. var self = this;
  19. this.close(key);
  20. this.socket[key] = uni.connectSocket({
  21. url: this.url,
  22. complete: (res)=> {
  23. }
  24. });
  25. this.socket[key].onOpen(function (res) {
  26. if (connect) {
  27. connect(true, res);
  28. }
  29. console.info('open');
  30. self.status = true;
  31. self.socket[key].onMessage(function (res) {
  32. if (res.data.indexOf('{') != -1) {
  33. var data = eval("("+res.data+")");
  34. } else {
  35. var data = res.data;
  36. }
  37. if (callback) {
  38. callback(data);
  39. }
  40. });
  41. });
  42. this.socket[key].onClose(function (res) {
  43. if (connect) {
  44. connect(false, res);
  45. }
  46. console.info('close');
  47. self.status = false;
  48. });
  49. this.socket[key].onError(function (res) {
  50. console.info('error');
  51. self.connect(callback, connect);
  52. });
  53. },
  54. close : function(key) {
  55. var self = this;
  56. if (this.socket[key]) {
  57. this.socket[key].close({
  58. success(res) {
  59. self.status = false;
  60. },
  61. fail(err) {
  62. self.status = true;
  63. }
  64. })
  65. }
  66. },
  67. get : function(vue, url, options, callback, err_callback) {
  68. this.request(vue, url, options, callback, err_callback);
  69. },
  70. post : function(url, options, callback, err_callback) {
  71. this.request('post', url, options, callback, err_callback);
  72. },
  73. request : function(vue, url, options, callback, err_callback) {
  74. if (!options) {
  75. options = {};
  76. }
  77. var param = options;
  78. param.noloading = 1;
  79. dever.post(this.push_path, param, function(t) {
  80. url += '?timestamp=' + t.timestamp + '&pop_token=' + t.token + '&login_uid=' + t.login_uid;
  81. dever.config.im = t;
  82. options.login_uid = t.login_uid;
  83. if (t.friend_uid) {
  84. options.friend_uid = t.friend_uid;
  85. }
  86. delete options.noloading;
  87. http.request(vue, url, options, callback, err_callback, 'im');
  88. });
  89. }
  90. }
  91. export default im;