dbus-cxx logo

objectproxy.h

Go to the documentation of this file.
00001 
00002 // -*- c++ -*-
00003 /* Do not edit! -- generated file */
00004 
00005 /***************************************************************************
00006  *   Copyright (C) 2009,2010 by Rick L. Vinyard, Jr.                       *
00007  *   rvinyard@cs.nmsu.edu                                                  *
00008  *                                                                         *
00009  *   This file is part of the dbus-cxx library.                            *
00010  *                                                                         *
00011  *   The dbus-cxx library is free software; you can redistribute it and/or *
00012  *   modify it under the terms of the GNU General Public License           *
00013  *   version 3 as published by the Free Software Foundation.               *
00014  *                                                                         *
00015  *   The dbus-cxx library is distributed in the hope that it will be       *
00016  *   useful, but WITHOUT ANY WARRANTY; without even the implied warranty   *
00017  *   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   *
00018  *   General Public License for more details.                              *
00019  *                                                                         *
00020  *   You should have received a copy of the GNU General Public License     *
00021  *   along with this software. If not see <http://www.gnu.org/licenses/>.  *
00022  ***************************************************************************/
00023 #include <sigc++/sigc++.h>
00024 
00025 #include <string>
00026 #include <map>
00027 
00028 #include <dbus-cxx/signal_proxy.h>
00029 #include <dbus-cxx/interfaceproxy.h>
00030 
00031 #ifndef DBUSCXX_OBJECTPROXY_H
00032 #define DBUSCXX_OBJECTPROXY_H
00033 
00034 namespace DBus
00035 {
00036 
00037   class Connection;
00038 
00177   class ObjectProxy
00178   {
00179     protected:
00180 
00185       ObjectProxy( DBusCxxPointer<Connection> conn, const std::string& destination, const std::string& path );
00186 
00187     public:
00188 
00194       typedef DBusCxxPointer<ObjectProxy> pointer;
00195 
00200       static pointer create( const std::string& path );
00201 
00207       static pointer create( const std::string& destination, const std::string& path );
00208 
00209       static pointer create( DBusCxxPointer<Connection> conn, const std::string& path );
00210 
00211       static pointer create( DBusCxxPointer<Connection> conn, const std::string& destination, const std::string& path );
00212 
00213       virtual ~ObjectProxy();
00214 
00215       DBusCxxPointer<Connection> connection() const;
00216 
00217       void set_connection( DBusCxxPointer<Connection> conn );
00218 
00219       const std::string& destination() const;
00220 
00221       void set_destination( const std::string& destination );
00222 
00223       const Path& path() const;
00224 
00225       void set_path( const std::string& path );
00226 
00227       typedef std::multimap<std::string, InterfaceProxy::pointer> Interfaces;
00228 
00229       const Interfaces& interfaces() const;
00230 
00232       InterfaceProxy::pointer interface( const std::string& name ) const;
00233 
00235       InterfaceProxy::pointer operator[]( const std::string& name ) const;
00236 
00238       bool add_interface( InterfaceProxy::pointer interface );
00239 
00245       InterfaceProxy::pointer create_interface( const std::string& name );
00246 
00248       void remove_interface( const std::string& name );
00249 
00251       void remove_interface( InterfaceProxy::pointer interface );
00252 
00253       bool has_interface( const std::string& name ) const;
00254 
00255       bool has_interface( InterfaceProxy::pointer interface ) const;
00256 
00257       InterfaceProxy::pointer default_interface() const;
00258 
00259       bool set_default_interface( const std::string& new_default_name );
00260 
00261       bool set_default_interface( InterfaceProxy::pointer new_default );
00262 
00263       void remove_default_interface();
00264 
00266       bool add_method( const std::string& interface, MethodProxyBase::pointer method );
00267 
00269       bool add_method( MethodProxyBase::pointer method );
00270 
00271       CallMessage::pointer create_call_message( const std::string& interface_name, const std::string& method_name ) const;
00272 
00273       CallMessage::pointer create_call_message( const std::string& method_name ) const;
00274 
00275       ReturnMessage::const_pointer call( CallMessage::const_pointer, int timeout_milliseconds=-1 ) const;
00276 
00277       PendingCall::pointer call_async( CallMessage::const_pointer, int timeout_milliseconds=-1 ) const;
00278 
00285       template <class T_return>
00286       DBusCxxPointer<MethodProxy<T_return> >
00287       create_method( const std::string& interface_name, const std::string& method_name )
00288       {
00289         InterfaceProxy::pointer interface = this->interface(interface_name);
00290         if ( not interface ) interface = this->create_interface( interface_name );
00291         return interface->create_method<T_return>(method_name);
00292       }
00293 
00300       template <class T_return, class T_arg1>
00301       DBusCxxPointer<MethodProxy<T_return, T_arg1> >
00302       create_method( const std::string& interface_name, const std::string& method_name )
00303       {
00304         InterfaceProxy::pointer interface = this->interface(interface_name);
00305         if ( not interface ) interface = this->create_interface( interface_name );
00306         return interface->create_method<T_return, T_arg1>(method_name);
00307       }
00308 
00315       template <class T_return, class T_arg1,class T_arg2>
00316       DBusCxxPointer<MethodProxy<T_return, T_arg1,T_arg2> >
00317       create_method( const std::string& interface_name, const std::string& method_name )
00318       {
00319         InterfaceProxy::pointer interface = this->interface(interface_name);
00320         if ( not interface ) interface = this->create_interface( interface_name );
00321         return interface->create_method<T_return, T_arg1,T_arg2>(method_name);
00322       }
00323 
00330       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00331       DBusCxxPointer<MethodProxy<T_return, T_arg1,T_arg2,T_arg3> >
00332       create_method( const std::string& interface_name, const std::string& method_name )
00333       {
00334         InterfaceProxy::pointer interface = this->interface(interface_name);
00335         if ( not interface ) interface = this->create_interface( interface_name );
00336         return interface->create_method<T_return, T_arg1,T_arg2,T_arg3>(method_name);
00337       }
00338 
00345       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00346       DBusCxxPointer<MethodProxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00347       create_method( const std::string& interface_name, const std::string& method_name )
00348       {
00349         InterfaceProxy::pointer interface = this->interface(interface_name);
00350         if ( not interface ) interface = this->create_interface( interface_name );
00351         return interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(method_name);
00352       }
00353 
00360       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00361       DBusCxxPointer<MethodProxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00362       create_method( const std::string& interface_name, const std::string& method_name )
00363       {
00364         InterfaceProxy::pointer interface = this->interface(interface_name);
00365         if ( not interface ) interface = this->create_interface( interface_name );
00366         return interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(method_name);
00367       }
00368 
00375       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00376       DBusCxxPointer<MethodProxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00377       create_method( const std::string& interface_name, const std::string& method_name )
00378       {
00379         InterfaceProxy::pointer interface = this->interface(interface_name);
00380         if ( not interface ) interface = this->create_interface( interface_name );
00381         return interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(method_name);
00382       }
00383 
00390       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
00391       DBusCxxPointer<MethodProxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00392       create_method( const std::string& interface_name, const std::string& method_name )
00393       {
00394         InterfaceProxy::pointer interface = this->interface(interface_name);
00395         if ( not interface ) interface = this->create_interface( interface_name );
00396         return interface->create_method<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(method_name);
00397       }
00398 
00399 
00406       template <class T_return>
00407       DBusCxxPointer<signal_proxy<T_return> >
00408       create_signal( const std::string& interface_name, const std::string& sig_name )
00409       {
00410         InterfaceProxy::pointer interface = this->interface(interface_name);
00411         if ( not interface ) interface = this->create_interface( interface_name );
00412         return interface->create_signal<T_return>(sig_name);
00413       }
00414 
00421       template <class T_return, class T_arg1>
00422       DBusCxxPointer<signal_proxy<T_return, T_arg1> >
00423       create_signal( const std::string& interface_name, const std::string& sig_name )
00424       {
00425         InterfaceProxy::pointer interface = this->interface(interface_name);
00426         if ( not interface ) interface = this->create_interface( interface_name );
00427         return interface->create_signal<T_return, T_arg1>(sig_name);
00428       }
00429 
00436       template <class T_return, class T_arg1,class T_arg2>
00437       DBusCxxPointer<signal_proxy<T_return, T_arg1,T_arg2> >
00438       create_signal( const std::string& interface_name, const std::string& sig_name )
00439       {
00440         InterfaceProxy::pointer interface = this->interface(interface_name);
00441         if ( not interface ) interface = this->create_interface( interface_name );
00442         return interface->create_signal<T_return, T_arg1,T_arg2>(sig_name);
00443       }
00444 
00451       template <class T_return, class T_arg1,class T_arg2,class T_arg3>
00452       DBusCxxPointer<signal_proxy<T_return, T_arg1,T_arg2,T_arg3> >
00453       create_signal( const std::string& interface_name, const std::string& sig_name )
00454       {
00455         InterfaceProxy::pointer interface = this->interface(interface_name);
00456         if ( not interface ) interface = this->create_interface( interface_name );
00457         return interface->create_signal<T_return, T_arg1,T_arg2,T_arg3>(sig_name);
00458       }
00459 
00466       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4>
00467       DBusCxxPointer<signal_proxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4> >
00468       create_signal( const std::string& interface_name, const std::string& sig_name )
00469       {
00470         InterfaceProxy::pointer interface = this->interface(interface_name);
00471         if ( not interface ) interface = this->create_interface( interface_name );
00472         return interface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(sig_name);
00473       }
00474 
00481       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
00482       DBusCxxPointer<signal_proxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> >
00483       create_signal( const std::string& interface_name, const std::string& sig_name )
00484       {
00485         InterfaceProxy::pointer interface = this->interface(interface_name);
00486         if ( not interface ) interface = this->create_interface( interface_name );
00487         return interface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(sig_name);
00488       }
00489 
00496       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
00497       DBusCxxPointer<signal_proxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> >
00498       create_signal( const std::string& interface_name, const std::string& sig_name )
00499       {
00500         InterfaceProxy::pointer interface = this->interface(interface_name);
00501         if ( not interface ) interface = this->create_interface( interface_name );
00502         return interface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(sig_name);
00503       }
00504 
00511       template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
00512       DBusCxxPointer<signal_proxy<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> >
00513       create_signal( const std::string& interface_name, const std::string& sig_name )
00514       {
00515         InterfaceProxy::pointer interface = this->interface(interface_name);
00516         if ( not interface ) interface = this->create_interface( interface_name );
00517         return interface->create_signal<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(sig_name);
00518       }
00519 
00520 
00521       sigc::signal<void,InterfaceProxy::pointer> signal_interface_added();
00522 
00523       sigc::signal<void,InterfaceProxy::pointer> signal_interface_removed();
00524 
00525       sigc::signal<void,InterfaceProxy::pointer/*old default*/,InterfaceProxy::pointer/*new default*/> signal_default_interface_changed();
00526 
00527     protected:
00528 
00529       DBusCxxPointer<Connection> m_connection;
00530 
00531       std::string m_destination;
00532 
00533       Path m_path;
00534       
00535       mutable pthread_rwlock_t m_interfaces_rwlock;
00536 
00537       pthread_mutex_t m_name_mutex;
00538 
00539       Interfaces m_interfaces;
00540 
00541       InterfaceProxy::pointer m_default_interface;
00542 
00543       sigc::signal<void,InterfaceProxy::pointer,InterfaceProxy::pointer> m_signal_default_interface_changed;
00544 
00545       sigc::signal<void,InterfaceProxy::pointer> m_signal_interface_added;
00546 
00547       sigc::signal<void,InterfaceProxy::pointer> m_signal_interface_removed;
00548 
00549       typedef std::map<InterfaceProxy::pointer,sigc::connection> InterfaceSignalNameConnections;
00550 
00551       InterfaceSignalNameConnections m_interface_signal_name_connections;
00552 
00553       void on_interface_name_changed(const std::string& oldname, const std::string& newname, InterfaceProxy::pointer interface);
00554 
00555   };
00556 
00557 }
00558 
00559 #endif

Generated on Thu Mar 18 09:30:55 2010 for dbus-cxx by doxygen 1.6.1