asio-samples-users Mailing List for asio samples
Status: Beta
Brought to you by:
mabrarov
You can subscribe to this list here.
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
(2) |
Dec
(1) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2012 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(22) |
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
(1) |
Nov
(2) |
Dec
|
2013 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
From: Marat A. <ab...@gm...> - 2013-12-10 06:19:28
|
Hi users of Asio samples project. Asio samples were moved to GitHub: https://github.com/mabrarov/asio_samples. The SourceForge SVN repository and files won't get updates anymore. There won't be any other announces in this mailing list, however I'll continue to answer questions posted here. The preferred way for bug reporting is GitHub issues page: https://github.com/mabrarov/asio_samples/issues The Asio samples GitHub repository already got some updates: 1. Better C++11 support (partial usage of standard library instead of Boost). 2. Boost 1.55 support. 3. MS Visual Studio 2013 support. 4. Intel Composer XE 2013 SP1 update 1 support. 5. Minor fixes, formatting/renaming. Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2013-07-31 16:12:07
|
The bugfix version of Asio samples - version 0.6.1 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.6.1%20%28D evelopment%29/asio_samples_0_6_1.zip/download or svn+ssh://svn.code.sf.net/p/asio-samples/code/tags/beta-0.6.1 Changelist: Classes ma::console_close_guard & ma::windows::console_signal_service (ma::windows::console_signal) fixed to not ignore intermediate hits. Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2013-07-30 21:38:29
|
Asio samples 0.6.0 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.6.0%20%28D evelopment%29/asio_samples_0_6_0.zip/download or svn+ssh://svn.code.sf.net/p/asio-samples/code/tags/beta-0.6.0 Changelist: 1. Qt 5 support added. 2. Support for Boost C++ Libraries 1.53/1.54 added. 3. ma::windows::console_signal class introduced. 4. ma::console_close_guard introduced: ma::console_controller renamed to ma::console_close_guard and implemented in terms of Unix signals for *nix and ma::windows::console_signal class for Windows. 5. Minor fixes/moves/other changes in project files && includes/headers. 6. Support for Intel C++ Compiler XE 12.1 removed. 7. echo_client1 project removed. 8. Class ma::lockable_wrapped_handler and free function ma::make_lockable_wrapped_handler added. 9. Class ma::context_invoke_handler and free function ma::make_context_invoke_handler added. 10. ma::handler_storage_service class: minor fix with std::move added; implementation destruction order changed to LIFO; minor refactoring done. 11. ma::detail::intrusive_list class: back link added, push_back/pop_back added, list concatenation added. 12. ma::detail::intrusive_slist class: back link added, push_back added, list concatenation added. Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2013-01-15 21:18:32
|
Asio samples 0.5.3 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.5.3%20%28Development%29/asio_samples_0_5_3.zip/downloa d Changelist: 1. asio_performance_test_client, async_connect, echo_server, qt_echo_server: stop operation made more responsive when many active sessions are created. 2. qt_echo_server: minor form fix done. 3. echo_server & qt_echo_server: timeout handling at active shutdown fixed, error reporting review done. 4. Minor rename done (simplifying usage of renamed classes). 5. Switched to Qt 4.8.4. 6. async_connect & asio_performance_test_client: Windows Unicode support added. 7. Minor fixes in MSVS 2010/2012 project files. 8. Prepared for Qt 5 migration (minor fixes in #include). Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2012-11-20 20:26:08
|
Asio samples 0.5.2 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.5.2%20%28Development%29/asio_samples_0_5_2.zip/downloa d Changelist: 1. C++11 lambdas usage extended. 2. Switched to Boost 1.52 (see /build/patches/boost_1_52_0) & critical bug related to changes in Boost 1.52 (Boost.Thread) fixed. 3. qt_echo_server: minor refactoring done. 4. ma::handler_storage's default implementation of type erasure switched to usage of virtual member functions (see MA_TYPE_ERASURE_USE_VURTUAL at /include/ma/config.hpp:130). 5. MSVS projects tuned. 6. echo_server project: major refactoring of main.cpp done. Tested (built + simple manual functional test) on: 1. x86: MS Windows 7 Professional SP1 x64, MSVC 10.0 SP1. Static C/C++ runtime, Boost C++ Libraries 1.52 (static), Qt 4.8.3 (static). 2. amd64: MS Windows 7 Professional SP1 x64, MSVC 10.0 SP1. Static C/C++ runtime, Boost C++ Libraries 1.52 (static), Qt 4.8.3 (static, amd64). 3. x86: MS Windows XP Professional SP3 x86, MSVC 9.0. Static C/C++ runtime, Boost C++ Libraries 1.52 (static). 4. x86: Kubuntu 12.04 i386, GCC 4.6.3, Qt Creator 2.4.1. Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared). 5. x86: Kubuntu 12.04 i386, Clang 3.1, Qt Creator 2.4.1. Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared). 6. x86: Ubuntu 10.10 i386, GCC 4.4.5, Qt Creator 2.0.1. Boost C++ Libraries 1.46 (static), Qt 4.7.0 (shared). 7. x86: MS Windows 8 Enterprise x64, MSVC 11.0 (MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.52 (static). 8. amd64: MS Windows 8 Enterprise x64, MSVC 11.0 (MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.52 (static). 9. x86: MS Windows 8 Enterprise x64, Intel C++ Compiler XE 13.0.0.089 (Intel Composer XE 2013, MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.52 (necessarily patched - see build/patches/boost_1_52_0/intel_12_1_mutex.patch, static). 10. amd64: MS Windows 8 Enterprise x64, Intel C++ Compiler XE 13.0.0.089 (Intel Composer XE 2013, MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.52 (necessarily patched - see build/patches/boost_1_52_0/intel_12_1_mutex.patch, static). Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2012-11-01 22:34:33
|
Asio samples 0.5.1 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.5.1%20%28Development%29/asio_samples_0_5_1.zip/downloa d This is a bugfix release: 1. async_basics & async_basics2 projects reformatted. 2. Minor simplification of ma::handler_storage_service class made. 3. C++11 lambdas usage added. 4. Intel Parallel Studio XE 13 projects fixed: compiler option for C++11 support added. 5. /include/ma/config.hpp fixed (uses Boost.Config). 6. /include/ma/config.hpp: Clang support added. 7. QMake projects revisited. 8. MA_USE_EXPLICIT_MOVE_CONSTRUCTOR macro renamed to MA_NO_IMPLICIT_MOVE_CONSTRUCTOR. 9. echo_server & qt_echo_server projects: the cause of session_manager stop will be known at async_wait handler. 10. Minor unused variables removed. Thanks to Clang 3.1. 11. catch (...) added into all main functions to avoid unfinished stack unwinding (std::terminate, C++03 15.5.1). Tested (built + simple manual functional test) on: 1. x86: MS Windows 7 Professional SP1 x64, MSVC 10.0 SP1. Static C/C++ runtime, Boost C++ Libraries 1.51 (static), Qt 4.8.3 (static). 2. x86: MS Windows XP Professional SP3 x86, MSVC 9.0. Static C/C++ runtime, Boost C++ Libraries 1.51 (static). 3. x86: Kubuntu 12.04 i386, GCC 4.6.3, Qt Creator 2.4.1. Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared). 4. x86: Kubuntu 12.04 i386, Clang 3.0, Qt Creator 2.4.1. Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared). 5. x86: Kubuntu 12.04 i386, Clang 3.1, Qt Creator 2.4.1. Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared). 6. x86: Ubuntu 10.10 i386, GCC 4.4.5, Qt Creator 2.0.1. Boost C++ Libraries 1.46 (static), Qt 4.7.0 (shared). 7. x86: MS Windows 8 Enterprise x64, MSVC 11.0 (MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.51 (static). 8. x86: MS Windows 8 Enterprise x64, Intel C++ Compiler XE 13.0.0.089 (Intel Composer XE 2013, MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.51 (necessarily patched - see build/patches/boost_1_51_0/intel_12_1_shared_ptr_operator_bool.patch and intel_12_1_mutex.patch, static). Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2012-10-28 08:55:59
|
Asio samples 0.5.0 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.5.0%20%28Development%29/asio_samples_0_5_0.zip/downloa d Most of interesting changes are related to ma::handler_storage class. Release notes in short: 1. Refactoring & reformat done. 2. Switched to Boost C++ Libraries 1.51. 3. Patches for Boost C++ Libraries 1.51 added (Intel ones are the only mandatory). 4. Switched to Qt 4.8.3. 5. ma::handler_storage::target() uses typed pointer than can be specified (default is void) by ma::handler_storage template's parameter. 6. ma::handler_storage class: support of type erasure based on virtual member function added (see MA_TYPE_ERASURE_USE_VURTUAL at include/ma/config.hpp:108). 7. ma::handler_storage<void, Target = void> supported, i.e. no-arg handlers are supported. 8. base_hook class of intrusive containers fixed (copy ctor & copy assignment operator). 9. Switched from scoped_lock to boost::lock_guard. 10. Intel Parallel Studio XE 2013 support added (MSVS 2012 based project). 11. Intel C++ Compiler (12.x-13.x) doesn't need /vmg option anymore (echo_server and nmea_client projects). Thanks to separation of declaration and definition parts. 12. "asio::io_service instance per each work thread" mode added to projects: echo_server, qt_echo_server, async_connect, asio_performance_test_client. 13. async_basics project revisited (simplified). Tested (built + simple manual functional test) on: 1. x86/amd64: MS Windows 7 Professional SP1 x64, MSVC 10.0 SP1. Static C/C++ runtime, Boost C++ Libraries 1.51 (static), Qt 4.8.3 (static). 2. x86/amd64: MS Windows 7 Ultimate SP1 x86, Intel C++ Compiler XE 12.1.5.344 (Intel Composer XE 2011 Update 11, MSVS 2010 SP1). Static C/C++ runtime, Boost C++ Libraries 1.51 (necessarily patched - see build/patches/boost_1_51_0/intel_12_1_shared_ptr_operator_bool.patch and intel_12_1_mutex.patch, static). 3. x86: MS Windows 7 Ultimate SP1 x86, Qt Creator 2.5.1 (MSVC 10.0 SP1 toolchain). Shared C/C++ runtime, Boost C++ Libraries 1.51 (static), Qt 4.8.3 (shared). 4. x86/amd64: MS Windows XP Professional SP3 x86, MSVC 9.0. Static C/C++ runtime, Boost C++ Libraries 1.51 (static). 5. x86: Kubuntu 12.04 i386, GCC 4.6.3, Qt Creator 2.4.1. Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared). 6. x86: Ubuntu 10.10 i386, GCC 4.4.5, Qt Creator 2.0.1. Boost C++ Libraries 1.46 (static), Qt 4.7.0 (shared). 7. x86/amd64: MS Windows 8 Enterprise x64, MSVC 11.0 (MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.51 (static). 8. x86/amd64: MS Windows 8 Enterprise x64, Intel C++ Compiler XE 13.0.0.089 (Intel Composer XE 2013, MSVS 2012). Static C/C++ runtime, Boost C++ Libraries 1.51 (necessarily patched - see build/patches/boost_1_51_0/intel_12_1_shared_ptr_operator_bool.patch and intel_12_1_mutex.patch, static). Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2012-08-11 21:14:59
|
Asio samples 0.4.0 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.4.0%20%28Development%29/asio_samples_0_4_0.zip/downl oad Release notes in short: 1. async_connect & asio_performance_test_client: measuring of elapsed time fixed, socket shutdown added. 2. echo_server & qt_echo_server: statistics added ("live statistics" for qt_echo_server), errors revisited. 3. MSVS 2012 projects added. 4. Links to Boost docs fixed. 5. MSVC 10.0 projects: Test & Profile configurations added. 6. ma::limited_int class added. Tested (built + simple manual functional test) on: 1. x86/amd64: MS Windows 7 Professional SP1 x64, MSVC 10.0 SP1 (MSVS 2010 SP1, static runtime), Boost C++ Libraries 1.50 (static), Qt 4.8.2 (static); 2. x86/amd64: MS Windows 7 Ultimate SP1 x86, Intel C++ Composer XE 2011 Update 7 (MSVS 2010 SP1, static runtime), Boost C++ Libraries 1.50 (patched - see build/patches/boost_1_50_0/intel_12_1_shared_ptr_operator_bool.patch, static); 3. x86: MS Windows 7 Ultimate SP1 x86, Qt Creator 2.5.1 (MSVC 10.0 SP1, static runtime), Boost C++ Libraries 1.50 (static), Qt 4.8.2 (shared); 4. x86/amd64: MS Windows XP Professional SP3 x86, MSVC 9.0 (static runtime), Boost C++ Libraries 1.50 (static); 5. x86: Kubuntu 12.04 i386, GCC 4.6.3, Qt Creator 2.4.1, Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared); 6. x86: Ubuntu 10.10 i386, GCC 4.4.5, Qt Creator 2.0.1, Boost C++ Libraries 1.46 (static), Qt 4.7.0 (shared); 7. x86: MS Windows 8 Consumer Preview, MSVC 11.0 (MSVS 11 Beta, static runtime), Boost C++ Libraries 1.50 (static). Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2012-08-03 05:38:33
|
Asio samples 0.3.12 is out: http://sourceforge.net/projects/asio-samples/files/asio-samples/0.3.12%20%28Development%29/asio_samples_0_3_12.zip/downl oad Release notes in short: 1. Switched to Boost 1.50 and Qt 4.8.2. 2. ma::async_connect function: IPv6 support fixed. 3. ma::handler_storage_service class: while-cycle replaced with for-cycle and locking on mutex reduced at shutdown_service(). 4. async_connect changed to be performance test too. 5. asio_performance_test_client: number of total connected sessions added to stats, connection loop added, switched to boost::uint_fast64_t for bytes transferred statistics. 6. asio_performance_test_client & async_connect: changed to use Boost.Timer (optionally) and Boost.Program_options. 7. echo_server & qt_echo_server: abortive socket close added (for errors). 8. Minor patches for Boost and Qt added. 9. shared_ptr_factory_helper class moved from global namespace into the ma namespace. 10. ma::detail::sp_intrusive_list class moved to ma::sp_intrusive_list and separated into sp_intrusive_list.hpp. 11. Minor changes related to namespaces. 12. Additional debug checks for asio custom handler allocation/invocation added. Tested (built + simple manual functional test) on: 1. x86/amd64: MS Windows 7 Professional SP1 x64, MSVC 10.0 SP1 (MSVS 2010 SP1, static runtime), Boost C++ Libraries 1.50 (static), Qt 4.8.2 (static); 2. x86: MS Windows 7 Ultimate SP1 x86, Intel C++ Composer XE 2011 Update 7 (MSVS 2010 SP1, static runtime), Boost C++ Libraries 1.50 (patched - see build/patches/boost_1_50_0/intel_12_1_shared_ptr_operator_bool.patch, static); 3. x86: MS Windows 7 Ultimate SP1 x86, Qt Creator 2.5.1 (MSVC 10.0 SP1, static runtime), Boost C++ Libraries 1.50 (static), Qt 4.8.2 (shared); 4. x86: MS Windows XP Professional SP3 x86, MSVC 9.0 (static runtime), Boost C++ Libraries 1.50 (static); 5. x86: Kubuntu 12.04 i386, GCC 4.6.3, Qt Creator 2.4.1, Boost C++ Libraries 1.50 (static), Qt 4.8.1 (shared); 6. x86: Ubuntu 10.10 i386, GCC 4.4.5, Qt Creator 2.0.1, Boost C++ Libraries 1.46 (static), Qt 4.7.0 (shared). Regards, Marat Abrarov. |
From: niXman <i.n...@gm...> - 2012-05-09 11:59:23
|
8 мая 2012 г., 22:26 пользователь Marat Abrarov написал: > Остальное в течение недели. ок. ожидаю. -- Regards, niXman |
From: Marat A. <ab...@gm...> - 2012-05-08 18:26:59
|
> жуть какая %) > попытался представить состояние этих КА в конкретные моменты времени, > и, честно говоря, моцг плавится... Вот для этого и нужны диаграммы. Мозгу будет легче, если он начнет с того, что в контексте одного экземпляра session может одновременно работать несколько параллельных (и местами синхронизированных) процессов, каждый из которых (для простоты) представлен в виде КА 8) Конкретный экземпляр session для таких параллельных процессов есть shared data. Остальное в течение недели. Regards, Marat Abrarov. |
From: niXman <i.n...@gm...> - 2012-05-08 12:11:43
|
в общем, мне чтоб продолжить работать в обозначенном направлении, нужно понять как реализовать api чтения/записи. и без Вашей помощи(как я уже убедился), у меня вряд ли получится. спасибо ;) -- Regards, niXman |
From: niXman <i.n...@gm...> - 2012-05-08 10:55:33
|
7 мая 2012 г. 14:14 пользователь Marat Abrarov написал: > На то, что есть несколько КА: > 1. Общий внешний КА, наблюдаемый извне класса session. Он, по сути, повторяет следующий, но с запозданием. > 2. Внутренний общий КА а-ла session's lifecycle. > 3. (Внутренний) КА для таймера. > 4. (Внутренний) КА для отправки данных через сокет. > 5. (Внутренний) КА для приема данных из сокета. > > Все КА влияют друг на друга своими событиями. Например, "Внутренний общий КА" не перейдет в состояние intern_state::stopped, пока есть pending_operations_, т.е. пока все остальные "внутренние КА" не перейдут в состояние stopped. жуть какая %) попытался представить состояние этих КА в конкретные моменты времени, и, честно говоря, моцг плавится... -- Regards, niXman |
From: niXman <i.n...@gm...> - 2012-05-07 16:40:18
|
т.е. в конечном счете, я полагаю, должно получиться нечто вроде: template<typename SD> // session data struct base_context { base_context(SD& sd) :_data(sd) {} void read(...) { _data... } void write(...) { _data... } cyclic_buffer& buffer() const { return _data... } bool in_read() const { return _data... } bool in_write() const { return _data... } private: SD& _data }; /* * тут SD введен для того, что не раскрывать детали сервера. */ /***************************************************************************/ template< typename GC ,typename SD > struct user_context: base_context<SD> { user_context(GC& gc, SD& sd) :base_context<SD>(sd) { // к моменту вызова тела конструктора user_context`а, все члены и данные // session и base_context`а инициализированы. // таким образом, пользовательская логика берет начало в конструкторе, где // пользователь может вызывать read() или write(). // можно, кстати, в base_context добавить виртуальный метод start(), вызываемый сессией, // переопределив который пользователь может запускать свою логику в нем. // так же, можно добавить и метод stop(), который быдет вызываться сессией // в самом начале разрушения сессии. } }; /***************************************************************************/ http://liveworkspace.org/code/30bd677be00ff717657e52a66146bf19 интересует Ваше мнение об этом. благодарю. -- Regards, niXman |
From: niXman <i.n...@gm...> - 2012-05-07 15:50:55
|
> Это "API" наподобие session::async_start/async_wait/async_stop или что-то внутреннее для расширения session? > Для внутренних частей неплохо бы обойтись без callback-ов - они добавляют сложности коду и overhead для runtime. "это" предполагается предоставить реализатору user_context`ов. т.е. как-то так: struct base_context { void read(...) {} void write(...) {} bool in_read() const; bool in_write() const; ... }; struct user_context: base_context { user_context(...) :base_context(...) { start(); } void start() { read(..., &user_context::readed, ...); } void readed(...) { // тут юзер что-то выполняет, и вызывет write(), или read() если пакет составной } }; > Не создает - да. Но session::read_state_ в in_progress устанавливает только (!) start_socket_read. > Скорее user_read должен проверять read_state_ и, если read_state_ == read_state::wait, вызывать start_socket_read. понял. > Остается неясным, кто и когда будет вызывать user_read/user_write. реализатор user_context`ов. или имеются какие-то соображения/предложения? и по поводу буферов для пользовательских данных, есть мысли? у меня, собственно говоря, есть мысль оставить буфер(а) членами session, но при помощи base_context предоставить пользователю возможность управлять/использовать/настраивать его/их. как Вы думаете? -- Regards, niXman |
From: Marat A. <ab...@gm...> - 2012-05-07 15:38:08
|
> давайте попробуем на конкретном примере... > к примеру, я хочу добавить api чтения: void user_read(???); > вопросы: > 1. аргументом указывать только размер? или размер и буфер в который > читать? (callback - само собой) Это "API" наподобие session::async_start/async_wait/async_stop или что-то внутреннее для расширения session? Для внутренних частей неплохо бы обойтись без callback-ов - они добавляют сложности коду и overhead для runtime. > 2. насколько я понимаю, user_read() не создает нового состояния КА, он > просто должен устанавливать session::read_state в in_progress ? Не создает - да. Но session::read_state_ в in_progress устанавливает только (!) start_socket_read. Скорее user_read должен проверять read_state_ и, если read_state_ == read_state::wait, вызывать start_socket_read. > 3. с записью - так же, user_write() не создает нового состояния КА, он > должен устанавливать session::write_state в in_progress ? Здесь аналогично. Остается неясным, кто и когда будет вызывать user_read/user_write. Regards, Marat Abrarov. |
From: Marat A. <ab...@gm...> - 2012-05-07 13:26:56
|
Добрый день. > в локальную поделку на основе asio-samples, хочу добавить список банов по IP. > вопрос в том, как в данном случае нужно поступить с session_manager::accept_state. См. session_manager::handle_accept_at_work. Там есть такой код: ~~~~~~~~~~~~~~~ if (active_sessions_.size() >= max_session_count_) { recycle(session); continue_work(); return; } ~~~~~~~~~~~~~~~ Ниже этого кода следует вставить: ~~~~~~~~~~~~~~~ if (is_banned(session)) { // Я предполагаю, что TCP-соединение просто закрывается в таком случае, // Если "нет" - то надо заменить вызов recycle() на что-то свое. recycle(session); // В любом случае продолжаем работать - не останавливаться же по такому случаю. // Если новый accept запускать нельзя, то меняем accept_state_ // на что-то отличное от accept_state::ready и не забываем // когда-нибудь позже сменить его на accept_state::ready и вызывать continue_work() continue_work(); // Вызываем всегда во всех handle_XXX_at_work() return; } ~~~~~~~~~~~~~~~ > при запуске аксепта, accept_state устанавливается в in_progress и > инкрементируется pending_operations. > вопрос собственно в том, как поступать с этими переменными в случае > если подключившийся IP окажется в списке банов? > > просто устанавливать в: > accept_state = accept_state::in_progress; > --pending_operations; > > ? См. ответ выше. > еще не очень понятно как поступить с цепочкой вызовов: handle_accept > -> handle_accept_at_work -> continue_work > ? > > начиная с какого вызова будет правильным будет запускать следующий > аксепт в случае если текущий подключившийся находится в списке банов? Следующий accept запускается в continue_work, если это позволяет "комплексное" состояние session_manager. В общем случае, в handle_accept_at_XXX следует всегда декрементировать pending_operations и всегда менять accept_state_ на значение, отличное от accept_state::in_progress. continue_work запустит новый accept, если не достигнут лимит активных сессий и accept_state_ == accept_state::ready (это необходимое, но не достаточное условие). Regards, Marat Abrarov. |
From: niXman <i.n...@gm...> - 2012-05-07 13:08:27
|
7 мая 2012 г. 14:14 пользователь Marat Abrarov написал: > Вводить новые состояния/флаги/КА (через тот же user_context) и учитывать их в session::continue_work(). давайте попробуем на конкретном примере... к примеру, я хочу добавить api чтения: void user_read(???); вопросы: 1. аргументом указывать только размер? или размер и буфер в который читать? (callback - само собой) 2. насколько я понимаю, user_read() не создает нового состояния КА, он просто должен устанавливать session::read_state в in_progress ? 3. с записью - так же, user_write() не создает нового состояния КА, он должен устанавливать session::write_state в in_progress ? тут я все правильно понял? спасибо. -- Regards, niXman |
From: Marat A. <ab...@gm...> - 2012-05-07 10:15:06
|
> 1. с чего начать С session::continue_work(). > 2. что изменять Вводить новые состояния/флаги/КА (через тот же user_context) и учитывать их в session::continue_work(). > 3. на что обратить внимание На то, что есть несколько КА: 1. Общий внешний КА, наблюдаемый извне класса session. Он, по сути, повторяет следующий, но с запозданием. 2. Внутренний общий КА а-ла session's lifecycle. 3. (Внутренний) КА для таймера. 4. (Внутренний) КА для отправки данных через сокет. 5. (Внутренний) КА для приема данных из сокета. Все КА влияют друг на друга своими событиями. Например, "Внутренний общий КА" не перейдет в состояние intern_state::stopped, пока есть pending_operations_, т.е. пока все остальные "внутренние КА" не перейдут в состояние stopped. > 4. какая последовательность вызовов+логика > etc... > > не могли бы Вы выразить это в псевдокоде+словах, пожалуйста. Как я писал ранее - надо переварить (нужно время). После того, как нарисую диаграммы для КА (UML state machine), Ваши вопросы, полагаю, отпадут сами собой. Вообще будет здорово, если удастся перевести на Boost.MSM.... хотя бы для примера. Regards, Marat Abrarov. |
From: niXman <i.n...@gm...> - 2012-05-07 09:19:58
|
7 мая 2012 г. 13:07 пользователь Marat Abrarov написал: > Добрый день. > >> подскажите, каким образом, наиболее эффективно, можно изменить session >> так, чтоб добавить методы чтения/записи для использования в >> пользовательской логике? > > В том-то и дело, что решение о "старте" чтения/записи принимает КА, а не пользовательская логика. > > Т.е. правильнее сказать так: есть КА для процесса чтения и есть КА для процесса записи. Оба эти автомата кроме собственного состояния учитывают еще и наличие места в буфере (он сделан общим, но это только для ограничения объема и эффективного использования), т.е. доп. состояния/флаги. > > Пользовательская логика должна взаимодействовать с этими КА, но не с сокетом (lower layer по отношению к КА) напрямую. В простейшем случае такое взаимодействие (или правильнее "воздействие") можно выразить через изменение состояния буферов ввода/вывода (и прочих состояний других КА) и вызов session::continue_work() (скорее всего, это место тоже придется модифицировать). > > Я не уверен, что КА (их несколько и они связаны) в echo_server организованы достаточно понятно и просто (для дальнейших модификаций). Оптимально - да, возможно. Но отсечение многих частей делает неясным и неявным некоторые аспекты взаимодействия этих КА. В связи с этим, я пытаюсь изобразить (UML state machine) эти КА и связать их взаимодействие общими событиями (это та часть документации, без которой уже сложно двигаться дальше). По-моему, именно набор взаимосвязанных КА наиболее обобщенно описывает real life (например, клетки и процессы в них) и communicating software (где все есть множество взаимосвязанных параллельных/fork-ющихся процессов). Ну, об этом я уже писал: http://asio-samples.blogspot.com/2009/10/httpwww.html. спасибо за ответ! но из всего вышеописанного, я так и не понял следующее: 1. с чего начать 2. что изменять 3. на что обратить внимание 4. какая последовательность вызовов+логика etc... не могли бы Вы выразить это в псевдокоде+словах, пожалуйста. спасибо. -- Regards, niXman |
From: Marat A. <ab...@gm...> - 2012-05-07 09:07:58
|
Добрый день. > подскажите, каким образом, наиболее эффективно, можно изменить session > так, чтоб добавить методы чтения/записи для использования в > пользовательской логике? В том-то и дело, что решение о "старте" чтения/записи принимает КА, а не пользовательская логика. Т.е. правильнее сказать так: есть КА для процесса чтения и есть КА для процесса записи. Оба эти автомата кроме собственного состояния учитывают еще и наличие места в буфере (он сделан общим, но это только для ограничения объема и эффективного использования), т.е. доп. состояния/флаги. Пользовательская логика должна взаимодействовать с этими КА, но не с сокетом (lower layer по отношению к КА) напрямую. В простейшем случае такое взаимодействие (или правильнее "воздействие") можно выразить через изменение состояния буферов ввода/вывода (и прочих состояний других КА) и вызов session::continue_work() (скорее всего, это место тоже придется модифицировать). Я не уверен, что КА (их несколько и они связаны) в echo_server организованы достаточно понятно и просто (для дальнейших модификаций). Оптимально - да, возможно. Но отсечение многих частей делает неясным и неявным некоторые аспекты взаимодействия этих КА. В связи с этим, я пытаюсь изобразить (UML state machine) эти КА и связать их взаимодействие общими событиями (это та часть документации, без которой уже сложно двигаться дальше). По-моему, именно набор взаимосвязанных КА наиболее обобщенно описывает real life (например, клетки и процессы в них) и communicating software (где все есть множество взаимосвязанных параллельных/fork-ющихся процессов). Ну, об этом я уже писал: http://asio-samples.blogspot.com/2009/10/httpwww.html. Regards, Marat Abrarov. |
From: niXman <i.n...@gm...> - 2012-05-06 09:45:16
|
2012/5/6 Marat Abrarov: > В командной строке добавить параметр > --inactivity_timeout значение-в-секундах > > Вообще, есть --help для таких случаев :) вот до чего спешка доводит %) спасибо. извините. -- Regards, niXman |
From: Marat A. <ab...@gm...> - 2012-05-06 09:34:20
|
Добрый день. > стандартное: > ... > Session's inactivity timeout (seconds) : none (!) > ... > Session's socket Nagle algorithm is : system default Ну вот и написано, что таймаута нет. > а как его включить? В командной строке добавить параметр --inactivity_timeout значение-в-секундах Вообще, есть --help для таких случаев :) Regards, Marat Abrarov. |
From: niXman <i.n...@gm...> - 2012-05-06 06:46:30
|
здравствуйте. подскажите, каким образом, наиболее эффективно, можно изменить session так, чтоб добавить методы чтения/записи для использования в пользовательской логике? я полагаю, что можно использовать session::start_socket_read/session::start_socket_write. но не уверен на счет буферов и КА. спасибо. -- Regards, niXman |
From: Marat A. <ab...@gm...> - 2012-05-05 16:56:35
|
Вечер добрый. > вопрос касается логики срабатывания таймаута по чтению. > запускаю сервер с настройками по умолчанию, только указываю порт. А что написано в консоли? По умолчанию таймаута нет. Regards, Marat Abrarov. |