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"> </td>
<td class="postheader" valign="center">
<a href="index.html">
<font color="#004faf">Home</font></a> ·
<a href="classes.html">
<font color="#004faf">All Classes</font></a> ·
<a href="namespaces.html">
<font color="#004faf">All Namespaces</font></a> ·
<a href="modules.html">
<font color="#004faf">Modules</font></a> ·
<a href="functions.html">
<font color="#004faf">Functions</font></a> ·
<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 <<a class="el" href="abstract-client_8h_source.html">TelepathyQt4/AbstractClientObserver</a>></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><> &context, const <a class="el" href="classTp_1_1SharedPtr.html">AccountPtr</a> &account, const <a class="el" href="classTp_1_1SharedPtr.html">ConnectionPtr</a> &connection, const QList< <a class="el" href="classTp_1_1SharedPtr.html">ChannelPtr</a> > &channels, const <a class="el" href="classTp_1_1SharedPtr.html">ChannelDispatchOperationPtr</a> &dispatchOperation, const QList< <a class="el" href="classTp_1_1SharedPtr.html">ChannelRequestPtr</a> > &requestsSatisfied, const QVariantMap &observerInfo)=0
</ul>
<h2>Protected Member Functions</h2>
<ul>
<li><a class="el" href="classTp_1_1AbstractClientObserver.html#acba26a0800eb1c8111d7e2d9ab221361">AbstractClientObserver</a> (const ChannelClassList &channelFilter)
<li><a class="el" href="classTp_1_1AbstractClientObserver.html#a094ac2b3902c44ad01ddfde342a699d4">AbstractClientObserver</a> (const ChannelClassList &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 &channelFilter);
~MyObserver() { }
<span class="keywordtype">void</span> <a class="code" href="classTp_1_1AbstractClientObserver.html#a63c940820635ac64c5a321a90b9c2a1a">observeChannels</a>(<span class="keyword">const</span> MethodInvocationContextPtr<> &context,
<span class="keyword">const</span> <a class="code" href="namespaceTp.html#a978ade1e5c3edfe11ae75b1cc8c458dd">AccountPtr</a> &account,
<span class="keyword">const</span> <a class="code" href="namespaceTp.html#a225af181e21bd9c2fb5ab3394d4fc4ef">ConnectionPtr</a> &connection,
<span class="keyword">const</span> QList<ChannelPtr> &channels,
<span class="keyword">const</span> <a class="code" href="namespaceTp.html#a68567d763e9c2af9e3819d522c7c1bd3">ChannelDispatchOperationPtr</a> &dispatchOperation,
<span class="keyword">const</span> QList<ChannelRequestPtr> &requestsSatisfied,
<span class="keyword">const</span> QVariantMap &observerInfo);
};
MyObserver::MyObserver(<span class="keyword">const</span> ChannelClassList &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<> &context,
<span class="keyword">const</span> <a class="code" href="namespaceTp.html#a978ade1e5c3edfe11ae75b1cc8c458dd">AccountPtr</a> &account,
<span class="keyword">const</span> <a class="code" href="namespaceTp.html#a225af181e21bd9c2fb5ab3394d4fc4ef">ConnectionPtr</a> &connection,
<span class="keyword">const</span> QList<ChannelPtr> &channels,
<span class="keyword">const</span> <a class="code" href="namespaceTp.html#a68567d763e9c2af9e3819d522c7c1bd3">ChannelDispatchOperationPtr</a> &dispatchOperation,
<span class="keyword">const</span> QList<ChannelRequestPtr> &requestsSatisfied,
<span class="keyword">const</span> QVariantMap &observerInfo)
{
<span class="comment">// do something, log messages, ...</span>
context->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<QString, QDBusVariant> filter;
filter.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL <span class="stringliteral">".ChannelType"</span>),
QDBusVariant(QLatin1String(TELEPATHY_INTERFACE_CHANNEL_TYPE_TEXT)));
filter.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL <span class="stringliteral">".TargetHandleType"</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<MyObserver>(<span class="keyword">new</span> MyObserver(filter)));
registrar->registerClient(observer, <span class="stringliteral">"myobserver"</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 & 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> ) </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 &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 & </td>
<td class="paramname"> <em>channelFilter</em></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>
<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> </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 &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 & </td>
<td class="paramname"> <em>channelFilter</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool </td>
<td class="paramname"> <em>shouldRecover</em></td><td> </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> </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> </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> ) </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> ) </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> </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<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList< ChannelPtr > &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList< ChannelRequestPtr > &requestsSatisfied, const QVariantMap &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><> & </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> & </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> & </td>
<td class="paramname"> <em>connection</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QList< <a class="el" href="classTp_1_1SharedPtr.html">ChannelPtr</a> > & </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> & </td>
<td class="paramname"> <em>dispatchOperation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QList< <a class="el" href="classTp_1_1SharedPtr.html">ChannelRequestPtr</a> > & </td>
<td class="paramname"> <em>requestsSatisfied</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QVariantMap & </td>
<td class="paramname"> <em>observerInfo</em></td><td> </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> </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> </td><td>The account with which the channels are associated. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>connection</em> </td><td>The connection with which the channels are associated. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channels</em> </td><td>The channels to be observed. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dispatchOperation</em> </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> </td><td>The requests satisfied by these channels. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>observerInfo</em> </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 © 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>
|