通讯协议029——全网独有的OPC AE知识四之接口(十三)

本文介绍OPC AE规范的客户端相关接口的相关知识,更多通信资源请登录网信智汇(wangxinzhihui.com)。OPC AE规范描述了OPC事件服务器应该实现的对象和接口,实现在多个OPC客户端间共享事件和警报条件。

1、IOPCEventSink

为了使用连接点,客户端必须创建一个同时支持IUnknown以及IOPCEventSink接口。客户端将传递一个指向IUnknown接口的指针(而不是IOPCEventSink)转换为事件订阅中正确IConnectionPoint的Advise方法(如从IConnectionPointContainer::FindConnectionPoint或EnumConnectionPoints获得)。这个事件服务器将调用客户端对象上的QueryInterface以获取IOPCEventSink接口。注意:事务必须以这种方式执行才能使接口编组工作适用于本地或远程服务器。

事件服务器调用OnEvent方法向客户端通知满足特定事件订阅的筛选条件的事件。

客户端只需要提供OnEvent的完整实现。IOPCEventSink没有其他方法。

请注意,回调可能有两个原因:事件通知或刷新。可以编写一个服务器,使其并行执行其中的几个操作。在这种情况下,客户端可以通过检查OnEvent回调中的bRefresh参数来确定特定回调的“原因”。

2、IOPCEventSink方法

1)HRESULT OnEvent(

[in] OPCHANDLE hClientSubscription,

[in] BOOL bRefresh,

[in] BOOL bLastRefresh,

[in] DWORD dwCount,

[in, size_is(dwCount)] ONEVENTSTRUCT* pEvents

);

此方法由客户端提供,用于处理来自OPCEventSubscription的事件通知。无论是刷新还是标准事件通知,都可以调用此方法。

客户端从该函数返回后,服务器需要释放pEvents。

此外,根据COM规范,客户端在回调中允许哪些函数方面受到限制。例如,不能调用阻塞函数。

回调可能由于以下原因之一而发生:

• 发生了一个或多个新事件。

• 这是对刷新的响应。

3、IOPCShutdown

为了使用此连接点,客户端必须创建一个同时支持IUnknown和IOPCShutdown接口。客户端将传递一个指向IUnknown接口的指针(而不是IOPCShutdown)转换为服务器中正确的IConnectionPoint的Advise方法(从IConnectionPointContainer::FindConnectionPoint或EnumConnectionPoints)。服务器将调用对客户端对象执行QueryInterface以获取IOPCShutdown接口。请注意,交易必须以这种方式执行,才能使接口编组在本地或远程服务器。

当事件服务器需要关闭时,将调用此接口上的ShutdownRequest方法。客户端应该释放此事件服务器的所有连接和接口。

连接到多个服务器(例如事件服务器和/或其他服务器,例如来自一个或多个供应商的数据访问服务器)的客户端应该为每个对象维护单独的关闭回调,因为任何服务器都可以独立于其他服务器关闭。

4、IOPCShutdown方法

1)HRESULT ShutdownRequest (

[in, string] LCPWSTR szReason

);

此方法由客户端提供,以便服务器可以请求客户端断开与服务器的连接。客户端应取消所有连接并释放所有接口。

关闭连接点是基于“每个服务器对象”的。也就是说,它与CoCreate创建的对象有关…如果一个客户端连接到多个服务器对象,那么它应该单独监控每个对象(使用单独的回调)以获取关闭请求。

更多通信资源请登录网信智汇(wangxinzhihui.com)。

你可能感兴趣的:(通讯协议,网络协议,信息与通信)