Forráskód Böngészése

start private messagin function

serg1557733 1 éve
szülő
commit
208dc3fd6e

+ 32 - 4
backend/app.js

@@ -236,19 +236,43 @@ 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)
     }
 
+
+
+
+
+    console.log(users)
+
     io.emit('usersOnline', onUser); // send array online users  
 
     socket.emit('connected', dbUser); //socket.user
@@ -333,10 +357,14 @@ const onUser = []
                 // }
            });
 
-        socket.on('private message', (user) => {
-            console.log(user)
-        
-        })
+        socket.on("private message", ({ user, message, to }) => {
+            console.log(to, user._id, message)
+            socket.to(to).emit("private message", {
+              user,
+              message,
+              from: user.id,
+            });
+          });
 
 
     

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

@@ -4,7 +4,7 @@ import TextareaAutosize from '@mui/material/TextareaAutosize';
 import { MessageForm } from './messageForm/MessegaForm';
 import { UserInfo } from './userInfo/UserInfo';
 import { store } from '../../store';
-import { removeToken, isPrivatChat} from '../../reducers/userDataReducer'
+import { removeToken, isPrivatChat, privateMessage} from '../../reducers/userDataReducer'
 import { useDispatch, useSelector } from 'react-redux';
 import {getSocket} from'../../reducers/socketReducer';
 import { sendMessage, storeMessage, fileMessage } from '../../reducers/messageReducer';
@@ -30,7 +30,7 @@ export const ChatPage = () => {
     const socket = useSelector(state => state.getUserSocketReducer.socket)
     const editOldMessage = useSelector(state => state.messageReducer.editMessage)
     let showUserInfoBox = useSelector(state => state.messageReducer.showUserInfoBox)// || localStorage.getItem('showBox');
-
+    const chatId = useSelector(state => state.userDataReducer.chatId)
     const isPrivatChat = useSelector(state => state.userDataReducer.isPrivatChat)
 
     const [message, setMessage] = useState({message: ''});
@@ -71,14 +71,33 @@ export const ChatPage = () => {
     }
 
 
+
+    const sendPrivateMessage = () => {
+        console.log(message, chatId, socket.id)
+        socket.emit("private message", {
+            user,
+            message: chatId,
+            to: socket.id,
+          })
+    }
+
+
+    
+
+
+
     useEffect(() => {
         if(socket) {
             socket.on('writing', (data) => { 
                     setUserTyping(data) 
                     setTimeout(() => setUserTyping([]), 500 )
                 })  
+            socket.on("private message", ({ content, from }) => {
+                    console.log(content, from)
+                
+                  });
         }
-   }, [socket])
+   }, [])
 
 
     useEffect(() => {
@@ -151,7 +170,7 @@ export const ChatPage = () => {
                         onSubmit = {e  => {
                                         e.preventDefault()
                                         if (message.message.length){
-                                            dispatch(sendMessage({user, socket}))
+                                            isPrivatChat? sendPrivateMessage() : dispatch(sendMessage({user, socket}))
                                             dispatch(getSocket('allmessages'))
                                             dispatch(editMessage({editMessage: ''}))
                                             setMessage({message: ''})

+ 1 - 1
frontend/src/components/chatPage/generalChat/AdminUserInfiButton.jsx

@@ -27,7 +27,7 @@ export const AdminUserInfiButton = ({item, i}) => {
             onClick={() => {
                 console.log(item._id, user._id)
                 store.dispatch(privateMessage({chatId: item._id}))
-                socket.emit('private message', {
+                socket.emit('privat chat', {
                     user,
                     to: item._id,
                     })

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

@@ -24,7 +24,7 @@ export const UserInfoButton = ({item, i}) => {
         onClick={() => {
             console.log(item._id, user._id)
             store.dispatch(privateMessage({chatId: item._id}))
-            socket.emit('private message', {
+            socket.emit('privat chat', {
                 user,
                 to: item._id,
               })

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

@@ -25,6 +25,24 @@ export const PrivateChat = () => {
     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;
+    //       }
+    //     }
+    //   });
+
+
     let endMessages = useRef(null);
     const [isEditing, setIsEditing] = useState(false)   
     const [isEditiedMessage, setIsEditiedMessage] = useState(false) //need to type in the bottom of message after message was edited