소스 검색

test private messages ok

serg1557733 1 년 전
부모
커밋
3bb49788d0

+ 21 - 35
backend/app.js

@@ -236,44 +236,30 @@ io.use( async (socket, next) => {
 });
 
 io.on("connection", async (socket) => {
-
-
-    //need to use this ID to socket privat messges
-
-    const users = [];
-    for (let [id, socket] of io.of("/").sockets) {
-      users.push({
-        userID: id,
-        username: socket.user.userName
-      });
-    }
-
-    
-    socket.emit("usersID", users);
-
-
     const userName = socket.user.userName;
     const sockets = await io.fetchSockets();
     const dbUser = await getOneUser(userName);
-    const usersOnline = sockets.map(sock => sock.user)
-
-
-const onUser = []
-    const usersOnlineID = usersOnline.map(users => Object.values(users)[0])
-    const userSet = new Set(usersOnlineID)
-    for (let id of userSet) {
-        const userFromDb = await User.findById(id)
-
-        onUser.push(userFromDb)
-    }
-
-
 
+    //need to use this ID to socket privat messges
 
+    const users = [];
+        for (let [id, socket] of io.of("/").sockets) {
+            
+            const dbUser = await getOneUser(socket.user.userName)
+            users.push({...dbUser._doc,socketId: id });
+        }
+       
+    
 
-    console.log(users)
+// const onUser = []
+//     const usersOnlineID = usersOnline.map(users => Object.values(users)[0])
+//     const userSet = new Set(usersOnlineID)
+//     for (let id of userSet) {
+//         const userFromDb = await User.findById(id)
+//         onUser.push(userFromDb)
+//     }
 
-    io.emit('usersOnline', onUser); // send array online users  
+    io.emit('usersOnline', users); // send array online users  
 
     socket.emit('connected', dbUser); //socket.user
   
@@ -357,12 +343,12 @@ const onUser = []
                 // }
            });
 
-        socket.on("private message", ({ user, message, to }) => {
-            console.log(to, user._id, message)
+        socket.on("private message", ({ from, message, to }) => {
+            console.log(from,  to)
             socket.to(to).emit("private message", {
-              user,
               message,
-              from: user.id,
+              from,
+              createDate: Date.now(),
             });
           });
 

+ 3 - 4
frontend/src/components/chatPage/ChatPage.jsx

@@ -73,11 +73,10 @@ export const ChatPage = () => {
 
 
     const sendPrivateMessage = () => {
-        console.log(message, chatId, socket.id)
         socket.emit("private message", {
-            user,
-            message: chatId,
-            to: socket.id,
+            from: socket.id,
+            message,
+            to: chatId,
           })
     }
 

+ 4 - 4
frontend/src/components/chatPage/generalChat/UserInfoButton.jsx

@@ -20,13 +20,13 @@ export const UserInfoButton = ({item, i}) => {
 
     return (
         <div 
-        className={isPrivatChat&&(chatId === item._id)? 'online active' :'online' }                       
+        className={isPrivatChat&&(chatId === item.socketId)? 'online active' :'online' }                       
         onClick={() => {
-            console.log(item._id, user._id)
-            store.dispatch(privateMessage({chatId: item._id}))
+            console.log(item.socketId, chatId)
+            store.dispatch(privateMessage({chatId: item.socketId}))
             socket.emit('privat chat', {
                 user,
-                to: item._id,
+                to: item.socketId,
               })
         }
         }

+ 13 - 18
frontend/src/components/chatPage/privateChat/PrivateChat.jsx

@@ -18,30 +18,25 @@ export const PrivateChat = () => {
 
     const SERVER_URL =process.env.REACT_APP_SERVER_URL
 
-    const startMessages = useSelector(state => state.getUserSocketReducer.startMessages)
+    const startMessages = []
     const user = useSelector(state => state.getUserSocketReducer.socketUserData)
     const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline)
     const userNamesOnlineSet =  new Set(usersOnline.map( i => i.userName))
     const storeMessageId = useSelector(state => state.messageReducer.messageId)
     const newMessages = useSelector(state => state.getUserSocketReducer.newMessages)
 
-    // socket.on("private message", ({ content, from }) => {
-    //     console.log(content, from)
-    //     for (let i = 0; i < this.users.length; i++) {
-    //       const user = this.users[i];
-    //       if (user.userID === from) {
-    //         user.messages.push({
-    //           content,
-    //           fromSelf: false,
-    //         });
-    //         if (user !== this.selectedUser) {
-    //           user.hasNewMessages = true;
-    //         }
-    //         break;
-    //       }
-    //     }
-    //   });
+    socket.on("private message", ({ message,createDate, from }) => {
+        console.log(message, from, createDate )
+        const newPrivatMessage = {
+            text: message,
+            from,
+            createDate:createDate
+        }
+        startMessages.push(newPrivatMessage)
+      });
+
 
+console.log(startMessages)
 
     let endMessages = useRef(null);
     const [isEditing, setIsEditing] = useState(false)   
@@ -67,7 +62,7 @@ export const PrivateChat = () => {
     return (             
             <Box className='messageBox'>  
                 {
-                messages.map((item, i) =>
+                startMessages.map((item, i) =>
                     <div key={i + 1} className={ 
                         (item.userName === user.userName)? 'message myMessage' :'message'}
                         onClick = {(e) => {

+ 1 - 0
frontend/src/components/chatPage/userInfo/UserInfo.jsx

@@ -46,6 +46,7 @@ export const UserInfo = () => {
 
     let userAvatarUrl = storeUserAvatar || user.avatar;
 
+    console.log(usersOnline)
 
     const inputHandler = (e) => {
         const file = e.target.files[0]

+ 0 - 1
frontend/src/reducers/userDataReducer.js

@@ -26,7 +26,6 @@ export const getUserData = createAsyncThunk(
     'userData/getUser',
      ( t , thunkAPI) => {
       const userData = thunkAPI.getState().userDataReducer;
-      console.log(POST_URL)
         if(userData.userName){
             if(isValidPayload({...userData}) && isValidUserName({...userData}))
                 try {