ソースを参照

try messageChannel

Michael Wang 3 年 前
コミット
da0391f6eb

+ 3 - 1
.gitignore

@@ -28,4 +28,6 @@ pnpm-debug.log*
 *.sw?
 *.sw?
 
 
 #Electron-builder output
 #Electron-builder output
-/dist_electron
+/dist_electron
+
+oldSrc

+ 11 - 0
src/lib/channel.ts

@@ -0,0 +1,11 @@
+const { MessageChannel } = require("worker_threads");
+
+const { port1, port2 } = new MessageChannel();
+
+export function send(message) {
+  port2.postMessage(message);
+}
+
+export function receiveMessage(cb) {
+  port1.on("message", cb);
+}

+ 28 - 13
src/lib/sync.ts

@@ -1,11 +1,13 @@
 //云端数据同步导本地
 //云端数据同步导本地
 import EventEmitter from "events";
 import EventEmitter from "events";
+// const EventEmitter = require("events");
 import db from "./db";
 import db from "./db";
-import env from "./env";
+// import env from "./env";
 import api from "./api";
 import api from "./api";
 
 
 import _logger from "./logger";
 import _logger from "./logger";
 const logger = _logger("sync.js");
 const logger = _logger("sync.js");
+import { send } from "./channel";
 
 
 export async function queryStudentCount(store) {
 export async function queryStudentCount(store) {
   db.init();
   db.init();
@@ -17,17 +19,22 @@ export async function queryStudentCount(store) {
 }
 }
 
 
 class executor extends EventEmitter {
 class executor extends EventEmitter {
-  async start() {
+  async start(env) {
     try {
     try {
+      console.log(env);
+      send("db on");
       db.init();
       db.init();
+      send("db oned");
 
 
       const totalCount = await api.countStudents(env.examId);
       const totalCount = await api.countStudents(env.examId);
-      logger.info("student count: " + totalCount);
+      // logger.info("student count: " + totalCount);
+      send({ totalCount });
       this.emit("total", totalCount);
       this.emit("total", totalCount);
 
 
       const promises = [];
       const promises = [];
       let count = 0;
       let count = 0;
       let pageNumber = 0;
       let pageNumber = 0;
+      send({ student: 0 });
       this.emit("student", 0);
       this.emit("student", 0);
       while (true) {
       while (true) {
         pageNumber++;
         pageNumber++;
@@ -93,17 +100,19 @@ class executor extends EventEmitter {
         promises.push(
         promises.push(
           new Promise((resolve, reject) => {
           new Promise((resolve, reject) => {
             db.batchQuery(
             db.batchQuery(
-              "replace into eb_exam_student(id, exam_id, school_id\
-                        , exam_number, secret_number, name, student_code, subject_code, subject_name, campus_name\
-                        , package_code, batch_code, sheet_count, slice_count, answers, is_upload\
-                        , is_absent, is_manual_absent, is_breach, is_exception\
-                        , objective_score, subjective_score, objective_score_list, subjective_score_list, subjective_status\
-                        , exam_site, exam_room, remark, college, class_name, teacher, paper_type) \
-                        values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?)",
-              datas
+              "select 1 from eb_exam_student"
+              // "replace into eb_exam_student(id, exam_id, school_id\
+              //           , exam_number, secret_number, name, student_code, subject_code, subject_name, campus_name\
+              //           , package_code, batch_code, sheet_count, slice_count, answers, is_upload\
+              //           , is_absent, is_manual_absent, is_breach, is_exception\
+              //           , objective_score, subjective_score, objective_score_list, subjective_score_list, subjective_status\
+              //           , exam_site, exam_room, remark, college, class_name, teacher, paper_type) \
+              //           values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?)",
+              // datas
             )
             )
               .then(() => {
               .then(() => {
                 count += datas.length;
                 count += datas.length;
+                send({ student: count });
                 this.emit("student", count);
                 this.emit("student", count);
                 resolve();
                 resolve();
               })
               })
@@ -115,6 +124,7 @@ class executor extends EventEmitter {
       }
       }
 
 
       //get and save package
       //get and save package
+      send({ package: 0 });
       this.emit("package", 0);
       this.emit("package", 0);
       const packages = await api.getPackages(env.examId);
       const packages = await api.getPackages(env.examId);
       const packageData = [];
       const packageData = [];
@@ -130,6 +140,7 @@ class executor extends EventEmitter {
             packageData
             packageData
           )
           )
             .then(() => {
             .then(() => {
+              send({ package: packageData.length });
               this.emit("package", packageData.length);
               this.emit("package", packageData.length);
               resolve();
               resolve();
             })
             })
@@ -140,6 +151,7 @@ class executor extends EventEmitter {
       );
       );
 
 
       await Promise.all(promises);
       await Promise.all(promises);
+      send({ finish: true });
       this.emit("finish");
       this.emit("finish");
     } catch (err) {
     } catch (err) {
       this.emit("error", err);
       this.emit("error", err);
@@ -150,6 +162,9 @@ class executor extends EventEmitter {
   }
   }
 }
 }
 
 
-export default function () {
-  return new executor();
+// export const syncer = new executor();
+
+export default function (store) {
+  console.log("objechat");
+  return new executor().start(store.env);
 }
 }

+ 2 - 3
src/preload.ts

@@ -5,6 +5,7 @@ import config from "./lib/config";
 // import api from "./lib/api";
 // import api from "./lib/api";
 import { addWatermark } from "./lib/watermark";
 import { addWatermark } from "./lib/watermark";
 import { queryStudentCount } from "./lib/sync";
 import { queryStudentCount } from "./lib/sync";
+import { receiveMessage } from "./lib/channel";
 
 
 export const electronInWindow = {
 export const electronInWindow = {
   dialog: remote.dialog,
   dialog: remote.dialog,
@@ -13,9 +14,7 @@ export const electronInWindow = {
   // api,
   // api,
   addWatermark,
   addWatermark,
   queryStudentCount,
   queryStudentCount,
-  updateEnv(env) {
-    ipcRenderer.sendSync("update-env", env);
-  },
+  receiveMessage,
 };
 };
 
 
 contextBridge.exposeInMainWorld("electron", electronInWindow);
 contextBridge.exposeInMainWorld("electron", electronInWindow);

+ 8 - 0
src/router/index.ts

@@ -45,6 +45,14 @@ const routes: Array<RouteRecordRaw> = [
     component: () =>
     component: () =>
       import(/* webpackChunkName: "about" */ "../views/features/Sync/Sync.vue"),
       import(/* webpackChunkName: "about" */ "../views/features/Sync/Sync.vue"),
   },
   },
+  {
+    path: "/sync-run",
+    name: "SyncRun",
+    component: () =>
+      import(
+        /* webpackChunkName: "about" */ "../views/features/SyncRun/SyncRun.vue"
+      ),
+  },
 ];
 ];
 
 
 const router = createRouter({
 const router = createRouter({

+ 86 - 0
src/views/features/SyncRun/SyncRun.vue

@@ -0,0 +1,86 @@
+<template>
+  <div class="wp">
+    <div class="wp">
+      <div class="hd">
+        <div class="logo"><img src="img/logo.png" /></div>
+        <span class="y">
+          欢迎您,<span id="user-name"></span> <span class="pipe">|</span
+          ><a href="##">退出</a>
+        </span>
+      </div>
+      <div class="cont">
+        <div class="title title_grey cl">
+          <h2>数据同步中 …</h2>
+        </div>
+        <div class="progress-box">
+          <h3 id="message">正在下载考生...</h3>
+          <div class="progress">
+            <div class="progress-outer">
+              <div id="progress" class="progress-inner" style="width: 0%">
+                <span class="progress-text"></span>
+              </div>
+            </div>
+          </div>
+          <p>
+            已数据同步考生:<b id="finish-count"></b> / 全部考生:<b
+              id="total-count"
+            ></b>
+          </p>
+        </div>
+      </div>
+      <div class="ft">
+        Copyright © 2011-2020 www.qmth.com.cn, All Rights Reserved
+      </div>
+    </div>
+    <div class="xcConfirm" id="popup" style="display: none">
+      <div class="xc_layer"></div>
+      <div class="popbox">
+        <a href="##" id="popup-close"><span class="close"></span></a>
+        <div class="txtbox">
+          <div id="popup-error" class="icon error" style="display: none"></div>
+          <div
+            id="popup-success"
+            class="icon success"
+            style="display: none"
+          ></div>
+          <div id="popup-text" class="text"></div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { store } from "@/store";
+import { computed, onMounted, ref } from "vue";
+import router from "@/router";
+import { getStudents, countStudents } from "@/api/api";
+import { httpApp } from "@/plugins/axiosApp";
+
+const lastTime =
+  store.config["syncTime"][store.env.server.host + store.env.exam.id];
+
+let studentCount = ref(0);
+onMounted(async () => {
+  const studentCountRes = await window.electron.queryStudentCount(
+    JSON.parse(JSON.stringify(store))
+  );
+  console.log(studentCountRes);
+  studentCount.value = studentCountRes;
+
+  console.log("waiting ipcMain");
+  window.electron.updateSyncRun((event) => {
+    console.log(event);
+  });
+});
+window.electron.receiveMessage((msg) => {
+  console.log(msg);
+});
+console.log(window.electron.syncer);
+const _sync = window.electron.syncer;
+console.log(_sync);
+console.log(window.electron.dialog);
+window.electron.syncer(JSON.parse(JSON.stringify(store)));
+// _sync.on("total", (c) => console.log(c));
+// _sync.start();
+</script>

BIN
src/views/features/SyncRun/img/logo.png


BIN
src/views/features/SyncRun/img/logo_blue.png