美文网首页Electron 开发实战
Electron开发实战之15-webwxapi-03

Electron开发实战之15-webwxapi-03

作者: 1bdd9a4a74a2 | 来源:发表于2018-08-02 14:04 被阅读76次

    源码 j相关视频

    微信网页版 守护进程

    一、index_f5ac071.js中的API:

    API

    二、我们的应用使用了API中的12个:(下图列出了9个)

    请求资源列表

    登录 Login

    1. jslogin
    2. login

    守护进程 Daemon

    1. webwxnewloginpage
    2. webwxinit
    3. webwxstatusnotify
    4. webwxgetcontact
    5. webwxbatchgetcontact
    6. synccheck
    7. webwxsync

    还有发送消息的3个API

    • webwxsendmsg
    • webwxuploadmedia
    • webwxsendmsgimg

    三、Daemon 流程

    本节就不详细分析源码了,在后面章节写api代码时,如果有需要再具体问题具体分析。
    有兴趣的同学请自行分析。有问题或者有更好的方法请给我留言交流,共同进步。

    synccheck: 循环(重点)

    在上面的资源列表图中可以看到(注意看最下面三行),和上节登录流程中的 login一样,浏览器每间隔25秒左右就请求一次 synccheck
    如果它的返回值不是 window.synccheck={retcode:"0",selector:"0"}
    就会触发 webwxsync来修改 SyncKey, 做为下一次向微信服务器请求的凭据

    window.synccheck.retcode 可能会有的值为:

    • '1100': 登出微信(可能)
    • '1101': 其他设备登录web微信(可能)
    • '1102': (暂时不知道)

    这些情况导致 window.synccheck.selector 不为 '0':

    • webwxgetcontact
    • webwxbatchgetcontact
    • webwxsendmsg
    • webwxsendmsgimg
    • (不全,还有其它待补充)

    伪代码

    • something.js
    
    // 待办事项队列 先进先出 push shift
    let todoList = []
    
    const methods = {
      webwxgetcontact () {},
      webwxbatchgetcontact () {},
      webwxsendmsg () {},
      webwxsendmsgimg () {}
    }
    
    module.exports = {
      do () {
        if (todoList.length > 0) {
          const { method } = todoList.shift()
          methods[method]()
        }
      },
    
      add (method) {
        todoList.push({ method })
      }
    }
    
    
    • daemon.js
    
    const something = require('./something.js')
    
    const init = () => {
      webwxnewloginpage()
      webwxinit()
    }
    
    const daemon = {
      start () {
        // 初始化
        init ()
    
        // 通知手机
        webwxstatusnotify()
    
        something.add('webwxgetcontact')
    
        while (true) {
          // 循环请求 synccheck
          const checked = synccheck()
    
          if (!checked) {
            // 如果需要就调用 webwxsync
            webwxsync()
          }
    
          something.do()
        }
      }
    }
    
    
    • 如果要发送文本消息就调用 something.add('webwxsendmsg')
    • 如果要发送图片消息就调用 something.add('webwxsendmsgimg')

    Daemon流程图

    守护进程

    上一节 Electron开发实战之14-webwxapi-02
    目录
    下一节 Electron开发实战之16-eslint and jest

    相关文章

      网友评论

        本文标题:Electron开发实战之15-webwxapi-03

        本文链接:https://www.haomeiwen.com/subject/dxejvftx.html