dtcms插件 IntelliJ IDEA webserver validation networking vuejs2 safari ios7 UIkit Backbonejs vue提交表单 matlab生成对角矩阵 json转object wordpress本地建站 mysql临时表 python中的if语句 python中的循环 搭建java开发环境 java在线课程 java数组删除 java安装教程 java线程死锁 java创建对象 linux系统教程 局域网助手 atq 狮子狗出装 beatedit 刺激战场脚本 图片放大软件 视频加字幕软件 medcalc xmind画流程图 js取余数 cdr字体变形 dos系统下载 透视网格工具怎么取消 directx卸载 lrc软件 win7仿win8主题
当前位置: 首页 > 学习教程  > 编程语言

工作混记(工具、方法篇)

2020/9/19 15:06:30 文章标签:

本文仅用于个人记录工作中的工具、心得

最近开发的是一个桌面级应用,包括了一下功能:
聊天功能:文字、图片、语音(仅接受)、音视频聊天;
涉及工具:输入框为富文本框,使用的是wangEditor,截图使用了node的子进程直接调用QQ的截图.exe;
/**
*截图
*

  • @export
  • @param {any[]} arr
  • @returns
    */
    export function shootScreen() {
    const { resolve } = require(‘path’)
    console.log(__dirname)
    console.log(process.cwd())
    console.log(resolve(’./’))

const execFile = require(‘child_process’).execFile;
let screen_window = execFile(${process.cwd()}\\ff\\PrintScr.exe)
screen_window.on(‘exit’, (code: any) => {
console.log(‘codekkk’, code)
// 执行成功返回 1,返回 0 没有截图
// if (code) mainWindow.webContents.paste()
})
}

注意:打包后需要确保.exe文件存在,文件放在百度wangpan,需要的自提,提取码:ctr8
百度网盘地址

音视频聊天则是通过基于webRTC的PeerJS实现的,主要是通过连接webSocket,通过webSocket中不同的messages判断用户的连接状态;

聊天信息的传递通过mqtt进行通信;本地记录的存储通过使用lowdb(也终于使用了一把class,很爽),贴出来以后自己用,勿喷(祖安人:丶耿耿余淮);

export default class LowdbUtil extends Vue {
  public static ROOT_PATH: any = APP.getAppPath('userData');
  public db: any;
  public static _instance: any = null;

  /**
   * 全局唯一个实例,只能通过该函数访问
   * @returns
   */
  public static getInstance(): LowdbUtil {
    if (!this._instance) {
      this._instance = new LowdbUtil();
    }
    return this._instance;
  }

  public init(userID: number) {
    if (!fs.pathExistsSync(LowdbUtil.ROOT_PATH)) {
      fs.mkdirpSync(LowdbUtil.ROOT_PATH);
    }

    let fileName: string = "db" + userID + ".json";
    if (process.type !== 'renderer') {
      if (!fs.pathExistsSync(LowdbUtil.ROOT_PATH)) {
        fs.mkdirpSync(LowdbUtil.ROOT_PATH);
      }
    }
    const adapter = new FileSync(fileName);
    this.db = low(adapter);
  }

  public getHistoryChatUsers(userList: any[], groupList: any[], userID: number) {
    let fileName: string = "db" + userID + ".json"
    let HistoryChatUsers: any = []
    fs.readFile(fileName, (err: any, data: any) => {
      if (err) throw err;
      let temporaryArr: any[] = Object.keys(JSON.parse(data))
      temporaryArr.forEach(item => {
        var index = item.indexOf("_");
        let itemID = item.substring(index + 1, item.length);
        let itemType = item.substring(0, index)
        HistoryChatUsers.push({ type: itemType, ID: itemID })
      })
      console.log('HistoryChatUsers', HistoryChatUsers)
      this.setHistoryChatObjInfo(userList, groupList, HistoryChatUsers)
    });
  }

  public setHistoryChatObjInfo(userList: any[], groupList: any[], historyChatobjList: any[]) {
    let historyChatObjInfo: any[] = []
    historyChatobjList.forEach(hitem => {
      if (hitem.type == chatObjType.USER && userList.length > 0) {
        userList.forEach(uitem => {
          if (hitem.ID == uitem.ID) {
            historyChatObjInfo.push(uitem)
          }
        })
      } else if (hitem.type == chatObjType.GROUP && groupList.length > 0) {
        groupList.forEach(gitem => {
          if (hitem.ID == gitem.ID) {
            historyChatObjInfo.push(gitem)
          }
        })
      }
    })
    console.log('historyChatObjInfo', historyChatObjInfo)
    // UserModule.initChatUserList(historyChatObjInfo)
  }
  public cacheToDb(relationUserID: string, textChatItemList: TextChatItem[]) {
    if (this.db != undefined) {
      this.db.set(relationUserID, textChatItemList)
        .write()
    }
  }

  public dbToCache(key: string): TextChatItem[] {
    if (this.db != undefined) {
      if (this.db.has(key)
        .value()) {
        let getHistory = this.db
          .read()
          .get(key)
          .value();
        console.log('getHistory', getHistory)
        return getHistory;
      }
    }
    return [];
  }


}


静默下载,废话不多说直接贴代码,electron提供的通信方式和方法。

//下载文件(主进程)
ipcMain.on('to-download', async (evt, url) => {
  let filePath: string = "";
  await win.webContents.downloadURL(url);
  await win.webContents.session.on(
    "will-download",
    (event: any, item: any, webContents: any) => {
      filePath = path.join(
        fileStorePath,
        item.getFilename()
      );
      item.setSavePath(filePath);
      log.info(filePath)
      win.webContents.send('localFile', filePath)
    }
  );
})
//通过主进程和渲染进程进行静默下载
  private async downloadWithoutVoice(msg: any) {
    let fileUrl = `url`
    let fileName = `fileName`
    console.log("fileUrl", fileUrl);
    try {
      await axios.get(fileUrl);
      // 提示下载开始
      // @ts-ignore
      this.$notify({
        type: "success",
        message: this.$t("common.startTheDownloadPleaseWait") as string,
      });
      //静默下载
      await ipcRenderer.send("to-download", fileUrl);
    } catch (error) {
      // @ts-ignore
      this.$notify({
        type: "error",
        message: this.$t(`common.startTheDownloadPleaseWait`) as string,
      });
      return;
    }
  }

本文链接: http://www.dtmao.cc/news_show_200220.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?