You are on page 1of 6

反 应 器在 协 同 中的 应 用
’ ’ ’
朱恩霞 窦万 峰 ,2
钟 金
.

(1 南京 师 范大 学 数 学 与计算机科 学学 院 计 算 机 科学 系 江苏 南京 9 7)
1 00
2
.

(2 南 京大学计 算 机软件新技 术 国家 重点实 验 室 江苏 南京 2 10 0 9


3 )
a
( ez x
- b by 7 5 @ s i n 二 eo m )

O j
b
ec
tA ( 以 下 简称 A R X ) 中的反 应 器是 协 同 图形 编 辑 系统 与 A u t创 C A D 应 用 软件 之 间 交互
xR ,

本 文讨 论 了反应 器在协 同 A u t0 C A D 系统 的应 用 中出现 的一 系列 问题 并给 出 了解决 这些 问题

协 同 图形 编辑 ; A u to C A D ; A RX 反应 器 ; 数据 库反 应 器 ; 对 象反应 器 ; 编 辑 器 反应 器

e e a o a e c t A R X in C a to C A D
Th A P P il it o n f ct o
sr o f O j
b o l b o
ar ivt
e A u
eR
Zh u E

a , n o u
W an g fe 吧 ,夕 Z h o 雌 Ji n g

D e P别 巾 nr
.

U n iv
,
C o ll e g e
,
e o u te r s eie e m at i e s
(1 nt f C o
P
m n e o fM hat an d C o m P u tre S e i e n e e, N anj in g N o
rm al esr i t,y
n
nj i g 2 l
Na 0() 9 7
C h in a
)
.
,

(2 S ta te e
K y La
b o
art o ry of r N o v e l So c h n o 1o
nj i g Z 1 0 0 9 3 P R C h i
g另 N a n n
a)
ft are
W eT

A bs ta
r e t: Th
e er aC t o r
in O b e c
tA R X ( A b b er v
iat e
d A Rx be l a i m p 0 rt na
) is n te o ot o lb
e
ut0 CA D a eo l lat 力 r at
j
lv e g aP h i es e d it se
t s
.

is Pa
ow
r
m ia n
l y d i sc u ses a se
mir un i catif
es o
g
n
le m s
t
w en
A n d ing sy m hT pe s P
obr d iu
r g
n
, .

叩 p li e iat o
ns o
a to
f t h e re C r
in
het
eo
ll a
b o
iart ve A u to C A D na d g i ves m
het do
s ot er s o lv e ht es e
P or b l e m s

朗 t o sr ; O b
s :
o ra n u t O C A D ; R e 朗 t o sr e
心 y W 6 dr ;g A f A R X ; D al at b as R eC
a t o sr ;
C of lb t e ih es it o
a iv G
arP dE eR j cet
it
o r
C
a t o sr
E
d eR
.

1 引言
,

计 算机支持 的 分布式协 同设计 川 是一 种 新兴 的产 品设计方式 基 于 A u tO C 应 用 软件 的 网络化协 同



A
D ,

图形 编辑系统 是协 同设计 的一 个具体 应用 在本文讨论 的协 同 图形 编辑系 统 中 是利 用 现有的单 机单用


, ,

户 的 A u t O C A D 图形 编辑器 及其提供 的各 种编程 工 具与接 口 基于 单个 操作对 象作 为 传输信 息 来 实现


。 ,

网络 协 同 功 能冈 因 为网 络上 传递的 数 据是 A u t o C A D 内部数据 库 的 实体信息 而 不 是整 幅 图形的传 递和


, 。 。

刷新 具 有 直接性 和 快速性的特 点 本 文提 出 了一 个 新的方案 来避免 对整 个 A t创 C A D 进行 二 次开发


u

它利用 A RX 来单独 开发 满足协 同用 户需 求 的图形 协 同环 境 只 要在 A t0 C A D 运 行环境 中加 载 该 协 同环


u

, 。

境就可 使 A u ot C A D 实现协同 图形 编辑系统 的功能 当不 需 要 该图形协 同环境 时 只 要卸载 掉 即 可 这


;

: 、 、

种方案 有如下 几方 面 的好 处 ( l) 无需修 改 A u tO C A D 的源 代码 (2 ) 该 系统 的使用 具有熟悉 简便


;

、 , ,

快捷 灵活 的特点 (3 ) 利用 现 有的图形 编辑器 减轻 开 发 工 作量 缩短 开 发周 期 (4 ) 基 于单个 实体


; ;

, 。

对 象 的相关 信息进行 传输 减 少 了 网络 传 输 量

2 协 同 A ut o C AD 系 统的设计
, ,
ARX 应 用 程 序是 以 劝 s u a l C 什 为基 本开 发语 言 支持 M FC 能 高效实 现许多 复杂 的 网络通 信 功

, ,

基金 项 目 江苏 省高校 自然科 学基 金 03 EJ户占2 0 时幻 D 5 2 0 10 6


:
() 6

6 55
。 ,

能 Rx 的一 个最 重要的特征是用 其开 发 的应 用 程序是一 个动态链接库 并且共享 A u ot C A D 的地 址空


, 。

间 可对 A ut O CA D 直 接进行函数调 用 A OtO C A D 通 过 单向消息传递 机制将其操 作消息传递给动 态链 接


,

库 动态链 接库通过 直接 调用 A ut 创 C A D 的 相 关 函数 来将 接 收到的操 作消息在 本地 的 A ut( 尤 A D 中再 执行


以实现 网络 协 同 功能 本文着重讨论 A tOCA D u


与图形 协同环 境的 通 信机制 中使用 的 一个重要 工 具
反应器

不同反应 器的恰 当运用是该 系统设计 的一 个 重要 方 面 也 是 利 用 A R X 开 发协 同 A m 口C A D 系统


,

体 现协 同 设计 特 点 的一 个 不可 缺 少 的重 要 工具
.

2 1 A RX 中 的反应器

A R X 开 发的协 同图形编辑 系统是通 过 一 系 列的 反应 器 感 知 A u t O C A D 中发 生 的任何操作 当本地系
, 。

统中发 生一 个事件 时 一 些被称为 通知者 的对象会 自动将 这个事件传递 给其它对象 接受事件 的对象 被
。 ,

称为 反应器 一 个 反应 器 在它能 接受通 知者 的事件 之前必 须显 式地被 添 加到通 知者 的反 应 器列表 中 而


, 。

一 个 指定的通知者可 以在其反 应器 列表 中拥有 多个 反应 器 各个 反应 器 类定 义包含 多种 通知 函数 当一


, 。

个事件发 生 时 通知 者 会 自动 调用反 应器列表 中每个 反应器 的 相应 的通知 函 数 所有反应器类 的成 员 函


, , ,

数 都是虚 函数 开 发者 只 要从其派 生一 个 自定义的反应 器 类 并 重载所 需的成员 函数 将其相应功能 通


, 。

过 成员 函 数 中的代 码 来 实 现 即 可 而 且不同种类 的反应器 能接受 不 同类型 的通知事 件sI


. .

2 1 1 数据 库反 应 器
, ,
A c D b D 别比b 翻犯 R 已止 t o
:
该 反应 器是 从类 r
中派 生而 来 可 以接受与 数据库状态相关的 事件 例 如 当在
、 ,
A e D 七D 曲由斑记
,

数据库 中添加 修 改或删 除一 个对 象时 这 个反应器 的 通 知者 是 数 据 库 因此 它 被添加 到类


对 象 的 反应 器列 表中
. .

2 12 对象 反应器
, , 、

它是从 类 A c D 仗 )b
j ec
tR 晓` ot r
中 派 生而 来的 可 以在对象 级上 响应事件 例 如 复制
:
删 除 或修 改对
, 。

象 它会 被添 加 到所 有类 A
o bj
cD b
ec
t 对象 的 反应 器 列 表中
. .

2 1 3 编 辑器 反 应器
,

从类 A c E d i t o 川泊aC ot r
中派 生而来 的编辑器 反应器 用 来监视 A u to C A D 编辑器的状 态 当指定 事件 发
、 。 、 ,

生 时 ( 如开 始 终止 或 取消一个 命令等 ) 通 知 应 用程序 例 如加载和 卸载 图 形 开始 或 结束命令 以及


其 它类 型 的用 户 交 互 操作

.2 2 协 同 A u ot CAD 系统 设计
, 。

协 同软 件 的应用领 域 十 分广 阔 其 体 系结构 从 集 中 式 到复 制 式 多种多样 本文 的系统 采用 半复制式


体系结构 14
, : 。

该系 统总体上 是 由三大模块 构成 ( l) 服 务器 端 对 于 协 同过程 中出现 的 并


系统结构如 图 l 所示
, 。 ,

发操 作 本系统采 取 的是加 锁控 制 机制 A u ot C A D 设计 的图 形 的 复杂性 使 得操作撤 销机制难 以 实现 采


。 , “ ” 、 、 、

用 加 锁机制 对 该应用来 说更 具 科学性 在 服 务器 中 会 话管理 模块 负责会话 的创 建 删 除 管 理 加


, ” 。 。

入和退 出 并 负责与各 个 协 同用户 端 的 会话 管 理 模块进 行 交 互 ( 2) 客户 机单用户 的 A 曲尤 A D (3 )
。 ,

用 A R X 开 发 的 基 于 网络 对 多个 远 程 用户 的操 作 进 行 协 同 的环境 在该 环境 中 有三 个子 模 块 分 别 与

A t 血 ( A D 运行 环 境进 行交 互 “ 信息捕获 ” 模块主 要 是 利 用 反应器 负责从 A ut( 尤 A O 中取 得 当前操作信
, , ,
“ ”
息 然 后 经 信息转换 模块 根据 操作 类型 提取 出操作实体的相 关信息 转换成 网络能够 传输 的数据
。 “ ”
网络 通 讯 接 口 ” 模块 将其发送 给参 加协 同的 远程 用户 远 程 用户 通过 网 络通 讯 接 口
,

形式 再 通过
, 。
“ ”
模块将 接收到 的远 程 操 作信息进 行 如上 的逆 操作 从 而 实现 了 网络 协同 锁管理 模块 就是当用 户对
。 ”

对象进行修 改操作 时 的加 锁管理 而 会话 管理 模块是 负责客户端与 服务器 进行交流 本地 会话 状态及
, “ 。 ,

加 锁 信息 同时 负责与本 地 的 锁 管理 模块进 行加锁信 息的交互 因 此在该 系统 的半 复制式结构中
, 。

每 一个客 户 端 都持有 一份 共 享数据 的复 制版 本 从 而使得在本地 的部分操作得到较快响 应 对 于修 改对


象的操作利用加锁 机制来避免并发 操作带 来 的冲突而 导致共享数据 的不一 致性 对 各协 同用户 的锁管理


在 服 务器端采 用 集 中统 一 管 理 的方 式

6 56
月民务器

会 话管理 工 作 锁管理

锁 一 锁


十可藉扩 撼孙~
~ 管

斗 犷
信 信 网 网 信 信

A 地 汇 人】 息 息 络 络 息 AU加 A O

应 捕 转 通 通 转 捕 应
用 获 换 讯 讯 换 获 用

件 函 口 口 函 件

软 数 ,月
接 接 数 软
调 调
用 用
. ,

动态 链接库 dl 动 态链 接库 di1

T C P 月P

图 1 模 块间的通 信书饰

基 于反应器 的协 同 A ut 系 统 的 实现
o
.2 3 CA D
, ,

类 中派生 出一 个 自定义 的数据库反应 器类 并重 载了其


r
首先 从数 据 库 反 应器 A cD
D
b 反at b as e R-e a
C ot
, :
中的两 个虚 函数 其派 生 类 的部分定义 内 容如 下
r
d
as C
bD eR b icl A c D b
ac ot :r p u D at a b as e R e a c to

{ p u b li e :
,
刀向数据 库 中添 加一 个新对 象 的操 作 完成 后 将 执 行 此成 员 函 数中 的 相应代码
v
访tU a l v o
id ec
tA P pe
n
d d
( e c 0 n St
A e
D b D at a b * e o
jb e ct d b o bj ) ;
g, sn tAe D bo *
obj ,
ase w
d
刀对 数 据库 中 的某个对 象 修 改 操 作 完成 后 将执 行 此 成 员 函数中 的相 应代码
v v o e o n st
让ut A e D b D a ta b eo n st *
dW 乐
* t
a l id
obj
ec tM do iif dc
( ase Ae
D o jb eC
b dbo j ):
b
}; , :
对 于 该 系统 中的客户 端来说 当前 数据 库 反 应 器 被触发 会有两 种 原 因 一 是本地用户对 当前数据 库

中的对 象进 行 操 作 另 一 个就 是接收 到远程用户 的操作信 息后 在当前数据库中执 行 这 两 种情 况下 的所


;

。 ,

有操作都会引 起相应 的数据 库 反应器 触发动 作 根 据 本 系 统 的要求 前者 执 行 完 后 必须 产 生发 送该操作


, 。

信息给其它 远 程协同用 户 的动 作 后者 无 需 如此 所 以在该 系统 中定 义了一 个成 员变量 用于 区 分当前对


, 。

数据 库 的操 作是 本地操 作还是来 自于远程 的操 作 然 后 使数 据 库反 应器 作 出相 应 触 发动 作


,

在进行 研 究与 反 复实践的过程 中 发现 当对 数据库进 行 创 建 新对 象操作 时 出现 了数据 库反应 器 中的


, 。 , ,

两 个成 员函数都被调 用 而 且其调用 的先 后 顺序 无法 确 定 因为 数据 库 是通 知 者 且在 数据 库中 创 建
, ,

一 个 新对 象 的操作包 含 于 修 改对 象 的操作 所 以 当用 户 完成 向数 据 库中添加 一个 新对 象 之后 数据库 反


,

应器 既会执 行 D bR a
C cot
:r o
jb eC tA
P
ep
n
e
d o 成员 函数 的代 码 也会 执行
d C D bR e
aotC
:r
j
ob
e ct M ed i ife o 成
d

员 函数 的代码 由于 应用系统 中使用 反应 器作 出通知 事件 时 的 原 则之 一 是应 用 系统 不 能依赖 通 知 间操 作


, 。 ,

( 函 数调用 ) 的 顺 序 只能依赖通知 来指 示 系统 的状态 13 例如 当接 收 到对 象 A 的 e


1 ’u
d (k r e
) 函数
, ,
aser
通知 时 说 明对象 A 已 经 被删 除 ;
如果接 收到对 象 A 的0
d 函 数通 知 紧 接着是 对 象 的 陇 ed o B e

函数通知 这 只 能说 明对象 A 和 B 都 己 经 被删除


,
~
而 系统不能保 证对 象 B 总是 在对象 A 之后被删 除的

根据上 述原 则 对 数据库作为反应器 的通知 者来 说


,
无法 预测应 用 系统在两个 成员 函数 中的执 行 的先后

657
, 。

顺序 也就 无 法用 标识变量 的方法 来解决此 问题


, ,

为此 本 系统对 数据库 反 应器 的应 用作 了一 些修 改 只 重载 了数据库 反应器 中的 一 个 o


trj eC tA p pe
nd
ed
, 。

0 成员 函 数 同 时在 其 代码 中给 创 建 的每个 新 对 象加 入下 述 定 义 的对象 反应器类 将 对象的 修改 与删 除


, 。

操 作 的通 知 事 件 交 给 对 象 反 应 器 来 处 理 用 此 方 法 避 免 了上 述 问 题 的 发 生 从 对象 反 应 器
:
AcD
o jb t R 。 加 otr 类 中派生 出 自定 义的对 象 反应 器 类定义 内容如 下
ec
b
aS C N ly o bj d R烈 那 t P b li A D bo bj ect R 以沁 t
e l e o r : u e c o r

{ p u b li e :
,
刀修 改对 象 的 操 作 完成 后 将执行此成 员 函数 中的相应 代码
vi rt u tAc D e c 创` *
do i if d (
al
vio d m
o bj ) ;
bo bj etC d b ,
刀删 除对 象 的 操 作 完成后 将执 行 此 成 员 函数 中的相应 代 码
,
vi 山坦 I v o id e d (c o Ac o *
d Ad :
:B o l PE a =
加 e );
般 t
sn o bj etC
b o bj
b esk ean sr ign
};
, ,

当对 某一 个对 象 进行修 改操作 时 应用系统会相应 地 接受到该 对 象反应器 的通知事 件 也就 是 执 行


。 ,

该对 象 的对 象 反应 器 的成员 函数 m do i6 d
e () 相 应 代码 被操作 的对象本身是反应器 的通 知者 当删 除
,

应 用 系统首 先调 用当 前操作对 象的反应器的删除对 象 的成员 函数 然后再 调 用 当前操 作对


,
一个 对象时
, 。 ,

象的反应器的 修改对 象的成 员函 数 这 两 个成员 函数的执行是 有先后 顺序的 为此 就可 以用 一 个标 识


变量 很方便 解 决 一个删除对 象操作执行 之 后 调用 了该对 象的反应 器 的两个成员 函 数的 问题 当 调 用对 象


, , 。

反应器 的成员 函数 e 门 , 刃 0时 将标 识变 量 置 为 TRUE 表明该 操作 是删 除对 象 的操 作 在 进 入 执 行该 对


, 。 , ,

象 反应器 的成员 函数 m ed if ed o 时 看该 标识 变量 的状 态 若为 仪u
E 则表 明该操 作是删 除 对 象 的操 作
,

不允 许应 用 程序进 入成员 函数 m d
o i五de o 中 但 同时要在 该 成 员 函数 中将 其标识 变量 的 状态恢 复其 F
A LsE
, 。

该应用 系统 将 永远 无法执行成员 函数 m od iif ed o


, ,
的初 始化状态 否则 会造成 系统 的错 误
、 。

这两 个 自定义 的反 应器 基 本上 解决 了该系统 的对象 操作信息的捕获 传递与执行 等 操作 还有 一 个


, ,

关键 问题 在 A u t创C A D 中各 个对象 的结 果缓 冲 区 中的信息 是 很多 的 而不 同类 型的操 作 只 是改 变其操作


对象 的 结 果 缓冲 区 中的很 少一 部分 信息 加 果对 于每 个 操作 都传递 其操 作对象 的结果 缓冲 区 中 的全 部信
, , 。

息 则有些 未 变 化 的信息 也传输 到 了远 端 增加 了 网络 传输 的负担 这就 要 用到第三 类反 应 器一 一编 辑


器 反 应器
, ,

首先 从编 辑 器 反应 类 A c E七 E d i ot 评比aC 权)r 中派生 出 自定 义的编辑器反应器 类 其部分定义 内容如下


:
所示
:
cl C N ly E d it o r R pu
b il c A c iot rR
ea c ot r
as eac otr E
d
走 b l ic :
Pu
/ 当所选择 的操 作命令 开 始执 行之 前就 调 用 此成员 函 数 的相 应代码
申e
v im 词 v o id c on u n a n
d钻 115恤 rt( eo n st c h a
r m d s tr) ;
;
}
, 。

在 上 述 自定义类 中 其成员 函数 的参数 正是 本系统要捕 获的操作命 令名 根据每个 操作的特 点与 命


, ,

令名 对 A 曲尤 A D 中所有操作进行分 类并对 其不 同的类别进 行 相应编 码 然后根据 其不同 的操作 码 来


选 择操作对象 的结 果 缓冲 区 中的部 分 信 息传输给 远 程用户 下 面 举例 来 具 体 说明这三个反应 器在该 协 同


系统 中的具 体应 用
:

(1
) 数据库反 应器
, , ,

如图 2 所示 当用 户 A 在本地创 建一 个 对 象直 线时 会触 发数据库 反应器 即 执行其成 员函数


, ,

j
ob eC tA 即即 d ed o 中 的代码 根据其操作类型将直线对象的结果缓冲区 中的部分信 息传输给远程用户
。 , ,

比如 用户 B 接受到该直线对象的创 建信息时 会 在本地 调 用相应 函数产生 相应 的对象


当用 户 B 并禁

止本地 数据 库反 应器的触 发传输操 作信 息动作

6 58
用 户 A 创 建 新对象后 的 界面 用户 B 接 受远 程新对 象后 的界面

图2

(2 ) 对象 反应器
, 。 ,

如图 3 所示 用 户 B 对 其中 的一个 圆进行移 动操作 当该操作完成之 后 就 会触发本地的 该操作 对


, 。

象 圆的对 象反 应 器 即 调用 对 象 反应 器 中的 m ed iif e
d o 代码 将其操作 对 象圆 的 结果缓冲 区 的部分 与
, 。 ,

该操 作 相关 的信息传输给 远程 用 户 比如 用 户 A 当 用户 A 接受 到 远程 信息后 的处理方法与 上述 相 同


只 是调用 的 函数 不 同而 己

用户 B 移动 圆后 的界面 用户 A 接受远 程移动 圆操作 后 的界面

图3

( 3 ) 编辑 器反应 器
,

在 A 曲 汇A D 中的每个操作命令都必 须通过该反应器 捕 捉到该操 作命令 名 然后 将这些 操作进行分


, , 。

类 并编 以一 个类 型码 然后根 据 这个操作类型 码来 进行 选择操作对 象要 传输的信息 比如 上述的 移动


:
操作得到的 操作名如 图 4 所示

图4 用户 B 捕捉移动操作命 令 名并显 示其 名

659
.

3 结论
,

文 中提到的三 类 反应 器都 是 从各 自在本 文 系统 中的应 用 角度 出 发 采用 不 同的成员 函数及其 相关 策


。 ,

略来实现 了协 同 系统 的 开发并 解 决 了 开发 过程 中 出现的 一些 相关细节 问题 可见 如果用 ARX 作 为协


, 。

同 Au
ot C A D 系统 的开 发 工 具 那 么 这 三 类 反应 器 对 于 协 同功能的实现 起 到 了相 当大 的 作用

参 考 文 献
, .

1 分 布式 协 同设计技 术综 述 高曙 明 何发智 计算机辅助 设 汁 与图 形学学报 2 以 )4 l l 仪:2


,

vo ) 1 49 一 157
.

2 ] 基于 的异地 协同 设 汁系统 的实现 李志强 尹 佑 盛 等 重 庆 丁 学院学报


,

1 Au
t o c AD 2 00 vo l !4
( 5 一 30
:1) 2
二 次开 发 实例精粹 老大中 赵 占强 编著 北京 国防 工 业 出 版 社
,
A u ot C A D 2 0 0 0 A R X 2 l
3[] 朋
.
. ,

14 1 多 版本 技术 中的 对 象标 识及 其 仄 缩 窦 万峰 李春子卜 软 件 学报
,
Zo o 4 o
V l 1 5 ( 8 ) 1 1 3 3 一 1 14 0

作者 简介

_
, , , , , _

朱恩 霞 19 7
5 年生 女 江 苏 省 高邮市 人 硕 十研究 生 土 要研究 领域 为计 算机支持 的 协 同 { 作

660

You might also like