emPresence.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import {
  2. EaseSDK,
  3. EMClient
  4. } from '../index';
  5. const _chunkArr = (oldArr, num) => {
  6. oldArr.sort((a, b) => {
  7. return a - b;
  8. });
  9. if (oldArr.length <= 0) return oldArr;
  10. let newArr = [];
  11. if (Math.ceil(oldArr.length / num) <= 1) {
  12. newArr.push(oldArr);
  13. return newArr;
  14. }
  15. for (let i = 0; i < oldArr.length; i = i + num) {
  16. newArr.push(oldArr.slice(i, i + num));
  17. }
  18. return newArr;
  19. };
  20. const emPresence = () => {
  21. // 发布自定义在线状态
  22. const publishPresence = (presenceMsg) => {
  23. return new Promise((resolve, reject) => {
  24. EMClient.publishPresence({
  25. description: presenceMsg,
  26. })
  27. .then((res) => {
  28. resolve(res)
  29. })
  30. .catch((error) => {
  31. reject(error);
  32. });
  33. });
  34. };
  35. // 订阅用户的在线状态
  36. const subscribePresence = (userList) => {
  37. let friendList = [];
  38. friendList = Object.assign([], userList);
  39. return new Promise((resolve, reject) => {
  40. if (friendList.length && friendList.length < 99) {
  41. EMClient.subscribePresence({
  42. usernames: friendList,
  43. expiry: 7 * 24 * 3600
  44. })
  45. .then((res) => {
  46. const {
  47. data
  48. } = res;
  49. resolve(data.result);
  50. })
  51. .catch((error) => {
  52. reject(error);
  53. });
  54. } else {
  55. let newArr = _chunkArr(friendList, 99);
  56. for (let i = 0; i < newArr.length; i++) {
  57. EMClient.subscribePresence({
  58. usernames: newArr[i],
  59. expiry: 7 * 24 * 3600
  60. } )
  61. .then((res) => {
  62. const {
  63. data
  64. } = res;
  65. resolve(data.result);
  66. })
  67. .catch((error) => {
  68. reject(error);
  69. });
  70. }
  71. }
  72. });
  73. };
  74. // 获取用户的当前在线状态
  75. const getPresenceStatus = (userList) => {
  76. let friendList = [];
  77. friendList = Object.assign([], userList);
  78. return new Promise((resolve, reject) => {
  79. if (friendList.length && friendList.length < 99) {
  80. EMClient.getPresenceStatus({
  81. usernames: friendList
  82. })
  83. .then((res) => {
  84. const {
  85. data
  86. } = res;
  87. resolve(data.result);
  88. })
  89. .catch((error) => {
  90. reject(error);
  91. });
  92. } else {
  93. let newArr = _chunkArr(friendList, 99);
  94. for (let i = 0; i < newArr.length; i++) {
  95. EMClient.getPresenceStatus({
  96. usernames: newArr[i]
  97. })
  98. .then((res) => {
  99. const {
  100. data
  101. } = res;
  102. resolve(data.result);
  103. })
  104. .catch((error) => {
  105. reject(error);
  106. });
  107. }
  108. }
  109. });
  110. };
  111. // 取消订阅
  112. const unsubscribePresence = (userName) => {
  113. return new Promise((resolve, reject) => {
  114. EMClient.unsubscribePresence({
  115. usernames: [userName]
  116. })
  117. .then((res) => {
  118. console.log("取消订阅成功")
  119. resolve(res)
  120. })
  121. .catch((error) => {
  122. reject(error);
  123. });
  124. });
  125. };
  126. return {
  127. publishPresence,
  128. subscribePresence,
  129. getPresenceStatus,
  130. unsubscribePresence
  131. };
  132. };
  133. export default emPresence;