Browse Source

feat: 接入uid

banxia 1 month ago
parent
commit
44a5fac5dd

+ 24 - 0
electron/main/ipcMain.ts

@@ -1,4 +1,5 @@
 import { ipcMain } from "electron";
+import { socket } from "./tray";
 import {
   hideMainWin,
   isMaximized,
@@ -8,6 +9,8 @@ import {
   middleMainWin,
 } from "../win/mainWin";
 
+let hasEmittedUid = false;
+
 export const initIpcMain = () => {
   // 获取当前窗口
   // callback(BrowserWindow.fromWebContents(e.sender), e, ...par)
@@ -33,4 +36,25 @@ export const initIpcMain = () => {
     return obj;
   });
   handle("middle", () => middleMainWin());
+
+  ipcMain.on("login-uid", (event, uid) => {
+    if (hasEmittedUid) {
+      console.log("Uid already emitted, skipping...");
+      return;
+    }
+
+    console.log("Received uid in main process:", uid);
+    if (socket && socket.connected) {
+      socket.emit("login", Number(uid));
+      hasEmittedUid = true;
+      console.log("Socket login with uid:", uid);
+    } else {
+      console.warn("Socket not connected when trying to send uid");
+    }
+  });
+
+  // 添加重置状态的处理
+  socket?.on("disconnect", () => {
+    hasEmittedUid = false; // socket断开连接时重置状态
+  });
 };

+ 7 - 4
electron/main/tray.ts

@@ -6,6 +6,8 @@ import log from "electron-log/main";
 import { handeGet, handeSet } from "./store";
 import io from "socket.io-client";
 
+export let socket: any = null;
+
 export const initTray = () => {
   const handlePath = (icon: string) => {
     return url ? path.join(PUBLIC!, icon) : path.join(DIST, icon);
@@ -54,16 +56,17 @@ export const initTray = () => {
 
   // 服务端地址
   const SOCKET_URL = "http://114.215.252.134:2120";
-  const socket = io(SOCKET_URL, {
+  socket = io(SOCKET_URL, {
     reconnection: true,
     reconnectionDelay: 1000,
     timeout: 20000,
   });
-  // socket连接后以uid登录
+
+  // socket连接后等待 uid
   socket.on("connect", function () {
-    console.log("Connected via CDN ES6");
-    socket.emit("login", 123);
+    console.log("Socket connected, waiting for uid...");
   });
+
   // 后端推送来消息时
   socket.on("new_msg", function (msg) {
     const fixedData = msg.replace(/"/g, '"');

+ 1 - 0
electron/preload/electronAPI.ts

@@ -14,5 +14,6 @@ contextBridge.exposeInMainWorld("electronAPI", {
     ipcRenderer.on("new-notification", (event, data) => callback(data)),
   removeNotificationListener: () =>
     ipcRenderer.removeAllListeners("new-notification"),
+  sendUidToMain: (uid: number) => ipcRenderer.send("login-uid", uid),
   // ...sqlitePreload,
 });

+ 5 - 1
src/pages/login/login.tsx

@@ -75,7 +75,11 @@ export default function LoginPage() {
       const responseData = response.data;
 
       if (responseData.code === 200) {
-        storage.setItem(STORAGE_UID, JSON.stringify(responseData.data.id));
+        const uid = responseData.data.id;
+        storage.setItem(STORAGE_UID, uid);
+
+        window.electronAPI.sendUidToMain(Number(uid));
+        console.log("Sent uid to main process:", uid);
 
         // 2. 处理记住密码功能
         if (remember) {

+ 3 - 0
src/router/beforeEnter.tsx

@@ -61,6 +61,9 @@ const BeforeEnter = ({ routers }) => {
   const { pathname } = location;
   const findRoute = fineRouter(routers, pathname);
   const uid = storage.getItem(STORAGE_UID);
+  if (uid) {
+    window.electronAPI.sendUidToMain(Number(uid));
+  }
 
   // 如果是登录页或未登录,不显示Header
   const showHeader = uid && findRoute?.path !== "/login";