インタフェース定義を次に示します。
module EventQueue {
// Connection event types
enum EventType {UNDEFINED, CONN_EVENT_TYPE};
// Peer (Client)connection info
struct ConnInfo {
string ipaddress; // in %d.%d.%d.%d format
long port;
long connID;
};
// Marker interface for all types of event listeners
local interface EventListener {};
typedef sequence<EventListener> EventListeners;
// connection event listener interface
local interface ConnEventListener : EventListener{
void conn_established(in ConnInfo info);
void conn_closed(in ConnInfo info);
};
// The EventQueue manager
local interface EventQueueManager :
interceptor::InterceptorManager {
void register_listener(in EventListener listener,
in EventType type);
void unregister_listener(in EventListener listener,
in EventType type);
EventListeners get_listeners(in EventType type);
};
};
インタフェース定義の詳細を以降で説明します。
ConnInfo構造体には次のようなクライアントコネクション情報があります。
EventListenerインタフェースの部分は,すべてのタイプのイベントリスナーのマーカーインタフェースです。
ConnEventListenersインタフェースは次のように二つのオペレーションを定義します。
このオペレーションはVisiBroker ORBによってコールバックされ,コネクション設定イベントをプッシュします。VisiBroker ORBはin ConnInfo infoパラメタにクライアントコネクション情報を与えて,この値をコールバックオペレーションに渡します。
このオペレーションはVisiBroker ORBによってコールバックされ,コネクションクローズイベントをプッシュします。VisiBroker ORBはin ConnInfo infoパラメタにクライアントコネクション情報を与えて,この値をコールバックオペレーションに渡します。
サーバ側アプリケーションは,リスナーにプッシュされているイベントの処理と同様,ConnEventListenerインタフェースのインプリメンテーションにも責任があります。
EventQueueManagerインタフェースは,イベントリスナーの登録に関するサーバ側インプリメンテーションによってハンドルとして使用されます。このインタフェースは次のように三つのオペレーションを定義します。