Sophie

Sophie

distrib > Mandriva > 2011.0 > x86_64 > by-pkgid > e4e5aca55b6d7244e6bae95bf4fde3ca > files > 218

lib64edelib-devel-2.0-1.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>edelib: EdbusConnection Class Reference</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">edelib
   &#160;<span id="projectnumber">2.0.0</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="namespaceedelib.html">edelib</a>      </li>
      <li class="navelem"><a class="el" href="classedelib_1_1EdbusConnection.html">EdbusConnection</a>      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a>  </div>
  <div class="headertitle">
<div class="title">EdbusConnection Class Reference<div class="ingroups"><a class="el" href="group__dbus.html">D-Bus classes and functions</a></div></div>  </div>
</div><!--header-->
<div class="contents">
<!-- doxytag: class="edelib::EdbusConnection" -->
<p>D-Bus connection and data sender.  
 <a href="classedelib_1_1EdbusConnection.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="EdbusConnection_8h_source.html">edelib/EdbusConnection.h</a>&gt;</code></p>

<p><a href="classedelib_1_1EdbusConnection-members.html">List of all members.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a58f28852b509cebb33ccd9203243585d">EdbusConnection</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#afc5e831bb17c5104d57fb8cd15d0816f">~EdbusConnection</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a4bb64729914de38f200b6bf4e3b0c9fd">connect</a> (<a class="el" href="group__dbus.html#gac4e8550cea3a57aa6d5d45d1d2e1a4a4">EdbusConnectionType</a> ctype)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a888a5acf1fe3a8902f7cb2f5039cb334">disconnect</a> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a4c7151beb17dfed1d4f508731c2e3dee">send</a> (const <a class="el" href="classedelib_1_1EdbusMessage.html">EdbusMessage</a> &amp;content)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a2aefa01b6722736ff2a69b60aec9b6eb">send_with_reply_and_block</a> (const <a class="el" href="classedelib_1_1EdbusMessage.html">EdbusMessage</a> &amp;content, int timeout_ms, <a class="el" href="classedelib_1_1EdbusMessage.html">EdbusMessage</a> &amp;ret)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#aa42a49b80a3e0bddc537023a5f5468e4">request_name</a> (const char *name, int mode=<a class="el" href="namespaceedelib.html#gacfb894cef85a000b613a0cf3649015b8a16bee5562b63d130d5c0f6a9706c6faa">EDBUS_NAME_NO_REPLACE</a>)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a3ab78cd2bd350685d7c0676035f5a67a">unique_name</a> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a354d9df12bec53204f5f706928143aca">signal_callback</a> (<a class="el" href="group__dbus.html#ga43d49d1e7cd616e446beeb999075f7e9">EdbusCallback</a> cb, void *data)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#ae881d5a898afa065fe0eb10be6005957">method_callback</a> (<a class="el" href="group__dbus.html#ga43d49d1e7cd616e446beeb999075f7e9">EdbusCallback</a> cb, void *data)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a2d68803fadacbe3655a5e29895ca364b">add_signal_match</a> (const char *path, const char *interface, const char *name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#ad59154960eb2628fa859d68cc3df1910">add_method_match</a> (const char *path, const char *interface, const char *name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a36856f87c931543b2a4cdc53ef0b0151">register_object</a> (const char *path)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a7ad9a943541f3091baf8c1605914f257">unregister_object</a> (const char *path)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a2c3ea2abfa833f14f3030647a7556c30">setup_listener</a> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#acb4d5503616d46e25614657474c8f250">setup_listener_with_fltk</a> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a09204ec3dabc15789bf56e9866ff627e">wait</a> (int timeout_ms)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classedelib_1_1EdbusError.html">EdbusError</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classedelib_1_1EdbusConnection.html#a6be6efffce89d7730e770bb8a52be048">error</a> (void)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>D-Bus connection and data sender. </p>
<p>This is the main class representing connection to the D-Bus daemon. Besides doing actual connection, this class is used also to send and receive messages.</p>
<p><a class="el" href="classedelib_1_1EdbusConnection.html" title="D-Bus connection and data sender.">EdbusConnection</a> implements <em>message loop</em>; it will wait until message arrived or until message was send. Because of this, <a class="el" href="classedelib_1_1EdbusConnection.html" title="D-Bus connection and data sender.">EdbusConnection</a> implements two way of looping:</p>
<ul>
<li>ordinary loop</li>
<li>loop via FLTK</li>
</ul>
<p>Ordinary loop is recomended only in non-gui applications; it will block until connection was closed or object was destroyed in different way. </p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classedelib_1_1EdbusConnection.html#a2c3ea2abfa833f14f3030647a7556c30">EdbusConnection::setup_listener()</a></dd></dl>
<p>Looping via FLTK (relying on <em>Fl::run()</em> or <em>Fl::wait()</em>) will be used for gui applications; gui components will receive own events and callbacks, but in the same time <a class="el" href="classedelib_1_1EdbusConnection.html" title="D-Bus connection and data sender.">EdbusConnection</a> will also be able to listen and send messages. </p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classedelib_1_1EdbusConnection.html#acb4d5503616d46e25614657474c8f250">EdbusConnection::setup_listener_with_fltk()</a></dd></dl>
<p>To connect to the bus, <a class="el" href="classedelib_1_1EdbusConnection.html#a4bb64729914de38f200b6bf4e3b0c9fd">connect()</a> must be called first with one of EdbusConnectionType values. All messages will be sent to that bus type until <a class="el" href="classedelib_1_1EdbusConnection.html#a888a5acf1fe3a8902f7cb2f5039cb334">disconnect()</a> was called or object were destroyed.</p>
<p>In case you want to listen for calls, you would acquire name via <a class="el" href="classedelib_1_1EdbusConnection.html#aa42a49b80a3e0bddc537023a5f5468e4">EdbusConnection::request_name()</a>, on what clients will connect. You would also register object via <a class="el" href="classedelib_1_1EdbusConnection.html#a36856f87c931543b2a4cdc53ef0b0151">EdbusConnection::register_object()</a>.</p>
<p>With <a class="el" href="classedelib_1_1EdbusConnection.html" title="D-Bus connection and data sender.">EdbusConnection</a> you can send two types of messages:</p>
<ul>
<li>signals</li>
<li>methods</li>
</ul>
<p>Messages are recived via callbacks. Edbus splits callbacks on:</p>
<ul>
<li>signal callbacks (<a class="el" href="classedelib_1_1EdbusConnection.html#a354d9df12bec53204f5f706928143aca">EdbusConnection::signal_callback()</a>)</li>
<li>method callbacks (<a class="el" href="classedelib_1_1EdbusConnection.html#ae881d5a898afa065fe0eb10be6005957">EdbusConnection::method_callback()</a>)</li>
</ul>
<p>Here is the example of one application that will listen "Foo" signal: </p>
<div class="fragment"><pre class="fragment">  <span class="keywordtype">int</span> sig_cb(<span class="keyword">const</span> EdbusMessage* m, <span class="keywordtype">void</span>*) {
    printf(<span class="stringliteral">&quot;Got signal: %s : %s : %s\n&quot;</span>, m-&gt;path(), m-&gt;interface(), m-&gt;member());
    
    <span class="comment">// this means signal were processed so dbus can discard it</span>
    <span class="keywordflow">return</span> 1;
  }

  <span class="keywordtype">int</span> main() {
    <a class="code" href="classedelib_1_1EdbusConnection.html#a58f28852b509cebb33ccd9203243585d">EdbusConnection</a> conn;
    <span class="keywordflow">if</span>(!conn.connect(<a class="code" href="namespaceedelib.html#gac4e8550cea3a57aa6d5d45d1d2e1a4a4aa8fb2ee2552400649ffa371d728f575d" title="Session bus.">EDBUS_SESSION</a>))
      <span class="comment">// fail</span>

    <span class="keywordflow">if</span>(!conn.request_name(<span class="stringliteral">&quot;org.test.Server&quot;</span>))
      <span class="comment">// fail</span>

    srv.register_object(<span class="stringliteral">&quot;/org/test/Server/Foo&quot;</span>);
    srv.signal_callback(sig_cb, 0);

    <span class="comment">// looping stuff</span>
    srv.setup_listener()
    <span class="keywordflow">while</span>(srv.wait(1000))
      ;

    <span class="keywordflow">return</span> 0;
  }
</pre></div><p>Here is application that will send "Foo" signal: </p>
<div class="fragment"><pre class="fragment">  <span class="keywordtype">int</span> main() {
    <a class="code" href="classedelib_1_1EdbusConnection.html#a58f28852b509cebb33ccd9203243585d">EdbusConnection</a> conn;
    <span class="keywordflow">if</span>(!conn.connect(<a class="code" href="namespaceedelib.html#gac4e8550cea3a57aa6d5d45d1d2e1a4a4aa8fb2ee2552400649ffa371d728f575d" title="Session bus.">EDBUS_SESSION</a>))
      <span class="comment">// fail</span>

    <span class="comment">// create empty signal message without any parameters</span>
    EdbusMessage msg;
    msg.create_signal(<span class="stringliteral">&quot;/org/test/Server/Foo&quot;</span>, <span class="stringliteral">&quot;org.test.Signal&quot;</span>, <span class="stringliteral">&quot;Foo&quot;</span>);

    <span class="comment">// send it</span>
    conn.send(msg);
    <span class="keywordflow">return</span> 0;
  }
</pre></div> </div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a58f28852b509cebb33ccd9203243585d"></a><!-- doxytag: member="edelib::EdbusConnection::EdbusConnection" ref="a58f28852b509cebb33ccd9203243585d" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classedelib_1_1EdbusConnection.html">EdbusConnection</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Creates empty object. You can't do anything usefull with it unless call <a class="el" href="classedelib_1_1EdbusConnection.html#a4bb64729914de38f200b6bf4e3b0c9fd">connect()</a> after. </p>

</div>
</div>
<a class="anchor" id="afc5e831bb17c5104d57fb8cd15d0816f"></a><!-- doxytag: member="edelib::EdbusConnection::~EdbusConnection" ref="afc5e831bb17c5104d57fb8cd15d0816f" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">~<a class="el" href="classedelib_1_1EdbusConnection.html">EdbusConnection</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Destroys object. Also disconnect from bus if connection is alive. </p>

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="ad59154960eb2628fa859d68cc3df1910"></a><!-- doxytag: member="edelib::EdbusConnection::add_method_match" ref="ad59154960eb2628fa859d68cc3df1910" args="(const char *path, const char *interface, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#ad59154960eb2628fa859d68cc3df1910">add_method_match</a> </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>interface</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Install matcher for requested method calls. All method calls that matches to the given path, interface and name will be reported via method callback registered with <a class="el" href="classedelib_1_1EdbusConnection.html#ae881d5a898afa065fe0eb10be6005957">method_callback()</a>.</p>
<p>This is not too much suitable as signal matchers since you definitely wants to listen all method requests that client sends directly to you.</p>
<p>You can install more matchers. </p>

</div>
</div>
<a class="anchor" id="a2d68803fadacbe3655a5e29895ca364b"></a><!-- doxytag: member="edelib::EdbusConnection::add_signal_match" ref="a2d68803fadacbe3655a5e29895ca364b" args="(const char *path, const char *interface, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#a2d68803fadacbe3655a5e29895ca364b">add_signal_match</a> </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>interface</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Install matcher for received signals. All signals that matches to the given path, interface and name will be reported via signal callback registered with <a class="el" href="classedelib_1_1EdbusConnection.html#a354d9df12bec53204f5f706928143aca">signal_callback()</a>.</p>
<p>You can install more matchers. </p>

</div>
</div>
<a class="anchor" id="a4bb64729914de38f200b6bf4e3b0c9fd"></a><!-- doxytag: member="edelib::EdbusConnection::connect" ref="a4bb64729914de38f200b6bf4e3b0c9fd" args="(EdbusConnectionType ctype)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classedelib_1_1EdbusConnection.html#a4bb64729914de38f200b6bf4e3b0c9fd">connect</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__dbus.html#gac4e8550cea3a57aa6d5d45d1d2e1a4a4">EdbusConnectionType</a>&#160;</td>
          <td class="paramname"><em>ctype</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Connects to either session or system bus.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if connected, otherwise false and <a class="el" href="classedelib_1_1EdbusError.html" title="A class representing D-Bus error.">EdbusError</a> object will be set </dd></dl>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">ctype</td><td>says what connection is requested </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a888a5acf1fe3a8902f7cb2f5039cb334"></a><!-- doxytag: member="edelib::EdbusConnection::disconnect" ref="a888a5acf1fe3a8902f7cb2f5039cb334" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#a888a5acf1fe3a8902f7cb2f5039cb334">disconnect</a> </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Disconnects from bus. Also clears internal watchers so you can issue <a class="el" href="classedelib_1_1EdbusConnection.html#a4bb64729914de38f200b6bf4e3b0c9fd">connect()</a> again. </p>

</div>
</div>
<a class="anchor" id="a6be6efffce89d7730e770bb8a52be048"></a><!-- doxytag: member="edelib::EdbusConnection::error" ref="a6be6efffce89d7730e770bb8a52be048" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classedelib_1_1EdbusError.html">EdbusError</a>* <a class="el" href="classedelib_1_1EdbusConnection.html#a6be6efffce89d7730e770bb8a52be048">error</a> </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return last error that happened; if error wasn't set, returned value will be NULL. Error can be invalid, so it must be checked too. </p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classedelib_1_1EdbusError.html#a3e1c01e3ec5023494efa84693d14bda3">EdbusError::valid()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ae881d5a898afa065fe0eb10be6005957"></a><!-- doxytag: member="edelib::EdbusConnection::method_callback" ref="ae881d5a898afa065fe0eb10be6005957" args="(EdbusCallback cb, void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#ae881d5a898afa065fe0eb10be6005957">method_callback</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__dbus.html#ga43d49d1e7cd616e446beeb999075f7e9">EdbusCallback</a>&#160;</td>
          <td class="paramname"><em>cb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Register callback for method call. When peer requests a call from this connection, this function will be called. <a class="el" href="classedelib_1_1EdbusMessage.html" title="Data transporter for D-Bus.">EdbusMessage</a> parameter is arguments for method call.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">cb</td><td>is callback </td></tr>
    <tr><td class="paramname">data</td><td>is optional data that will be passed to the callback </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a36856f87c931543b2a4cdc53ef0b0151"></a><!-- doxytag: member="edelib::EdbusConnection::register_object" ref="a36856f87c931543b2a4cdc53ef0b0151" args="(const char *path)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#a36856f87c931543b2a4cdc53ef0b0151">register_object</a> </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>path</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Register objects this connection will server. A path must be valid D-Bus object path and this function will assert if otherwise. If object already registered, it will not be added any more.</p>
<p>You can register more that one object.</p>
<p>If you registered at least one object, data not send to it will be ignored. On other hand, if none object was added, other objects receiving data will be reported here too.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>This function only stores pointer to the string, so <em>make sure</em> it is in static memory </dd></dl>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000009">Todo:</a></b></dt><dd>remove it? </dd></dl>

</div>
</div>
<a class="anchor" id="aa42a49b80a3e0bddc537023a5f5468e4"></a><!-- doxytag: member="edelib::EdbusConnection::request_name" ref="aa42a49b80a3e0bddc537023a5f5468e4" args="(const char *name, int mode=EDBUS_NAME_NO_REPLACE)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classedelib_1_1EdbusConnection.html#aa42a49b80a3e0bddc537023a5f5468e4">request_name</a> </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>mode</em> = <code><a class="el" href="namespaceedelib.html#gacfb894cef85a000b613a0cf3649015b8a16bee5562b63d130d5c0f6a9706c6faa">EDBUS_NAME_NO_REPLACE</a></code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Try to set readable name, e.g. <em>org.equinoxproject.Listener</em>. If <a class="el" href="classedelib_1_1EdbusConnection.html" title="D-Bus connection and data sender.">EdbusConnection</a> object wants to accept messages, clients will send them to this name.</p>
<p>This function also can be used to assure unique name in the bus; if you set EDBUS_NAME_NO_REPLACE every other call (from program itself or external program) for request with the same name will return false value. This does not mean you will not receive a bus messages; they would be queued and dispatched among listeners with the same name.</p>
<p>With other flags (EDBUS_NAME_REPLACE_EXISTING and EDBUS_NAME_NO_REPLACE) you can achieve smooth name replacement. For example, if you have program service1 that registered org.example.Service and (during runtime) want to replace it with upgraded or modified service2, simply setting in service2 EDBUS_NAME_REPLACE_EXISTING flag, and EDBUS_NAME_ALLOW_REPLACE service1 will do the job. Then, service1 will receive <em>NameLost</em> from org.freedesktop.DBus interface and can choose to quit or do something else.</p>
<p><em>mode</em> flags can be OR-ed, so EDBUS_NAME_ALLOW_REPLACE | EDBUS_NAME_REPLACE_EXISTING can work in both programs (in given example), except <em>NameLost</em> will receive program that was started first, but <a class="el" href="classedelib_1_1EdbusConnection.html#aa42a49b80a3e0bddc537023a5f5468e4">request_name()</a> will not return false. OR-ing with EDBUS_NAME_NO_REPLACE have no much sense, and if is detected, it is considered as plain EDBUS_NAME_NO_REPLACE.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if got requested name or false if not and <a class="el" href="classedelib_1_1EdbusError.html" title="A class representing D-Bus error.">EdbusError</a> object (get via <a class="el" href="classedelib_1_1EdbusConnection.html#a6be6efffce89d7730e770bb8a52be048">error()</a>) will be set </dd></dl>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>is name to be requested </td></tr>
    <tr><td class="paramname">mode</td><td>is what to do when requested name already exists </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a4c7151beb17dfed1d4f508731c2e3dee"></a><!-- doxytag: member="edelib::EdbusConnection::send" ref="a4c7151beb17dfed1d4f508731c2e3dee" args="(const EdbusMessage &amp;content)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classedelib_1_1EdbusConnection.html#a4c7151beb17dfed1d4f508731c2e3dee">send</a> </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classedelib_1_1EdbusMessage.html">EdbusMessage</a> &amp;&#160;</td>
          <td class="paramname"><em>content</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Sends a message.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if succesfully got reply </dd></dl>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">content</td><td>is message to be send</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>if <a class="el" href="classedelib_1_1EdbusConnection.html#a4c7151beb17dfed1d4f508731c2e3dee">send()</a> fails, <a class="el" href="classedelib_1_1EdbusError.html" title="A class representing D-Bus error.">EdbusError</a> will not be set since D-BUS default send function does not set error </dd></dl>

</div>
</div>
<a class="anchor" id="a2aefa01b6722736ff2a69b60aec9b6eb"></a><!-- doxytag: member="edelib::EdbusConnection::send_with_reply_and_block" ref="a2aefa01b6722736ff2a69b60aec9b6eb" args="(const EdbusMessage &amp;content, int timeout_ms, EdbusMessage &amp;ret)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classedelib_1_1EdbusConnection.html#a2aefa01b6722736ff2a69b60aec9b6eb">send_with_reply_and_block</a> </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classedelib_1_1EdbusMessage.html">EdbusMessage</a> &amp;&#160;</td>
          <td class="paramname"><em>content</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>timeout_ms</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classedelib_1_1EdbusMessage.html">EdbusMessage</a> &amp;&#160;</td>
          <td class="paramname"><em>ret</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Call remote method and wait for reply. It will block untill reply is arrived or timer exceeded.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if succesfully got reply or false if not and <a class="el" href="classedelib_1_1EdbusError.html" title="A class representing D-Bus error.">EdbusError</a> object (get via <a class="el" href="classedelib_1_1EdbusConnection.html#a6be6efffce89d7730e770bb8a52be048">error()</a>) will be set </dd></dl>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">content</td><td>is message to be send </td></tr>
    <tr><td class="paramname">timeout_ms</td><td>is waiting time for arrival in milliseconds </td></tr>
    <tr><td class="paramname">ret</td><td>will be filled with reply content if this function returns true </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a2c3ea2abfa833f14f3030647a7556c30"></a><!-- doxytag: member="edelib::EdbusConnection::setup_listener" ref="a2c3ea2abfa833f14f3030647a7556c30" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#a2c3ea2abfa833f14f3030647a7556c30">setup_listener</a> </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Setup listening stuff. After this, <a class="el" href="classedelib_1_1EdbusConnection.html" title="D-Bus connection and data sender.">EdbusConnection</a> object will be ready to accept requests.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>You want to call <a class="el" href="classedelib_1_1EdbusConnection.html#a09204ec3dabc15789bf56e9866ff627e">wait()</a> after this so listener can await requests in the loop. </dd></dl>

</div>
</div>
<a class="anchor" id="acb4d5503616d46e25614657474c8f250"></a><!-- doxytag: member="edelib::EdbusConnection::setup_listener_with_fltk" ref="acb4d5503616d46e25614657474c8f250" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#acb4d5503616d46e25614657474c8f250">setup_listener_with_fltk</a> </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The same as <a class="el" href="classedelib_1_1EdbusConnection.html#a2c3ea2abfa833f14f3030647a7556c30">setup_listener()</a> except it will be integrated in FLTK application without blocking FLTK event loops. After this you will call either <em>Fl::run()</em> of <em>Fl::wait()</em> </p>

</div>
</div>
<a class="anchor" id="a354d9df12bec53204f5f706928143aca"></a><!-- doxytag: member="edelib::EdbusConnection::signal_callback" ref="a354d9df12bec53204f5f706928143aca" args="(EdbusCallback cb, void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#a354d9df12bec53204f5f706928143aca">signal_callback</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__dbus.html#ga43d49d1e7cd616e446beeb999075f7e9">EdbusCallback</a>&#160;</td>
          <td class="paramname"><em>cb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Register callback for signal arrival. When signal is arrived, it will be passed to the callback as <a class="el" href="classedelib_1_1EdbusMessage.html" title="Data transporter for D-Bus.">EdbusMessage</a> where you can extract content via it's members.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">cb</td><td>is callback </td></tr>
    <tr><td class="paramname">data</td><td>is optional data that will be passed to the callback </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a3ab78cd2bd350685d7c0676035f5a67a"></a><!-- doxytag: member="edelib::EdbusConnection::unique_name" ref="a3ab78cd2bd350685d7c0676035f5a67a" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* <a class="el" href="classedelib_1_1EdbusConnection.html#a3ab78cd2bd350685d7c0676035f5a67a">unique_name</a> </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get unique name for this connection. Returned value have sense only for D-BUS. </p>

</div>
</div>
<a class="anchor" id="a7ad9a943541f3091baf8c1605914f257"></a><!-- doxytag: member="edelib::EdbusConnection::unregister_object" ref="a7ad9a943541f3091baf8c1605914f257" args="(const char *path)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classedelib_1_1EdbusConnection.html#a7ad9a943541f3091baf8c1605914f257">unregister_object</a> </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>path</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Unregister already registered object. </p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000010">Todo:</a></b></dt><dd>remove it? </dd></dl>

</div>
</div>
<a class="anchor" id="a09204ec3dabc15789bf56e9866ff627e"></a><!-- doxytag: member="edelib::EdbusConnection::wait" ref="a09204ec3dabc15789bf56e9866ff627e" args="(int timeout_ms)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classedelib_1_1EdbusConnection.html#a09204ec3dabc15789bf56e9866ff627e">wait</a> </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>timeout_ms</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Run listener and wait clients connection or signals. This is blocking call and is assumed it will not be run inside GUI application. For FLTK GUI application, you should use <a class="el" href="classedelib_1_1EdbusConnection.html#acb4d5503616d46e25614657474c8f250">setup_listener_with_fltk()</a>.</p>
<p>This function can be used similar to the <em>Fl::wait()</em>, like: </p>
<div class="fragment"><pre class="fragment">   <span class="comment">// init objects and etc.</span>
   conn.setup_listener();
   <span class="keywordflow">while</span>(conn.wait(1000))
     ;
</pre></div><dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">timeout_ms</td><td>is time in milliseconds to wait for connections </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>edelib/<a class="el" href="EdbusConnection_8h_source.html">EdbusConnection.h</a></li>
</ul>
</div><!-- contents -->


<hr class="footer"/><address class="footer"><small>
Generated on Tue Jun 5 2012 17:49:02 for edelib by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>

</body>
</html>