IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    avbot 结构解释

    microcai (microcaicai@gmail.com)发表于 2013-04-28 00:00:00
    love 0

    avbot 由 4 大部分构成 libavbot libavlog botctl avbotrpc

       +----------+            +----------+        +----------+
       | libavlog |            | libavbot | ---+---| libwebqq |
       +----------+\         / +----------+    |   +----------+
                     main.cpp                  |   
       +----------+/         \ +----------+    |   +----------+
       |  botctl  |           \| avbotrpc |    +---| libxmpp  |  
       +----------+            +----------+    |   +----------+
                                               |
                                               |   +----------+
                                               +---+  libirc  |
                                               |   +----------+
                                               |
                                               |   +------------------+
                                               +---+  libmailexchange |
                                                   +------------------+
    

    中间由 main.cpp 作为胶水粘合。


    libavlog 的任务是生成日志文件,botctl 的用处是实现 .qqbot 控制指令。 avbotrcp 用于实现 JSON-RPC

    libavbot 则是核心功能。


    libavbot 由 libwebqq libirc libxmpp libmailexchange 4个子协议组成。

    libmailexchange 同时又分 libsmtp libpop3 和 libInternetMailForamt 3个小模块。


    衔接 libavlog botctl avbotrpc 和 libavbot 的东西就是 class avbot 的一个成员 on_message.

    在 main.cpp 里,包含了 mybot.on_message.connect(XXX) 调用,将 avbot 和 其他3 个模块衔接起来。

      // 记录到日志.
      mybot.on_message.connect(boost::bind(avbot_log, _1, boost::ref(mybot)));
      // 开启 bot 控制.
      mybot.on_message.connect(boost::bind(my_on_bot_command, _1, boost::ref(mybot)));
    

    以及

    static void avbot_rpc_server(boost::shared_ptr<boost::asio::ip::tcp::socket> m_socket, avbot & mybot)
    {
        detail::avbot_rpc_server(m_socket, mybot.on_message);
    }
    

    on_message 是一个 boost::signals , 每当 QQ/IRC/XMPP/pop3 收到消息的时候就发起这个信号。libavlog 解析这个信号,然后将消息写入日志。avbotrpc 解析这个信号,然后返回给调用者。botctl 解析这个信号,提取其中的消息,识别其中的命令,然后写入日志文件。

    libavbot 则实现了消息转发和群组功能。libavbot 并不藉由自己全部实现协议,而是交给了 libwebqq libirc libmailexchange 和 libxmpp 4 个协议库去实现协议。

    libwebqq 从 pidgin-lwqq 项目借用了大量的代码,然后将其从 C 语言改写为安全的 Boost 形式。使用了 avhttp 这个 avplayer 社区发起的 HTTP 库进行Web访问。

    libirc 由 “猫” 贡献,非常的简单。

    libxmpp 是 gloox 的一层包装。将 gloox 包装为融入 Boost.Asio 中。而无需另外的线程跑其EventLoop。libxmpp 使用了一些Hack技巧将 gloox 改造为了 可以使用 Boost.Asio.

    libmailexchange 包含了 libInternetMailForamt 库用于解析复杂的 Internet Mail Foramt, 以及两个小库用户执行 POP3 接收和 SMTP 发送。



沪ICP备19023445号-2号
友情链接