Your Name 3 лет назад
Родитель
Сommit
74c69fd3e6
4 измененных файлов: 21 добавлений и 10 удалений
  1. 1
    1
      config/dev.js
  2. 12
    5
      src/pages/chat/chatDetail/index.jsx
  3. 6
    2
      src/utils/im/listeners.js
  4. 2
    2
      src/utils/im/sdk.js

+ 1
- 1
config/dev.js Просмотреть файл

5
   defineConstants: {
5
   defineConstants: {
6
     HOST: '"https://xlk.njyz.tech"',
6
     HOST: '"https://xlk.njyz.tech"',
7
     // HOST: '"http://127.0.0.1:8081"',
7
     // HOST: '"http://127.0.0.1:8081"',
8
-    WSS_HOST: '"ws://xlk.njyz.tech"',
8
+    WSS_HOST: '"wss://xlk.njyz.tech"',
9
     OSS_PATH: '"https://xlk-assets.oss-accelerate.aliyuncs.com/"',
9
     OSS_PATH: '"https://xlk-assets.oss-accelerate.aliyuncs.com/"',
10
     OSS_FAST_PATH: '"https://xlk-assets.oss-accelerate.aliyuncs.com/"',
10
     OSS_FAST_PATH: '"https://xlk-assets.oss-accelerate.aliyuncs.com/"',
11
     ICON_FONT: '"https://yz-websit.oss-cn-hangzhou.aliyuncs.com/xlk/css/iconfont.ttf"',
11
     ICON_FONT: '"https://yz-websit.oss-cn-hangzhou.aliyuncs.com/xlk/css/iconfont.ttf"',

+ 12
- 5
src/pages/chat/chatDetail/index.jsx Просмотреть файл

5
 import { API_QUERY_USERINFO_BYID } from '@/constants/api'
5
 import { API_QUERY_USERINFO_BYID } from '@/constants/api'
6
 import { ROLE_CODE } from '@/constants/user'
6
 import { ROLE_CODE } from '@/constants/user'
7
 import { uploadFiles, fetch } from '@/utils/request'
7
 import { uploadFiles, fetch } from '@/utils/request'
8
-import { queryChatHistory } from '@/services/chat'
8
+import { queryChatHistory, setMessageReaded } from '@/services/chat'
9
 import im from '@/utils/im'
9
 import im from '@/utils/im'
10
 import { getDateForHumans } from '@/utils/chatDate'
10
 import { getDateForHumans } from '@/utils/chatDate'
11
 import '@/assets/css/iconfont.css'
11
 import '@/assets/css/iconfont.css'
117
         setReceiver(res)
117
         setReceiver(res)
118
         getChatHistory({ pageNumber: 1 })
118
         getChatHistory({ pageNumber: 1 })
119
       })
119
       })
120
-
121
-      const unsubsribe = im.listen((message) => {
122
-
123
-      })
124
     } else {
120
     } else {
125
       Taro.showToast({
121
       Taro.showToast({
126
         title: '无聊天对象,请退出重试',
122
         title: '无聊天对象,请退出重试',
130
     // eslint-disable-next-line react-hooks/exhaustive-deps
126
     // eslint-disable-next-line react-hooks/exhaustive-deps
131
   }, [friend])
127
   }, [friend])
132
 
128
 
129
+  useEffect(() => {
130
+    return im.listen((message) => {
131
+      const receiveData = JSON.parse(message)
132
+      setPageList(PageList.concat(receiveData))
133
+      // 滚动到底部
134
+      scroll()
135
+      // 更新记录为已读
136
+      setMessageReaded(receiveData.chatId)
137
+    })
138
+  }, [PageList, scroll])
139
+
133
   return (
140
   return (
134
     <view className='chatDetail flex-v'>
141
     <view className='chatDetail flex-v'>
135
       <view className='flex-item'>
142
       <view className='flex-item'>

+ 6
- 2
src/utils/im/listeners.js Просмотреть файл

1
 
1
 
2
 export default () => {
2
 export default () => {
3
-  const listeners = []
3
+  let listeners = []
4
 
4
 
5
   function getIndex(name) {
5
   function getIndex(name) {
6
     for (let i = 0; i < listeners.length; i += 1) {
6
     for (let i = 0; i < listeners.length; i += 1) {
17
     listeners = listeners.filter((f) => f.name !== name)
17
     listeners = listeners.filter((f) => f.name !== name)
18
   }
18
   }
19
 
19
 
20
-  function append(name, fun) {
20
+  function append(fun, name) {
21
+    if (!name) {
22
+      name = Math.random().toString(36).substring(2)
23
+    }
24
+
21
     const pos = getIndex(name)
25
     const pos = getIndex(name)
22
     if (pos === -1) {
26
     if (pos === -1) {
23
       listeners.push({ name, fun })
27
       listeners.push({ name, fun })

+ 2
- 2
src/utils/im/sdk.js Просмотреть файл

60
       }).then((task) => {
60
       }).then((task) => {
61
         console.log(`[${now()}]`, '[WS] [connect]', task)
61
         console.log(`[${now()}]`, '[WS] [connect]', task)
62
         instanceRef.current = task
62
         instanceRef.current = task
63
-  
63
+
64
         task.onOpen(function () {
64
         task.onOpen(function () {
65
           console.log(`[${now()}]`, '[WS] [onOpen]', paramsRef.current)
65
           console.log(`[${now()}]`, '[WS] [onOpen]', paramsRef.current)
66
           resolve()
66
           resolve()
68
 
68
 
69
         task.onMessage(function (msg) {
69
         task.onMessage(function (msg) {
70
           console.info(`[${now()}]`, '[WS] [onMessage]', msg)
70
           console.info(`[${now()}]`, '[WS] [onMessage]', msg)
71
-          instanceRef.onMessage().forEach((f) => f(msg))
71
+          instanceRef.onMessage().forEach((f) => f(msg.data))
72
         })
72
         })
73
 
73
 
74
         task.onError(function (error) {
74
         task.onError(function (error) {