CDE 即插即用
ToolTalk 是通用桌面环境 (CDE) 中的一个消息代理系统,它使应用程序能够相互通信,而无需直接了解彼此。客户端和服务器应用程序可以独立开发、混合和匹配以及通过即插即用单独升级。此外,可以调用桌面服务来代表 ToolTalk 对文件和缓冲区对象执行方法。
图 1 显示了 ToolTalk 服务正在监听 TtChmod 客户端请求。ToolTalk 服务将模式匹配的 Chmod 消息代理到已注册的模拟更改模式应用程序服务器 (ttchmodd),该服务器正在等待处理传入的消息。
ToolTalk 将来自客户端的请求代理到服务器应用程序。桌面服务可以将 CDE 对象方法调用转发到 ToolTalk 服务。借助桌面,C 程序和 dtksh 脚本都可以启动传输到 ToolTalk 服务的操作。因此,来自 dtaction 命令行、应用程序管理器图标和文件管理器图标的客户端调用可以通过桌面服务定向到 ToolTalk 应用程序服务。因此,通过首先路由到桌面操作和数据类型服务,可以在文件管理器中双击文件图标来插入 ToolTalk 注册的应用程序。
ToolTalk 消息代理系统的关键在于它能够使用特定操作和参数定义进程类型标识符。在列表 1中,进程类型 (ptype) TtChmod 将执行 ToolTalk 更改模式守护程序应用程序 ttchmodd。当从请求中匹配到会话操作 Chmod 以及文件名和模式参数时,就会发生这种情况。使用 tt_type_comp 实用程序编译 ptype 定义将为 ToolTalk 客户端应用程序注册服务以供调用。将 ptype 视为描述应用程序编程接口 (API) 的 C 头文件,并将编译后的 ToolTalk 服务定义套件视为要调用的方法库。对于已安装的进程类型标识符列表,请尝试在命令行运行 tt_type_comp -P 以将数据库转储到屏幕。
列表 2中描述的文件更改模式应用程序 (ttchmod) 只是 Motif 命令小部件。在图 2 中,ttchmodd 服务器应用程序以图形方式提示用户输入命令,然后调用回调命令 callCB 来执行它;但是,对于此示例,应用程序仅打印命令。当文件更改模式应用程序向 ToolTalk 服务注册自身,然后监听由其 ToolTalkCB 接收器例程处理的消息时,它很快就会变成即插即用服务。

图 2. ttchmodd
应用程序必须首先找到与 X 显示关联的 ToolTalk 会话,才能将自身注册为服务,如列表 3所示。在应用程序将其默认会话设置为显示会话后,应用程序可以将其自身初始化为 ToolTalk 进程并获取 ToolTalk 文件描述符。当 ttchmodd 应用程序获得 ToolTalk 会话的句柄时,它可以注册 TtChmod 进程类型并加入会话以监听请求。
ToolTalk 向注册服务发送消息;该服务在其 ToolTalk 文件描述符上监听输入。当观察到输入时,将触发 ToolTalkCB 例程,并读取和分析消息。(参见列表 4。)检查消息的操作,然后从消息中读取参数。ToolTalk 消息类似于普通 C 程序的命令行参数的可重入版本。ttchmodd 服务在读取消息后不再需要,因此接收者告诉 ToolTalk 服务丢弃该消息。
ttchmod ToolTalk 客户端(参见列表 5)比 ttchmodd ToolTalk 服务器简单得多。客户端打开一个 ToolTalk 进程并找到会话。TtChmod 进程类型消息请求由 Chmod 操作以及文件名和模式输入参数组成。它被发送到 ToolTalk 服务,以便代理到接受 ptype 模式的已注册服务器应用程序。但是,请注意,此示例省略了使用 tt_mark 和 tt_release 进行的错误检查和垃圾回收。
CDE 中的桌面操作数据库描述了应用程序要执行的方法和对象。CDE 的桌面服务可以描述像 DtChmod 这样的操作,如列表 6所示,该操作可以通过 ToolTalk 服务转发到 ttchmodd。如果操作未收到适当的参数,则桌面可以提示用户,如图 3 所示。

图 3. dtaction
桌面操作定义与 CDE 方法的关系类似于 ptype 定义与 ToolTalk 进程的关系。有关桌面操作和数据类型的示例,请在命令行运行 dttypes 以将数据库转储到屏幕。
桌面服务的 API 可以从 C 程序或 dtksh 脚本调用在桌面数据库中注册的操作,如列表 7所示。dtchmod.ds dtksh 脚本会提示用户,并显示消息对话框(如图 4 所示),以在请求更改文件模式之前与用户确认。

图 4. dtchmod
除了从 C 程序和 dtksh shell 脚本调用桌面操作外,用户还可以从命令行启动请求,如此处所示
dtaction DtChmod /etc/motd 644
如果给出适当的参数,则该操作将转发到 ToolTalk;否则,首先会询问用户,如图 3 所示。
我们已经了解了如何使注册到 ToolTalk 的 ttchmodd 服务能够从 ToolTalk 客户端、用 C 或 dtksh 编写的桌面客户端、命令行以及双击文件对象图标接收与 TtChmod ptype 模式匹配的消息。这些示例演示了如何通过即插即用独立开发、混合和匹配以及单独升级客户端和服务器应用程序。注册了 ptype 定义的启用 ToolTalk 的应用程序服务可以在不具体了解其对应方的情况下进行开发。
CDE 定义了一个桌面特定 ToolTalk 进程类型、操作和参数的消息字典,如查看数据库所示。其他服务(如计算机辅助设计 (CAD) 和电子设计自动化 (EDA) 服务)开发了补充字典。您可以使用现有的 ptype 或定义自己的 ptype,但需要了解的重点是如何注册进程类型标识符、操作和参数。
