comparison tango/tango/net/cluster/model/IChannel.d @ 132:1700239cab2e trunk

[svn r136] MAJOR UNSTABLE UPDATE!!! Initial commit after moving to Tango instead of Phobos. Lots of bugfixes... This build is not suitable for most things.
author lindquist
date Fri, 11 Jan 2008 17:57:40 +0100
parents
children
comparison
equal deleted inserted replaced
131:5825d48b27d1 132:1700239cab2e
1 /*******************************************************************************
2
3 copyright: Copyright (c) 2004 Kris Bell. All rights reserved
4
5 license: BSD style: $(LICENSE)
6
7 version: July 2004: Initial release
8
9 author: Kris
10
11 *******************************************************************************/
12
13 module tango.net.cluster.model.IChannel;
14
15 private import tango.util.log.Logger;
16
17 private import tango.net.cluster.model.IMessage,
18 tango.net.cluster.model.IConsumer;
19
20 /*******************************************************************************
21
22 A channel represents something akin to a publish/subscribe topic,
23 or a radio station. These are used to segregate cluster operations
24 into a set of groups, where each group is represented by a channel.
25 Channel names are whatever you want then to be: use of dot notation
26 has proved useful in the past. See Client.createChannel
27
28 *******************************************************************************/
29
30 interface IChannel
31 {
32 /***********************************************************************
33
34 Return the Logger associated with this cluster
35
36 ***********************************************************************/
37
38 Logger log ();
39
40 /***********************************************************************
41
42 Return the name of this channel. This is the name provided
43 when the channel was constructed.
44
45 ***********************************************************************/
46
47 char[] name ();
48
49 /***********************************************************************
50
51 Create a message listener on the given
52 channel. The ChannelListener should be called whenever
53 a corresponding cluster event happens. Note that the
54 notification is expected to be on a seperate thread.
55
56 ***********************************************************************/
57
58 IConsumer createConsumer (ChannelListener notify);
59
60 /***********************************************************************
61
62 Create a bulletin listener on the given
63 channel. The ChannelListener should be called whenever
64 a corresponding cluster event happens. Note that the
65 notification is expected to be on a seperate thread.
66
67 ***********************************************************************/
68
69 IConsumer createBulletinConsumer (ChannelListener notify);
70
71 /***********************************************************************
72
73 Place a cache entry into the cluster. If there is already
74 a matching entry, it is replaced.
75
76 ***********************************************************************/
77
78 bool putCache (char[] key, IMessage message);
79
80 /***********************************************************************
81
82 Return a cluster cache entry, and optionally remove it
83 from the cluster.
84
85 ***********************************************************************/
86
87 IMessage getCache (char[] key, bool remove, IMessage host=null);
88
89 /***********************************************************************
90
91 Ask the cache host to load an entry, via the provided
92 message. Note that the message itself should contain all
93 pertinent information to load the entry (such as whatever
94 key values are required).
95
96 The host executes the message in a manner akin to RPC, thus
97 the message also needs to be registered with the host server
98
99 ***********************************************************************/
100
101 bool loadCache (char[] key, IMessage message);
102
103 /***********************************************************************
104
105 Place a new entry into the cluster queue. This may throw
106 a ClusterFullException when there is no space left within
107 the cluster queues.
108
109 ***********************************************************************/
110
111 IMessage putQueue (IMessage message);
112
113 /***********************************************************************
114
115 Query the cluster for queued entries on our corresponding
116 channel. Removes, and returns, the first matching entry
117 from the cluster.
118
119 ***********************************************************************/
120
121 IMessage getQueue (IMessage host = null);
122
123 /***********************************************************************
124
125 Scatter a message to all registered listeners. This is
126 akin to multicast.
127
128 ***********************************************************************/
129
130 void broadcast (IMessage message = null);
131
132 /***********************************************************************
133
134 Execute the provided message on the cluster, and return the
135 results internally
136
137 ***********************************************************************/
138
139 bool execute (IMessage message);
140 }
141
142
143 /*******************************************************************************
144
145 An IEvent is passed as the argument to each ChannelListener callback
146
147 *******************************************************************************/
148
149 interface IEvent
150 {
151 /***********************************************************************
152
153 Return the channel used to initiate the listener
154
155 ***********************************************************************/
156
157 IChannel channel ();
158
159 /***********************************************************************
160
161 Return one or more messages associated with this event, or
162 null if there is nothing available
163
164 ***********************************************************************/
165
166 IMessage get (IMessage host = null);
167
168 /***********************************************************************
169
170 Send a message back to the producer. This should support all
171 the various event styles.
172
173 ***********************************************************************/
174
175 void reply (IChannel channel, IMessage message);
176
177 /***********************************************************************
178
179 Return an appropriate reply channel for the given message,
180 or return null if no reply is expected
181
182 ***********************************************************************/
183
184 IChannel replyChannel (IMessage message);
185
186 /***********************************************************************
187
188 Return the Logger associated with this cluster
189
190 ***********************************************************************/
191
192 Logger log ();
193 }
194
195 /*******************************************************************************
196
197 Declares the contract for listeners within the cluster package.
198 When creating a listener, you provide a callback delegate matching
199 this signature. The delegate is invoked, on a seperate thread, each
200 time a relevant event occurs.
201
202 *******************************************************************************/
203
204 alias void delegate (IEvent event) ChannelListener;
205
206