Re: [Cppcms-users] Design decision
Brought to you by:
artyom-beilis
From: Artyom B. <art...@ya...> - 2012-10-04 12:37:13
|
Read more about std::bind / boost::bind netlink.on_readable(std::bind(&Netlink::read)); should be netlink.on_readable(std::bind(&Netlink::read,&netlink,std::placeholders::_1)); But if you already use C++11... netlink.on_readable( [&](booster::system::error_code const &e) { netlink.read(e); }); Much easier to understand. Artyom Beilis -------------- CppCMS - C++ Web Framework: http://cppcms.com/ CppDB - C++ SQL Connectivity: http://cppcms.com/sql/cppdb/ >________________________________ > From: Christian Gmeiner <chr...@gm...> >To: Artyom Beilis <art...@ya...>; cpp...@li... >Sent: Thursday, October 4, 2012 2:11 PM >Subject: Re: [Cppcms-users] Design decision > >2012/10/4 Artyom Beilis <art...@ya...>: >>>________________________________ >> >>> From: Christian Gmeiner <chr...@gm...> >>>To: cpp...@li... >>>Sent: Thursday, October 4, 2012 11:01 AM >>>Subject: [Cppcms-users] Design decision >>> >>>Hi all. >>> >>>My cppcms based web application is in a quite good shape and I got >>>some ideas what >>>new features could be added. >>> >>>+ Detection of networking changes via PF_NETLINK socket >>> >>>At the moment it is possible to configure networking settings via >>>cppcms. For instance, >>>it is possible to use manual mode for an ethernet interface to specify >>>ip. netmask etc. or >>>use DHCP mode. If DHCP gets used the running system starts dhcp client >>>and it could >>>takes some seconds until it got a valid IP address. >>> >>>The basic idea is now to use SSE (server send events) and some >>>detection threads. >>> >>>Create a (cppcms ?) thread per ethernet interface and run something like >>>http://stackoverflow.com/questions/579783/how-to-detect-ip-address-change-programmatically-in-linux >>> >>>Then I would have a singleton class for SSE where I can call e.g. >>>SSE::instance()->ethernet("eth0", ip,...) and my front-end can update >>>the values. >>> >>>Can this work? >>> >>> >>>--- >>>Christian Gmeiner, MSc >>> >> >> Why not? >> >> Several points >> >> 1. In there link there is an example to use it without polling, so just use basic_io_device to check >> for readability and then call recv >> >> So basically you don't need threads just implement event driven >> handling in the event loop (see tutorial for examples) >> > >This looks like the elegant solution I am looking for :) > >But... I don't get it up and running :/ > >I decided to go this way: > >#ifndef NETLINK_H_ >#define NETLINK_H_ > >#include <booster/aio/basic_io_device.h> > >class Netlink : public booster::aio::basic_io_device >{ >public: > Netlink(); > ~Netlink(); > > void read(booster::system::error_code const &e); > >private: > char _buffer[4096]; >}; > >#endif /* NETLINK_H_ */ > > >And this is my main() > > // start cppcms service > try > { > cppcms::service srv(argc, argv); > > booster::aio::io_service &io_srv = srv.get_io_service(); > > Netlink netlink; > netlink.set_io_service(io_srv); > netlink.on_readable(std::bind(&Netlink::read)); > > srv.applications_pool().mount(cppcms::applications_factory<Tssw>()); > srv.run(); > } > catch (std::exception const &e) > { > std::cerr << e.what() << std::endl; > } > > >The big big problem is how should I use on_readable(..) ? The above example does >not compile. > >---- >Christian Gmeiner, MSc > >------------------------------------------------------------------------------ >Don't let slow site performance ruin your business. Deploy New Relic APM >Deploy New Relic app performance management and know exactly >what is happening inside your Ruby, Python, PHP, Java, and .NET app >Try New Relic at no cost today and get our sweet Data Nerd shirt too! >http://p.sf.net/sfu/newrelic-dev2dev >_______________________________________________ >Cppcms-users mailing list >Cpp...@li... >https://lists.sourceforge.net/lists/listinfo/cppcms-users > > > |