summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/SubscriberRecord.ice
blob: 3844ed6579fe8a8ccfdabf0d00dc324fcef7c750 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// **********************************************************************
//
// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************

#pragma once

[["cpp:header-ext:h"]]

#include <Ice/Identity.ice>
#include <IceStorm/IceStorm.ice>

module IceStorm
{


/**
 *
 * The key for persistent subscribers, or topics.
 *
 * If the subscriber identity is empty then the record is used as a
 * place holder for the creation of a topic, otherwise the record
 * holds a subscription record.
 *
 **/
struct SubscriberRecordKey
{
    // The topic identity.
    Ice::Identity topic;

    // The identity of the subscriber. If this is empty then the key
    // is a placeholder for a topic.
    Ice::Identity id;
};

/**
 *
 * Used to store persistent information for persistent subscribers.
 *
 **/
struct SubscriberRecord
{
    string topicName; // The name of the topic.

    Ice::Identity id; // The subscriber identity.

    // Is this a link record, or a subscriber record?
    bool link;

    Object* obj; // The subscriber object.

    // We could simulate a union here with a class object.

    // Persistent subscriber data.
    QoS theQoS; // The QoS.

    // Link subscriber data.
    int cost; // The cost.
    Topic* theTopic;  // The linked topic.
};

sequence<SubscriberRecord> SubscriberRecordSeq;

}; // End module IceStorm