diff --git a/backend/package.json b/backend/package.json index 1e5bd13..d8bffa5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -17,6 +17,7 @@ "license": "MIT", "dependencies": { "@sentry/node": "^5.29.2", + "@socket.io/redis-adapter": "^7.2.0", "@types/fluent-ffmpeg": "^2.1.21", "@types/pino": "^6.3.4", "axios": "^1.2.3", @@ -41,12 +42,13 @@ "pino": "^6.9.0", "pino-pretty": "^9.1.1", "qrcode-terminal": "^0.12.0", + "redis": "^4.6.13", "reflect-metadata": "^0.1.13", "sequelize": "^5.22.3", "sequelize-cli": "^5.5.1", "sequelize-typescript": "^1.1.0", "sharp": "^0.32.5", - "socket.io": "^3.0.5", + "socket.io": "^4.7.5", "socket.io-client": "^4.5.4", "uuid": "^8.3.2", "whatsapp-web.js": "github:pedroslopez/whatsapp-web.js", diff --git a/backend/src/helpers/SchedulingNotifySendMessage.ts b/backend/src/helpers/SchedulingNotifySendMessage.ts index 01f1c0b..d75a903 100644 --- a/backend/src/helpers/SchedulingNotifySendMessage.ts +++ b/backend/src/helpers/SchedulingNotifySendMessage.ts @@ -104,16 +104,16 @@ const monitor = async () => { stdout = stdout[1].trim().split(/\s+/); // DISK SPACE MONITORING - const io = getIO(); - io.emit("diskSpaceMonit", { - action: "update", - diskSpace: { - size: stdout[1], - used: stdout[2], - available: stdout[3], - use: stdout[4] - } - }); + // const io = getIO(); + // io.emit("diskSpaceMonit", { + // action: "update", + // diskSpace: { + // size: stdout[1], + // used: stdout[2], + // available: stdout[3], + // use: stdout[4] + // } + // }); let data: any = {}; diff --git a/backend/src/libs/socket.ts b/backend/src/libs/socket.ts index 65382d6..8412760 100644 --- a/backend/src/libs/socket.ts +++ b/backend/src/libs/socket.ts @@ -3,6 +3,9 @@ import { Server } from "http"; import AppError from "../errors/AppError"; import { logger } from "../utils/logger"; +import { createAdapter } from "@socket.io/redis-adapter"; +import { createClient } from 'redis'; + import { v4 as uuidv4 } from "uuid"; import ListUserParamiterService from "../services/UserServices/ListUserParamiterService"; import { @@ -27,6 +30,7 @@ import { } from "../services/WbotServices/wbotMessageListener"; import { join } from "path"; import Whatsapp from "../models/Whatsapp"; +import { get } from "../helpers/RedisClient" let count: number = 0; let listOnline: any[] = []; @@ -42,16 +46,32 @@ let dateTime = splitDateTime( new Date(format(new Date(), "yyyy-MM-dd HH:mm:ss", { locale: ptBR })) ); -export const initIO = (httpServer: Server): SocketIO => { + +const pubClient = createClient({ url: 'redis://172.31.187.29:6379' }); +const subClient = pubClient.duplicate(); + + +pubClient.connect().catch(console.error); +subClient.connect().catch(console.error); + + +export const initIO = (httpServer: Server): SocketIO => { + io = new SocketIO(httpServer, { cors: { - origin: process.env.FRONTEND_URL + origin: "*", + allowedHeaders: ["my-custom-header"], + credentials: true }, - maxHttpBufferSize: 1e8 - }); + maxHttpBufferSize: 1e8, + pingInterval: 25000, + pingTimeout: 60000, + adapter: createAdapter(pubClient, subClient) + }); + io.on("connection", socket => { - logger.info("Client Connected"); + logger.info("Client Connected"); socket.on("joinWhatsSession", (whatsappId: string) => { logger.info(`A client joined a joinWhatsSession channel: ${whatsappId}`); @@ -107,6 +127,7 @@ export const initIO = (httpServer: Server): SocketIO => { socket.on("online", (userId: any) => { // console.log('userId: ', userId) + return obj.uuid = uuidv4(); if (userId.logoutUserId) { @@ -233,13 +254,18 @@ export const initIO = (httpServer: Server): SocketIO => { if (rooms && rooms.size == 2 && ![...rooms][1].startsWith("session_")) return; - let whatsappIds: any = await Whatsapp.findAll({ - attributes: ["id"], - raw: true + let whatsappIds = await get({ + key: "whatsapp:*", + parse: true }); + // let whatsappIds: any = await Whatsapp.findAll({ + // attributes: ["id"], + // raw: true + // }); + if (whatsappIds && whatsappIds.length > 0) { - whatsappIds = whatsappIds.map((e: any) => `${e.id}`); + // whatsappIds = whatsappIds.map((e: any) => `${e.id}`); console.log( "whatsappIds whatsappIds whatsappIds whatsappIds whatsappIds: ", diff --git a/frontend/package.json b/frontend/package.json index 681cd4b..d30e4f4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -43,7 +43,7 @@ "yup": "^0.32.8" }, "scripts": { - "start": "react-scripts start", + "start": "PORT=3331 react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" diff --git a/frontend/server.js b/frontend/server.js index a05ba32..ff983c1 100644 --- a/frontend/server.js +++ b/frontend/server.js @@ -6,4 +6,4 @@ app.use(express.static(path.join(__dirname, "build"))); app.get("/*", function (req, res) { res.sendFile(path.join(__dirname, "build", "index.html")); }); -app.listen(3333); +app.listen(3331); diff --git a/frontend/src/components/MessagesList/index.js b/frontend/src/components/MessagesList/index.js index b5c071b..8773cc1 100644 --- a/frontend/src/components/MessagesList/index.js +++ b/frontend/src/components/MessagesList/index.js @@ -450,16 +450,16 @@ const MessagesList = ({ ticketId, isGroup }) => { socket.on("connect", onConnectMessagesList) - onAppMessageMessagesList = (data) => { + const onAppMessageMessagesList = (data) => { - if (data.action === "create" && data.ticket.id === ticketId) { + if (data.action === "create") { dispatch({ type: "ADD_MESSAGE", payload: data.message }) scrollToBottom() } - if (data.action === "update" && data.ticket.id === ticketId) { + if (data.action === "update") { dispatch({ type: "UPDATE_MESSAGE", payload: data.message }) } } @@ -960,4 +960,4 @@ const MessagesList = ({ ticketId, isGroup }) => { ) } -export default MessagesList \ No newline at end of file +export default MessagesList diff --git a/frontend/src/services/api.js b/frontend/src/services/api.js index 209fc12..116eac5 100644 --- a/frontend/src/services/api.js +++ b/frontend/src/services/api.js @@ -1,7 +1,7 @@ import axios from "axios"; const api = axios.create({ - baseURL: process.env.REACT_APP_BACKEND_URL, + baseURL: process.env.REACT_APP_BACKEND_URL + "/api", withCredentials: true, }); diff --git a/frontend/src/services/socket.js b/frontend/src/services/socket.js index a458f57..e0b4950 100644 --- a/frontend/src/services/socket.js +++ b/frontend/src/services/socket.js @@ -3,4 +3,11 @@ import { io } from 'socket.io-client'; // "undefined" means the URL will be computed from the `window.location` object const URL = process.env.REACT_APP_BACKEND_URL -export const socket = io(URL); \ No newline at end of file +export const socket = io(URL, { + path: "/api-ws/socketio", + withCredentials: true, + extraHeaders: { + "my-custom-header": "abcd" + }, + // transports: ['websocket', 'polling'] +}); \ No newline at end of file