如何通过打开我的App的两个实例来解决此问题?

时间:2019-01-24 09:37:50

标签: javascript electron

所以基本上我有一个连接到服务器的电子通讯应用程序。当您从应用发送消息时,服务器会在该消息上接听并将其发送给每个其他已连接的客户端。现在进行测试,我至少需要打开我的Messenger应用程序中的两个,看看其他客户端是否收到了它,但是它似乎无法正常工作。其中一个较慢,根本不像另一个。为了加快开发速度,我做到了使应用程序在启动时自动登录,但在第二种情况下,即使我在同一目录中同时打开了两个Powershell,它也不会自动登录。第二个需要更长的时间加载,开始时会有一个较长的白屏,需要几秒钟的加载时间。

Long White Screen at the Start for about 5 seconds

我尝试将项目文件复制到另一个目录中,并在其中启动一个powershell,然后在原始位置中启动另一个,但它们产生的结果就像它们都在同一目录中一样。

我希望我的Messenger的两个实例能够彼此打开,但是似乎总是比较慢并且加载不正确

main.js

// Variables //

var electron = require("electron");
var url = require("url");
var path = require("path");
var electronLocalshortcut = require("electron-localshortcut");
var app = electron.app;
var BrowserWindow = electron.BrowserWindow;
var Menu = electron.Menu;
var ipcMain = electron.ipcMain;
var autoUpdater = require("electron-updater").autoUpdater;

var mainWindow;
var devMode = true;
var crypto = require('crypto');

// Listen for the App Ready //

app.on("ready", function () {

  // Create New Window 603 x 424//
  mainWindow = new BrowserWindow({
    frame: false,
    icon: path.join(__dirname, "vimlogo.png"),
    width: 700,
    height: 700,
    center: true
  });

  // Load HTML into the Window //
  mainWindow.loadURL(
    url.format({
      pathname: path.join(__dirname, "index.html"),
      protocol: "file:",
      slashes: true
    })
  );

  mainWindow.webContents.on('did-finish-load', function () {
    if (devMode) {
      mainWindow.webContents.send('update-not-available');
      mainWindow.webContents.send('autologin');
    }
  });

  if (!devMode) {
    autoUpdater.checkForUpdates();
  }

  winsize = mainWindow.getPosition();

  // Clear Menu //

  var mainMenu = null;
  Menu.setApplicationMenu(mainMenu);

  ipcMain.on("maximize", function (e) {
    if (!mainWindow.isMaximized()) {
      winpos = mainWindow.getPosition();
      winsize = mainWindow.getSize();
      mainWindow.maximize();
    }
  });

  ipcMain.on("publicKey", function (e, data) {
    var publicKey = data.publicKey;
    var key = data.key;
    var keyString = crypto.publicEncrypt(publicKey, new Buffer.from('key')).toString("base64");
    key = crypto.publicEncrypt(publicKey, new Buffer.from(key)).toString("base64");
    mainWindow.webContents.send('publicKeyEncrypted', {
      keyString: keyString,
      key: key
    });
  });

  electronLocalshortcut.register(mainWindow, "Ctrl+R", function () {
    mainWindow.reload();
  });

  electronLocalshortcut.register(mainWindow, "Ctrl+Q", function () {
    mainWindow = null;
    app.quit();
  });

  electronLocalshortcut.register(mainWindow, "Ctrl+Shift+I", function () {
    mainWindow.webContents.openDevTools();
  });

  autoUpdater.on('update-available', function () {
    console.log('Update Available');
    mainWindow.webContents.send('update-available');
  });

  autoUpdater.on('update-not-available', function () {
    console.log('Update Not Available');
    mainWindow.webContents.send('update-not-available');
  });

  autoUpdater.on('download-progress', function (progressObj) {
    mainWindow.webContents.send('download-progress', progressObj);
  });

  autoUpdater.on("update-downloaded", function (info) {
    autoUpdater.quitAndInstall();
  });

  autoUpdater.on('error', function (message) {
    console.error('There was a problem updating the application');
    console.error(message);
  });

});

0 个答案:

没有答案