首页 理论教育 电子白板功能的设计与实现

电子白板功能的设计与实现

时间:2022-02-12 理论教育 版权反馈
【摘要】:同时,对于服务器,其本身并不能在客户端完成具体的操作,所以实际上在服务端并不需要实现该方法(函数)的具体工作,它只是通过连接点回调客户端接收器的接口函数来实现最终操作。系统的DCOM客户端通过MFC实现,值得指出的是DCOM客户程序在用向导生成时一定要选上“支持OLE自动化”选项。程序中通过宏METHOD_PROLOGUE_EX接收器类的成员函数来实现,该宏能够得到接收器类成员函数的父类指针。

2.5.1 使用连接点和接收器完成白板操作

系统(张刚毅,2005年)设计一个DCOM服务器,它有一个接口(IEBlankBoard),该接口有多个方法,这些方法完成白板的具体操作,例如画图、文本输入等。由于每个客户操作都必须使全组所有成员(教师或学生)看到,所以应该采用调用服务器的方法(函数)来操作白板才能保证所有用户都能收到并显示出结果。同时,对于服务器,其本身并不能在客户端完成具体的操作,所以实际上在服务端并不需要实现该方法(函数)的具体工作,它只是通过连接点回调客户端接收器的接口函数来实现最终操作。服务器将使所有客户做同样的动作。

2.5.1.1 具体实现

1.事件接口的添加(DCOM服务器端的实现)

DCOM服务器的开发较为简单,因为服务器并没有做任何实质性的工作,它只是通过连接点调用客户端接收器的接口函数来实现最终的操作。

(1)使用VC++6.0新建一个ATL工程,在向导的第二步中选择服务类型为“Service[EXE]”。向导自动生成的服务器只有一个CSeviceMoudle类和_tWinMain函数。在Win Main函数里通过解析命令行和写注册表自动注册一个服务。

(2)添加接口,该接口支持连接点。方法是选择菜单Insert→New ATL Object→Simple Object,在弹出的Names选项卡命名接口IEBlankBoard,在Att ributes选项卡中选择Support Connection Points(支持连接点)。

(3)为接口添加方法和连接点的代理类。添加连接点的方法为:在工作区中选中接口类CEBlankBoard并单击右键,在弹出的菜单中选择“Implement Connect Point”项,在弹出的对话框中选中_IEBlankBoardEvents的接口。需要注意的是,在此过程之前,必须编译该程序,否则上面的过程会失败。成功完成上述步骤后,就会增加一个代理类CProxy_IEBlankBoard。接下来便可在IEBlankBoardEvents的接口下增加函数,这些函数就是连接点函数,这些函数将在客户端最终实现。

(4)工作过程:DCOM服务器调用连接点代理类的函数,该代理类函数(即连接点函数)再调用客户端函数的具体实现来完成自己的实现。

2.DCOM客户端的实现

系统的DCOM客户端通过MFC实现,值得指出的是DCOM客户程序在用向导生成时一定要选上“支持OLE自动化”选项。

(1)接收器的客户端实现。

前面已经提到,服务器通过连接点来调用客户端的函数以完成对白板的操作功能,接收器的实现使用ATL要比使用MFC简单,但MFC也做了很多工作使得建立接收器变得相对简单,这些工作通过继承CCmd Target类来实现。由于CView类是从CCmd Target派生的,因此接收器的实现就放在CEBBClient类中。对于CEBBClient类,接收器的实现是通过一些宏完成的,这些宏的作用如下:

BEGIN_INTERFACE_PART:该宏用来产生类XEBlankBoard,同时该宏还默认定义了3个COM接口共有的、必须实现的成员函数,即AddRef()、Release()和QueryInterface()。

END_INTERFACE_PART:和前面的宏一起完成对接口类的定义,同时还定义一个该接口类的对象m_xEBlankBoard。

DECLARE_INTERFACE_MAP():该宏用来定义了3个函数和1个变量数组,3个函数的实现在CPP中提供,也是通过一对宏来实现。

程序中通过宏METHOD_PROLOGUE_EX接收器类的成员函数来实现,该宏能够得到接收器类成员函数的父类指针。下面给出客户端使用铅笔工具进行绘图的函数实现:

该函数使用了宏METHOD_PROLOGUE_EX来得到父指针,并调用父类的Draw函数来实现具体的绘图功能,父类中的函数实现如下:

(2)创建远程服务组件。

创建远程服务器组件和创建本地的进程内组件类似,不过这里要指明服务器名称,同时还需要服务器运行该服务进程,反映客户端连接服务器的过程,如图2-6所示。

图2-6 客户端连接服务器程序流程图

(3)客户对服务器组件的调用。

客户程序所做的工作比较简单,这里仍旧以铅笔绘图工具为例,在鼠标拖动的过程中不断调用服务器的Draw方法来实现绘图工作,方法如下:

2.5.1.2 电子白板的具体功能实现

电子白板功能的具体实现由父类成员函数完成,例如用户要实现画线,在父类成员函数中的实现如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈