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
>
>
> |