chat.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import {
  2. YeIMUniSDK,
  3. YeIMUniSDKDefines
  4. } from '@/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
  5. import {
  6. login
  7. } from '@/request/api/chat.js'
  8. import md5 from '@/js_sdk/js-md5/build/md5.min.js';
  9. let userIds;
  10. const connect = success => {
  11. let code = YeIMUniSDK.getInstance().readyState();
  12. if (code !== 3) {
  13. if (success) success();
  14. return;
  15. }
  16. YeIMUniSDK.getInstance().connect({
  17. userId: userIds,
  18. token: uni.getStorageSync('chatToken'),
  19. success: (response) => {
  20. if (response.code === 200) {
  21. if (success) success();
  22. }
  23. },
  24. fail: (err) => {
  25. logins();
  26. }
  27. });
  28. }
  29. const logins = () => {
  30. let timestamp = (new Date()).getTime() + 86400 * 1000; //1000天后过期
  31. let sign = md5(String(userIds) + timestamp + "50abd47112ebe8c5a73f4694c96a49ce");
  32. login({
  33. userId: userIds,
  34. timestamp: timestamp,
  35. sign: sign
  36. }).then(res => {
  37. if (res.code === 200) {
  38. uni.setStorageSync('chatToken', res.data.token);
  39. connect();
  40. }
  41. })
  42. }
  43. export default {
  44. init() {
  45. //初始化YeIMUniSDK
  46. uni.$YeIMUniSDKDefines = YeIMUniSDKDefines;
  47. uni.$YeIM = YeIMUniSDK.init({
  48. baseURL: 'https://www.waywish.com/im', // YeIMServer http url (如无特殊需求,服务端启动后仅需修改ip或者域名即可)
  49. socketURL: 'wss://www.waywish.com/im/im', // YeIMServer socket url(如无特殊需求,服务端启动后仅需修改ip或者域名即可)
  50. /**
  51. * 日志等级
  52. * 0 普通日志,日志量较多,接入时建议使用
  53. * 1 关键性日志,日志量较少,生产环境时建议使用
  54. * 2 无日志级别,SDK 将不打印任何日志
  55. */
  56. logLevel: 0, // 日志等级,
  57. reConnectInterval: 3000, // 重连时间间隔
  58. reConnectTotal: 99, // 最大重连次数,0不限制一直重连
  59. heartInterval: 35000, //心跳时间间隔(默认30s)
  60. });
  61. },
  62. connect(userId) {
  63. userIds = userId;
  64. if (!uni.getStorageSync('chatToken')) {
  65. logins()
  66. } else {
  67. connect();
  68. }
  69. },
  70. getConversationList(success) {
  71. connect(() => {
  72. YeIMUniSDK.getInstance().getConversationList({
  73. page: 1, //页码
  74. limit: 20, //每页数量
  75. success: success,
  76. fail: (err) => {}
  77. });
  78. });
  79. },
  80. getHistoryMessageList(nextMessageId, userId, success) {
  81. connect(() => {
  82. YeIMUniSDK.getInstance().getHistoryMessageList({
  83. nextMessageId: nextMessageId,
  84. conversationId: userId,
  85. success: success,
  86. fail: (err) => {}
  87. });
  88. });
  89. },
  90. sendImage(userId, success) {
  91. connect(() => {
  92. uni.chooseImage({
  93. count: 1, //图片数量
  94. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  95. sourceType: ['album'], //从相册选择
  96. success: res => {
  97. uni.getImageInfo({
  98. src: res.tempFilePaths[0],
  99. success: image => {
  100. //创建图片消息
  101. let message = YeIMUniSDK.getInstance().createImageMessage({
  102. toId: userId, //接收者用户ID字符串
  103. conversationType: YeIMUniSDKDefines
  104. .CONVERSATION_TYPE
  105. .PRIVATE, //会话类型:私聊
  106. body: {
  107. file: {
  108. tempFilePath: res.tempFilePaths[
  109. 0], //本地图片临时路径
  110. width: image.width, //图片宽度
  111. height: image.height //图片高度
  112. }
  113. },
  114. extra: "",
  115. onProgress: (progress) => {}
  116. });
  117. //发送消息
  118. YeIMUniSDK.getInstance().sendMessage({
  119. message: message,
  120. success: success,
  121. fail: (err) => {}
  122. });
  123. }
  124. });
  125. }
  126. });
  127. });
  128. },
  129. sendText(userId, content, success) {
  130. connect(() => {
  131. //创建文字消息
  132. let message = YeIMUniSDK.getInstance().createTextMessage({
  133. toId: userId, //接收者用户ID字符串
  134. conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
  135. body: {
  136. text: content //文本消息内容字符串
  137. },
  138. extra: ""
  139. });
  140. //发送消息
  141. YeIMUniSDK.getInstance().sendMessage({
  142. message: message,
  143. success: success,
  144. fail: (err) => {}
  145. });
  146. });
  147. }
  148. }