File: classTp_1_1AbstractClientObserver.html

package info (click to toggle)
telepathy-qt4 0.3.6-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 14,260 kB
  • ctags: 12,185
  • sloc: cpp: 29,241; xml: 23,692; ansic: 16,079; sh: 10,327; python: 3,080; makefile: 1,553
file content (329 lines) | stat: -rw-r--r-- 24,695 bytes parent folder | download
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>TelepathyQt4: Tp::AbstractClientObserver Class Reference</title>
  <link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="1">&nbsp;&nbsp;</td>
<td class="postheader" valign="center">
<a href="index.html">
<font color="#004faf">Home</font></a>&nbsp;&middot;
<a href="classes.html">
<font color="#004faf">All Classes</font></a>&nbsp;&middot;
<a href="namespaces.html">
<font color="#004faf">All Namespaces</font></a>&nbsp;&middot;
<a href="modules.html">
<font color="#004faf">Modules</font></a>&nbsp;&middot;
<a href="functions.html">
<font color="#004faf">Functions</font></a>&nbsp;&middot;
<a href="files.html">
<font color="#004faf">Files</font></a>
</td>
</tr>
</table>
</body>
</html>
<!-- Generated by Doxygen 1.6.3 -->
  <div class="navpath"><a class="el" href="namespaceTp.html">Tp</a>::<a class="el" href="classTp_1_1AbstractClientObserver.html">AbstractClientObserver</a>
  </div>
<div class="contents">
<h1>Tp::AbstractClientObserver Class Reference<br/>
<small>
[<a class="el" href="group__clientclient.html">Client proxies</a>]</small>
</h1><!-- doxytag: class="Tp::AbstractClientObserver" --><!-- doxytag: inherits="Tp::AbstractClient" -->
<p>The <a class="el" href="classTp_1_1AbstractClientObserver.html" title="The AbstractClientObserver class provides an object representing a Telepathy observer...">AbstractClientObserver</a> class provides an object representing a Telepathy observer.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="abstract-client_8h_source.html">TelepathyQt4/AbstractClientObserver</a>&gt;</code></p>

<p>Inherits <a class="el" href="classTp_1_1AbstractClient.html">Tp::AbstractClient</a>.</p>

<p><a href="classTp_1_1AbstractClientObserver-members.html">List of all members.</a></p>
<h2>Public Member Functions</h2>
<ul>
<li>virtual <a class="el" href="classTp_1_1AbstractClientObserver.html#af2a98c9910fd0c3c5777ace96389797c">~AbstractClientObserver</a> ()
<li>ChannelClassList <a class="el" href="classTp_1_1AbstractClientObserver.html#a573f7e277176df6adafa830a20ebadbe">observerChannelFilter</a> () const 
<li>bool <a class="el" href="classTp_1_1AbstractClientObserver.html#a872a0ff1f6048b76ff71eac4395ecc15">shouldRecover</a> () const 
<li>virtual void <a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels</a> (const <a class="el" href="classTp_1_1MethodInvocationContextPtr.html">MethodInvocationContextPtr</a>&lt;&gt; &amp;context, const <a class="el" href="classTp_1_1SharedPtr.html">AccountPtr</a> &amp;account, const <a class="el" href="classTp_1_1SharedPtr.html">ConnectionPtr</a> &amp;connection, const QList&lt; <a class="el" href="classTp_1_1SharedPtr.html">ChannelPtr</a> &gt; &amp;channels, const <a class="el" href="classTp_1_1SharedPtr.html">ChannelDispatchOperationPtr</a> &amp;dispatchOperation, const QList&lt; <a class="el" href="classTp_1_1SharedPtr.html">ChannelRequestPtr</a> &gt; &amp;requestsSatisfied, const QVariantMap &amp;observerInfo)=0
</ul>
<h2>Protected Member Functions</h2>
<ul>
<li><a class="el" href="classTp_1_1AbstractClientObserver.html#acba26a0800eb1c8111d7e2d9ab221361">AbstractClientObserver</a> (const ChannelClassList &amp;channelFilter)
<li><a class="el" href="classTp_1_1AbstractClientObserver.html#a094ac2b3902c44ad01ddfde342a699d4">AbstractClientObserver</a> (const ChannelClassList &amp;channelFilter, bool shouldRecover)
</ul>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The <a class="el" href="classTp_1_1AbstractClientObserver.html" title="The AbstractClientObserver class provides an object representing a Telepathy observer...">AbstractClientObserver</a> class provides an object representing a Telepathy observer. </p>
<p>Observers are clients that monitor the creation of new channels. This functionality can be used for things like message logging.</p>
<p>Observers should not modify the state of a channel except via user interaction.</p>
<p>Observers must not carry out actions that exactly one process must take responsibility for (e.g. acknowledging text messages, or carrying out the actual file transfer), since arbitrarily many observers can be activated for each channel. The handler is responsible for such tasks.</p>
<p>Handlers may, of course, delegate responsibility for these tasks to other clients (including those run as observers), but this must be done explicitly via a request from the handler to the observer.</p>
<p>Whenever a collection of new channels is signalled, the channel dispatcher will notify all running or activatable observers whose filter indicates that they are interested in some of the channels.</p>
<p>Observers are activated for all channels in which they have registered an interest - incoming, outgoing or automatically created - although of course the filter property can be set to filter specific channels.</p>
<p>To become an observer one should inherit <a class="el" href="classTp_1_1AbstractClientObserver.html" title="The AbstractClientObserver class provides an object representing a Telepathy observer...">AbstractClientObserver</a> and implement the pure virtual <a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels()</a> method. After that the object representing the observer must be registered using <a class="el" href="classTp_1_1ClientRegistrar.html#a18c094053cc83809a167370f7113341b">ClientRegistrar::registerClient()</a>.</p>
<p>When new channels in which the observer has registered an interest are announced, the method <a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels()</a> is invoked. All observers are notified simultaneously.</p>
<h2><a class="anchor" id="observer_usage_sec">
Usage</a></h2>
<h3><a class="anchor" id="observer_create_sec">
Implementing an observer</a></h3>
<div class="fragment"><pre class="fragment"> <span class="keyword">class </span>MyObserver : <span class="keyword">public</span> <a class="code" href="classTp_1_1AbstractClientObserver.html#acba26a0800eb1c8111d7e2d9ab221361">AbstractClientObserver</a>
 {
 <span class="keyword">public</span>:
     MyObserver(<span class="keyword">const</span> ChannelClassList &amp;channelFilter);
     ~MyObserver() { }

     <span class="keywordtype">void</span> <a class="code" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels</a>(<span class="keyword">const</span> MethodInvocationContextPtr&lt;&gt; &amp;context,
             <span class="keyword">const</span> <a class="code" href="namespaceTp.html#a978ade1e5c3edfe11ae75b1cc8c458dd">AccountPtr</a> &amp;account,
             <span class="keyword">const</span> <a class="code" href="namespaceTp.html#a225af181e21bd9c2fb5ab3394d4fc4ef">ConnectionPtr</a> &amp;connection,
             <span class="keyword">const</span> QList&lt;ChannelPtr&gt; &amp;channels,
             <span class="keyword">const</span> <a class="code" href="namespaceTp.html#a68567d763e9c2af9e3819d522c7c1bd3">ChannelDispatchOperationPtr</a> &amp;dispatchOperation,
             <span class="keyword">const</span> QList&lt;ChannelRequestPtr&gt; &amp;requestsSatisfied,
             <span class="keyword">const</span> QVariantMap &amp;observerInfo);
 };

 MyObserver::MyObserver(<span class="keyword">const</span> ChannelClassList &amp;channelFilter)
     : <a class="code" href="classTp_1_1AbstractClientObserver.html#acba26a0800eb1c8111d7e2d9ab221361">AbstractClientObserver</a>(channelFilter)
 {
 }

 <span class="keywordtype">void</span> MyObserver::observeChannels(<span class="keyword">const</span> MethodInvocationContextPtr&lt;&gt; &amp;context,
         <span class="keyword">const</span> <a class="code" href="namespaceTp.html#a978ade1e5c3edfe11ae75b1cc8c458dd">AccountPtr</a> &amp;account,
         <span class="keyword">const</span> <a class="code" href="namespaceTp.html#a225af181e21bd9c2fb5ab3394d4fc4ef">ConnectionPtr</a> &amp;connection,
         <span class="keyword">const</span> QList&lt;ChannelPtr&gt; &amp;channels,
         <span class="keyword">const</span> <a class="code" href="namespaceTp.html#a68567d763e9c2af9e3819d522c7c1bd3">ChannelDispatchOperationPtr</a> &amp;dispatchOperation,
         <span class="keyword">const</span> QList&lt;ChannelRequestPtr&gt; &amp;requestsSatisfied,
         <span class="keyword">const</span> QVariantMap &amp;observerInfo)
 {
     <span class="comment">// do something, log messages, ...</span>

     context-&gt;setFinished();
 }
</pre></div><h3><a class="anchor" id="observer_register_sec">
Registering an observer</a></h3>
<div class="fragment"><pre class="fragment"> ChannelClassList filters;
 QMap&lt;QString, QDBusVariant&gt; filter;
 filter.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL <span class="stringliteral">&quot;.ChannelType&quot;</span>),
               QDBusVariant(QLatin1String(TELEPATHY_INTERFACE_CHANNEL_TYPE_TEXT)));
 filter.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL <span class="stringliteral">&quot;.TargetHandleType&quot;</span>),
               QDBusVariant((uint) Tp::HandleTypeContact));
 filters.append(filter);
 ClientRegistrar registrar = <a class="code" href="classTp_1_1ClientRegistrar.html#a97a6a7455482de89ef6e05cc08d1a6f8">ClientRegistrar::create</a>();
 <a class="code" href="namespaceTp.html#a4b5170eac80ec912e441c84277157d1f">AbstractClientPtr</a> observer = <a class="code" href="classTp_1_1SharedPtr.html#aa5ada832f48550a0943009b461dd0580">AbstractClientPtr::dynamicCast</a>(
         SharedPtr&lt;MyObserver&gt;(<span class="keyword">new</span> MyObserver(filter)));
 registrar-&gt;registerClient(observer, <span class="stringliteral">&quot;myobserver&quot;</span>);
</pre></div><dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classTp_1_1AbstractClient.html" title="The AbstractClient class provides an object representing a Telepathy client.">AbstractClient</a> </dd></dl>
<hr/><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="af2a98c9910fd0c3c5777ace96389797c"></a><!-- doxytag: member="Tp::AbstractClientObserver::~AbstractClientObserver" ref="af2a98c9910fd0c3c5777ace96389797c" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">Tp::AbstractClientObserver::~AbstractClientObserver </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Class destructor. </p>

</div>
</div>
<a class="anchor" id="acba26a0800eb1c8111d7e2d9ab221361"></a><!-- doxytag: member="Tp::AbstractClientObserver::AbstractClientObserver" ref="acba26a0800eb1c8111d7e2d9ab221361" args="(const ChannelClassList &amp;channelFilter)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">Tp::AbstractClientObserver::AbstractClientObserver </td>
          <td>(</td>
          <td class="paramtype">const ChannelClassList &amp;&nbsp;</td>
          <td class="paramname"> <em>channelFilter</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Construct a new <a class="el" href="classTp_1_1AbstractClientObserver.html" title="The AbstractClientObserver class provides an object representing a Telepathy observer...">AbstractClientObserver</a> object.</p>
<p>Note that using this constructor the <a class="el" href="classTp_1_1AbstractClientObserver.html#a872a0ff1f6048b76ff71eac4395ecc15">shouldRecover()</a> method will return <code>false</code>, meaning that on crash the observer won't be able to "catch up" on channels that match its <a class="el" href="classTp_1_1AbstractClientObserver.html#a573f7e277176df6adafa830a20ebadbe">observerChannelFilter()</a> automatically.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>channelFilter</em>&nbsp;</td><td>A specification of the channels in which this observer is interested. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a094ac2b3902c44ad01ddfde342a699d4"></a><!-- doxytag: member="Tp::AbstractClientObserver::AbstractClientObserver" ref="a094ac2b3902c44ad01ddfde342a699d4" args="(const ChannelClassList &amp;channelFilter, bool shouldRecover)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">Tp::AbstractClientObserver::AbstractClientObserver </td>
          <td>(</td>
          <td class="paramtype">const ChannelClassList &amp;&nbsp;</td>
          <td class="paramname"> <em>channelFilter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&nbsp;</td>
          <td class="paramname"> <em>shouldRecover</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Construct a new <a class="el" href="classTp_1_1AbstractClientObserver.html" title="The AbstractClientObserver class provides an object representing a Telepathy observer...">AbstractClientObserver</a> object.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>channelFilter</em>&nbsp;</td><td>A specification of the channels in which this observer is interested. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>shouldRecover</em>&nbsp;</td><td>Whether upon the startup of this observer, <a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels()</a> will be called for every already existing channel matching its <a class="el" href="classTp_1_1AbstractClientObserver.html#a573f7e277176df6adafa830a20ebadbe">observerChannelFilter()</a>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a573f7e277176df6adafa830a20ebadbe"></a><!-- doxytag: member="Tp::AbstractClientObserver::observerChannelFilter" ref="a573f7e277176df6adafa830a20ebadbe" args="() const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">ChannelClassList Tp::AbstractClientObserver::observerChannelFilter </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td> const</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the property containing a specification of the channels that this channel observer is interested. The <a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels()</a> method should be called by the channel dispatcher whenever any of the newly created channels match this description.</p>
<p>Only certain types have useful semantics for matching like this, so only certain types are allowed:</p>
<p>See <a href="http://telepathy.freedesktop.org/spec/org.freedesktop.Telepathy.Client.Observer.html#org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter">the Telepathy D-Bus API Specification</a> for documentation about the allowed types and how to define filters.</p>
<p>This property never changes while the observer process owns its client bus name. If an observer wants to add extra channels to its list of interests at runtime, it can register an additional client bus name using <a class="el" href="classTp_1_1ClientRegistrar.html#a18c094053cc83809a167370f7113341b">ClientRegistrar::registerClient()</a>. To remove those filters, it can release the bus name using <a class="el" href="classTp_1_1ClientRegistrar.html#a6bfe24179b1e9d44a6a618a0d346e4a7">ClientRegistrar::unregisterClient()</a>.</p>
<p>The same principle is applied to approvers and handlers.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>A specification of the channels that this channel observer is interested. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a872a0ff1f6048b76ff71eac4395ecc15"></a><!-- doxytag: member="Tp::AbstractClientObserver::shouldRecover" ref="a872a0ff1f6048b76ff71eac4395ecc15" args="() const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool Tp::AbstractClientObserver::shouldRecover </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td> const</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return whether upon the startup of this observer, <a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels()</a> will be called for every already existing channel matching its <a class="el" href="classTp_1_1AbstractClientObserver.html#a573f7e277176df6adafa830a20ebadbe">observerChannelFilter()</a>.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>\c</em>&nbsp;</td><td>true if this observer observerChannels() will be called for every already existing channel matching its <a class="el" href="classTp_1_1AbstractClientObserver.html#a573f7e277176df6adafa830a20ebadbe">observerChannelFilter()</a>, <code>false</code> otherwise. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a63c940820635ac64c5a321a90b9c2a1a"></a><!-- doxytag: member="Tp::AbstractClientObserver::observeChannels" ref="a63c940820635ac64c5a321a90b9c2a1a" args="(const MethodInvocationContextPtr&lt;&gt; &amp;context, const AccountPtr &amp;account, const ConnectionPtr &amp;connection, const QList&lt; ChannelPtr &gt; &amp;channels, const ChannelDispatchOperationPtr &amp;dispatchOperation, const QList&lt; ChannelRequestPtr &gt; &amp;requestsSatisfied, const QVariantMap &amp;observerInfo)=0" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void Tp::AbstractClientObserver::observeChannels </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classTp_1_1MethodInvocationContextPtr.html">MethodInvocationContextPtr</a>&lt;&gt; &amp;&nbsp;</td>
          <td class="paramname"> <em>context</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classTp_1_1SharedPtr.html">AccountPtr</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>account</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classTp_1_1SharedPtr.html">ConnectionPtr</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>connection</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const QList&lt; <a class="el" href="classTp_1_1SharedPtr.html">ChannelPtr</a> &gt; &amp;&nbsp;</td>
          <td class="paramname"> <em>channels</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classTp_1_1SharedPtr.html">ChannelDispatchOperationPtr</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>dispatchOperation</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const QList&lt; <a class="el" href="classTp_1_1SharedPtr.html">ChannelRequestPtr</a> &gt; &amp;&nbsp;</td>
          <td class="paramname"> <em>requestsSatisfied</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const QVariantMap &amp;&nbsp;</td>
          <td class="paramname"> <em>observerInfo</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [pure virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Called by the channel dispatcher when channels in which the observer has registered an interest are announced.</p>
<p>If the announced channels contains channels that match the <a class="el" href="classTp_1_1AbstractClientObserver.html#a573f7e277176df6adafa830a20ebadbe">observerChannelFilter()</a>, and some that do not, then only a subset of the channels (those that do match the filter) are passed to this method.</p>
<p>If the channel dispatcher will split up the channels from a single announcement and dispatch them separately (for instance because no installed handler can handle all of them), it will call this method several times.</p>
<p>The observer must not call <a class="el" href="classTp_1_1MethodInvocationContext.html#a178f52fefcc6ac93f1e9aef7c5c8b984">MethodInvocationContext::setFinished()</a> until it is ready for a handler for the channel to run (which may change the channel's state). For instance the received <em>context</em> object should be stored until this method is finished processing and then <a class="el" href="classTp_1_1MethodInvocationContext.html#a178f52fefcc6ac93f1e9aef7c5c8b984">MethodInvocationContext::setFinished()</a> or <a class="el" href="classTp_1_1MethodInvocationContext.html#accc180d53a757b3aa9bc9286dc464712">MethodInvocationContext::setFinishedWithError()</a> should be called on the received <em>context</em> object.</p>
<p>Specialized observers must reimplement this method.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>context</em>&nbsp;</td><td>A <a class="el" href="classTp_1_1MethodInvocationContextPtr.html">MethodInvocationContextPtr</a> object that must be used to indicate whether this method finished processing. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>account</em>&nbsp;</td><td>The account with which the channels are associated. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>connection</em>&nbsp;</td><td>The connection with which the channels are associated. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>channels</em>&nbsp;</td><td>The channels to be observed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dispatchOperation</em>&nbsp;</td><td>The dispatch operation for these channels. The object will be invalid (<a class="el" href="classTp_1_1DBusProxy.html#adb39028a597488f81d5f8bacfe822886">DBusProxy::isValid()</a> will be false) if there is no dispatch operation in place (because the channels were requested, not incoming). If the Observer calls <a class="el" href="classTp_1_1ChannelDispatchOperation.html#abe3cc768fce132036939f63384fe7c82">ChannelDispatchOperation::claim()</a> or <a class="el" href="classTp_1_1ChannelDispatchOperation.html#a6110ece4fc4e28a5a8fc071fb1871f9d">ChannelDispatchOperation::handleWith()</a> on this object, it must be careful to avoid deadlock, since these methods cannot return until the observer has returned from <a class="el" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels()</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>requestsSatisfied</em>&nbsp;</td><td>The requests satisfied by these channels. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>observerInfo</em>&nbsp;</td><td>Additional information about these channels. No keys are currently defined. If keys are defined for this dictionary, all will be optional; observers may safely ignore any entry in this dictionary. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div>
<p /><address><hr /><div align="center">
<table width="100%" cellspacing="0" border="0"><tr class="address">
<td width="30%">Copyright &copy; 2008-2010 Collabora Ltd. and Nokia Corporation</td>
<td width="30%" align="right"><div align="right">Telepathy-Qt4 0.3.6</div></td>
</tr></table></div></address>
</body>
</html>