3.8 服务器安全
3.8.1锁
服务器图表的锁定部份允许您来指定被服务器使用的一个或多个安全锁的名称。安全锁允许您授权部份或完整地访问服务器,用户基于一个安全的访问代码入口来访问设计资源管理器。在服务器文档图表的锁定部份,使用增加,删除和编辑按扭,来为您的服务器输入您希望有的名称和任何锁的摘要描述。
3.8.2创建锁
一个抽象的锁对象,TLock,在“Rt_forms”单元中定义如下:
TLock = Class(TObject)
LockName: String;
AccessLevel :TAccessLevel;
Status: Word;
Constructor Create(AName : String);
DestructorDestroy; Virtual;
ProcedureSetState_Lockup;
FunctionGetstate_AccessLevel :TAccessLevel;
FunctionSetstate_Unlock(KeyCode: String; VarHostId: String;
UserCount:Integer;HostIdIsHard:Boolean):TAccessLevel;Virtual;
End;
LockName是一个描述字符串,将在服务器安全对话框中被用户看到。
AccessLevel是锁定当前访问的层。TAccessLevel是一个枚举类型,在“”单元中定义如下:“eAccessLevel_Denied, eAccessLevel_Partial1,.. eAccessLevel_Partial10,eAccessLevel_Full”。在真实情况下,您将很可能仅使用eAccessLevel_Denied,第五个枚举值,和eAccessLevel_Full。
创建应该被过载(overridden,面向对象知识)来设置您的锁定的名称,并且初始化任何关联的其它对象/单元到您的控制访问方法。
SetState_Lockup不需要被过载。它设置锁来拒绝访问。GetState_AccessLevel也不需要被过载。它简单地返回访问层次。
如果您想要访问控制,SetState_Unlock必须被过载。默认的方法设计访问为完全访问。在设置您的访问层次后,不要调用继承的方法。KeyCode是访问代码,HostId通常是一序列号,UserCount是同时请求的用户数,HostIdIsHard告诉是否ID是一个硬件驱动来或从用户来。
每一个锁也必须被增加到您的TServerModule类的子孙锁的集合中。要么过载TServerModule的构造过程并且增加它们,或在“Main.pas”的“CreateServer”进程中增加它们。
增加锁:
您需要定义锁对象
TMyLock = Class(TLock)
...
End;
声明一个实例
MyLock :TMyLock;
Add the code
增加代码
MyLock :=TMyLock.Create(‘Lock Name’);
ServerModule.Locks.Add(MyLock);
现在,锁将自动地被设计资源管理器处理,且您的任何进程能基于MyLock.GetState_AccessLevel的返回结果来修改它们的行为。
3.9 服务器源代码例子
服务器代码例子,请参见“\SDK\Examples\Server Examples”文件夹。您能打开每一个工程并且调试其代码,编译每一个工程并以插件方式加入到设计资源管理器中。这些小的服务器例子显示出,在设计资源管理器什么是可能的做到的。
下列表中例子服务器简短的描述了例子代码功能。
|
服务器 |
描述 |
|
CreateNetListServer |
一个基本的连线表服务器,从一个原理图中提取连线表。 |
|
CuplText |
一个基本的仅仅向导服务,创建一个Cupl模板。 |
|
DemoText |
一个基本的编辑器服务,显示脱离文本编辑器的编辑能力。 |
|
EditCell |
一个基本对话框服务(起源自一个向导模板),允许您来从一个展开的文档中更新或检索值。 |
|
FileFind |
一个基本的很有用的服务器,来查找一个设计数据库文档,并且使您能从此服务器中选择和打开一个文档。 |
|
MMedia |
一个基本的向导,示范在设计资源管理器中什么能够被实现。 |
|
PCB 2.7 Loader |
一个“在DLL中拖动”服务器,在设计资源管理器中加载PCB 2.7格式文档。 |
|
PCB 2.8 Loader |
一个“在DLL中拖动” 服务器,在设计资源管理器中加载PCB 2.8格式文档。 |
|
PCBSave |
一个“在DLL中拖动” 服务器,从设计资源管理器中保存PCB文档。 |
3.10 设计数据库实体
实体是一个设计数据库中的被调用的实体项目,一个实体可以是一个文档或文件夹。一般来说,一个实体是一个文档,能从在设计资源管理器中的一个打开的设计数据库得到它。
一个Binder与设计数据库关联,并有实体。每一个Binder默认有设计工作组文件夹、回收站文件夹和任何其它文件夹。一个Binder也能被作为一个容器描述,它在设计资源管理器的浏览器面板中显示为一个桶
图标。
3.11 下一步做什么
3.11.1介绍
由于服务器被作为动态连接库(.DLL)文件编译,因此它有可能在其它服务器能访问时,暴露出服务器的功能。为更多增强相互作用和在不同服务器与用户定义的宏之间进行集成,原理图(SCH)和印制板(PCB)编辑器有一个开放的应用程序接口(API),一个开放的API允许从其它服务器或从一个用户定义的宏中,直接使用PCB和SCH进程、数据库对象。
设计资源管理器有一个导航器面板,面板上有不同的图标来表现不同的实体。实体可以是文件夹,原理图图表或PCB文档。集成的设计窗体是顶层的文件夹,设计数据库包含的设计工作组文件夹、回收站文件夹和相应的文件夹和文档。一个编辑器窗体代表一个活动的服务器窗体,一个原理图编辑窗体如图所示。
在您的当前的服务器中,使用PCB API所支持的PcbApi_SendCommand函数,来运行PCB编辑器的进程是可能的,但是使用此进程,无论如何,您没有访问PCB编辑器的底层实现,例如,使用软件代理捕获PCB消息,或在PCB编辑器的一个数据库中操作实体和它们的属性。使用PCB API,您有能力来访问PCB设计对象数据库。所有的文档服务器都有API支持,您能编写程序来抽取、修改和更新这些服务器的数据库。设计资源管理器有它的自己的API,即客户端API,此客户端API提供一个接口到设计数据库的文档,在其中,程序开发者能访问它。
当您激活“Show all document kinds”选项后,任何被通过OLE服务器创建和编辑的文档(通常地注册在您的计算机上)将出现在一个新建文件的对话框中。在这里,非Protel文档被存储在设计资源管理器内部,但仍能被那个创建它们的应用程序(OLE服务器)来编辑。这是Protel 99 SE的一个强大的特点,使用它,有能力来支持Protel文档和非Protel文档。
Protel设计环境通过MacroMaker(宏制作)服务来支持OLE自动化。在其它的应用程序中,可直接从您的宏中调用OLE对象,打开一个微软Word文档,增加信息到文档并保存它,在设计资源管理器中,所有的都从您的宏中来运行。为获得更多的关于使用宏的信息,请参见宏制作服务器支持文档,那里有许多宏脚本的例子,将有助于您的理解。
更多的信息,请参见“客户端API章节”和“设计数据库手册”、“客户端API章节”、“Protel 99运行时间库章节”和服务器手册/参考等。这些手册将帮助您来为Protel 99创建一个服务器,或通过附加的服务器(小规模的以插件方式加入的服务器)来增强已存在的服务器的特征。您也能学习Protel SDK包提供的源代码例子,这些代码例子在“\SDK\Examples”中。

图1-45 设计资源管理器和它的窗体