zhaosen 发表于 2005-4-22 11:56:44

Eva 软件程序结构说明(yunfan发的文档)

这是yunfan写的,我在论坛贴出来,方便一下 :D

我觉得目前有必要先总结一些文档类的东西,以便于大家协同分工,集思广益优化Eva 的程序结构。把Eva 做得更出色。我会尽快把Eva 程序的结构,大致组成,以及中间比较重要的类和方法做一些详细的说明。 也十分欢迎大家提出自己的意见。

1、Eva的结构概述
Eva可以大致分为4 部分:

1. LIBEVA部分:
这部分完成了对腾讯服务器发来的加密数据的解密和客户端明文数据的封装以及加密的任务。这部分程序全部使用标准C++语言实现。

2. API部分:
这部分提供了所有非用户图形界面的支持类, 其中包括基于Qt 的网络连接的实现,包括UDP 通讯,TCP 通讯,HTTP 代理的实现。 还有资源的载入,存储。以及,一些常用的方法,像一些html 的解析,图象的缩放,用户/系统资料的存储,查询等等。这部分程序使用Qt封装过的跨平台的C++语言实现。

3. Ui部分:
这部分实现的Eva 的用户图形界面,所有用户看到的窗口,鼠标,键盘的行为都在这部分来实现。 这部分程序使用了Qt,以及KDE 提供的丰富的类库来实现。

4. 主程序部分:
主程序部分是控制程序流程,实现人机互动。其中包括了主流程实现部分,和聊天窗口的管理部分。

2、Eva 各个部分之间的关系

http://www.linuxfans.org/nuke/modules/Forums/files/eva_107.png

      接收消息流程:API 的网络部分接收到数据后,会根据数据的类型调用LIBEVA 中相应的类来解密成明文数据并封装成程序可识别的格式, 然后,这个数据会返回给API, API 再通知主程序,由主程序控制相应的界面做出反应, 或者API 直接通知相应界面做出反应。

    发送消息流程:用户通过图形界面输入或者发出一个请求, 这个请求会发给Eva主程序,Eva 主程序会通知相应的界面做出反应后,通知API部分。如果这个请求不需要额外的反应,那么UI 会直接通知API 部分。 由API部分调用LIBEVA 中相应的类来封装并且加密数据,最后由API部分发送至腾讯的服务器。

sjinny 发表于 2005-4-22 12:17:05

恩……有个想法,不知道能不能通过管道之类的进程间通信方法来提供一个渠道,让其他程序也能和eva通信,并且进行一些操作,也许这样能够便于整合。

yunfan 发表于 2005-4-22 12:55:26

呵呵,多谢楼主zhaosen, 辛苦了。


to sjinny
你说的整合,是指什么, 让其它程序和eva通讯,这个是要实现什么功能? 聊天机器人?

如果要支持这样的功能, 是否让eva开一个专门的端口来进行通讯就可以实现? 其它程序可以通过向本机的这个端口发送指令和数据来控制,和接收eva的数据或者行为?

bamfox 发表于 2005-4-24 18:11:03

请版面管理人员加精华哦 :idea:

sjinny 发表于 2005-4-24 18:37:05


如果要支持这样的功能, 是否让eva开一个专门的端口来进行通讯就可以实现? 其它程序可以通过向本机的这个端口发送指令和数据来控制,和接收eva的数据或者行为?

就是这样,本来我一开始想到的是做成C/S结构的,不过一想没这必要,只要通过进程间通信机制就可以了。
整合的一个例子就是,一个程序可以通过eva来向某个qq号的用户发消息……甚至通过qq发短信……那么比如说……系统某个关键进程崩溃了之后一个监控进程就会通过eva向系统管理员的qq号里发消息,或者要是很严重的话就向管理员绑定的手机上发短信,然后管理员可以通过qq消息或移动qq(用手机发消息)发命令给这个检测进程以进行紧急远程维护什么……
或者是我把宿舍里的电脑开着下载电影,然后电影下载好了之后就发短信告诉我一声……
或者我把电脑开着一直联网,然后我可以通过移动qq用手机给我的电脑发命令进行远程遥控……
或者用电脑+摄像头对某个位置进行监控(我记得有这个软件的),如果发现了异常就立即发短信给我的手机……
当然这些监控进程最好使用专门申请的qq号……

其实最理想的就是做一个信息中心,负责整个系统里的一切信息传递……然后用户只需要像连接管道一样进行配置,就可以实现整合……

nethitler 发表于 2005-4-26 15:57:26


如果要支持这样的功能, 是否让eva开一个专门的端口来进行通讯就可以实现? 其它程序可以通过向本机的这个端口发送指令和数据来控制,和接收eva的数据或者行为?

就是这样,本来我一开始想到的是做成C/S结构的,不过一想没这必要,只要通过进程间通信机制就可以了。
整合的一个例子就是,一个程序可以通过eva来向某个qq号的用户发消息……甚至通过qq发短信……那么比如说……系统某个关键进程崩溃了之后一个监控进程就会通过eva向系统管理员的qq号里发消息,或者要是很严重的话就向管理员绑定的手机上发短信,然后管理员可以通过qq消息或移动qq(用手机发消息)发命令给这个检测进程以进行紧急远程维护什么……
或者是我把宿舍里的电脑开着下载电影,然后电影下载好了之后就发短信告诉我一声……
或者我把电脑开着一直联网,然后我可以通过移动qq用手机给我的电脑发命令进行远程遥控……
或者用电脑+摄像头对某个位置进行监控(我记得有这个软件的),如果发现了异常就立即发短信给我的手机……
当然这些监控进程最好使用专门申请的qq号……

其实最理想的就是做一个信息中心,负责整个系统里的一切信息传递……然后用户只需要像连接管道一样进行配置,就可以实现整合……

支持一个,这个想法不错
实现起来应该也不是很难,关键应该只是qq的协议吧,涉及到的方面多点而已
如果作成了,相信这个比win下的qq还有优势了 呵呵

ajinn 发表于 2005-4-26 17:06:01

需要eva更多的文档资料,单代码的话不好协作,最好给出类图和对象图,
试试软件工程的做法。

zhangweizj 发表于 2005-4-26 17:32:52

感觉EVA只针对KDE,这样对Gnome的用户好象有点残酷

liuspider 发表于 2005-4-26 20:37:14

使用 dcop 就可以支持进程间通讯了

mandrakechina 发表于 2005-4-26 22:26:06

添加dcop功能有点不实际,一个IM客户端不会需要与其它程序的互操作。

小锁 发表于 2005-4-26 23:47:50

libeva好象不是基于qt或者kde的吧,所以可以用gtk来开发界面啊。
BTW:yunfan的这个结构好象不是分层的啊。

sjinny 发表于 2005-4-27 07:42:15

我想可以考虑建立一种机制,让IM不仅充当用户的通信客户端,同时也能充当其他程序的通信客户端,那样可以基于qq建立一些简单的网络应用……

liuspider 发表于 2005-4-27 08:49:28

添加dcop功能有点不实际,一个IM客户端不会需要与其它程序的互操作。
Please try kopete: start it, then open kdcop, look at what kopete provides

On the other hand, dcop is a built-in feature of KApplication, so what you need is only to define some useful function for others to call

skim will have more (full) dcop support in 1.4.0

in general, every app should provide a mechanism to cope with others: you write a script to automate some tasks :)

yunfan 发表于 2005-4-27 08:55:59

libeva好象不是基于qt或者kde的吧,所以可以用gtk来开发界面啊。
BTW:yunfan的这个结构好象不是分层的啊。

你说的分层是指什么? 我个人理解,程序是来完成一个任务的, 最重要的是完成了这个任务, 一个结构只要可以完成这个任务就可以了。 考虑到诸多因素, 这是我目前实现的结构, 也利于分工吧。

你觉得这个结构有什么问题么? 说说看。 :D

applepie 发表于 2005-4-30 07:56:04

进来随便说说
我部分同意sjinny的想法 eva最好有一个不依赖于qt的lib 方便其他程序使用
比如把eva做成一个cgi 放在服务器上 用手机的wap上qq聊天 我觉得这一功能还是值得实现的
但对于c/s的结构我觉的不是必要的
页: [1] 2
查看完整版本: Eva 软件程序结构说明(yunfan发的文档)