|
|
|
@ -52,6 +52,7 @@ namespace levin
|
|
|
|
|
class levin_client_async
|
|
|
|
|
{
|
|
|
|
|
levin_commands_handler* m_pcommands_handler;
|
|
|
|
|
void (*commands_handler_destroy)(levin_commands_handler*);
|
|
|
|
|
volatile uint32_t m_is_stop;
|
|
|
|
|
volatile uint32_t m_threads_count;
|
|
|
|
|
::critical_section m_send_lock;
|
|
|
|
@ -85,9 +86,9 @@ namespace levin
|
|
|
|
|
::critical_section m_connection_lock;
|
|
|
|
|
net_utils::blocked_mode_client m_transport;
|
|
|
|
|
public:
|
|
|
|
|
levin_client_async():m_pcommands_handler(NULL), m_is_stop(0), m_threads_count(0), m_invoke_data_ready(0), m_invoke_is_active(0)
|
|
|
|
|
levin_client_async():m_pcommands_handler(NULL), commands_handler_destroy(NULL), m_is_stop(0), m_threads_count(0), m_invoke_data_ready(0), m_invoke_is_active(0)
|
|
|
|
|
{}
|
|
|
|
|
levin_client_async(const levin_client_async& /*v*/):m_pcommands_handler(NULL), m_is_stop(0), m_threads_count(0), m_invoke_data_ready(0), m_invoke_is_active(0)
|
|
|
|
|
levin_client_async(const levin_client_async& /*v*/):m_pcommands_handler(NULL), commands_handler_destroy(NULL), m_is_stop(0), m_threads_count(0), m_invoke_data_ready(0), m_invoke_is_active(0)
|
|
|
|
|
{}
|
|
|
|
|
~levin_client_async()
|
|
|
|
|
{
|
|
|
|
@ -97,11 +98,16 @@ namespace levin
|
|
|
|
|
|
|
|
|
|
while(boost::interprocess::ipcdetail::atomic_read32(&m_threads_count))
|
|
|
|
|
::Sleep(100);
|
|
|
|
|
|
|
|
|
|
set_handler(NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void set_handler(levin_commands_handler* phandler)
|
|
|
|
|
void set_handler(levin_commands_handler* phandler, void (*destroy)(levin_commands_handler*) = NULL)
|
|
|
|
|
{
|
|
|
|
|
if (commands_handler_destroy && m_pcommands_handler)
|
|
|
|
|
(*commands_handler_destroy)(m_pcommands_handler);
|
|
|
|
|
m_pcommands_handler = phandler;
|
|
|
|
|
m_pcommands_handler_destroy = destroy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool connect(uint32_t ip, uint32_t port, uint32_t timeout)
|
|
|
|
|