2018-10-24 17:58:57 +02:00
|
|
|
#include <memory>
|
|
|
|
#include <functional>
|
2017-08-08 13:53:47 +02:00
|
|
|
#include "Hive.h"
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
namespace Sapphire {
|
2018-08-29 21:40:59 +02:00
|
|
|
namespace Network {
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
2018-10-24 15:17:40 +02:00
|
|
|
Hive::Hive() :
|
|
|
|
m_work_ptr( new asio::io_service::work( m_io_service ) ),
|
2018-08-29 21:40:59 +02:00
|
|
|
m_shutdown( 0 )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
Hive::~Hive()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2018-10-24 15:17:40 +02:00
|
|
|
asio::io_service& Hive::GetService()
|
2018-08-29 21:40:59 +02:00
|
|
|
{
|
|
|
|
return m_io_service;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Hive::HasStopped()
|
|
|
|
{
|
2018-10-24 13:52:27 +02:00
|
|
|
uint32_t v1 = 1;
|
|
|
|
uint32_t v2 = 1;
|
|
|
|
return m_shutdown.compare_exchange_strong( v1, v2 );
|
2018-08-29 21:40:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Hive::Poll()
|
|
|
|
{
|
|
|
|
m_io_service.poll();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Hive::Run()
|
|
|
|
{
|
|
|
|
m_io_service.run();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Hive::Stop()
|
|
|
|
{
|
2018-10-24 13:52:27 +02:00
|
|
|
uint32_t v1 = 1;
|
|
|
|
uint32_t v2 = 0;
|
|
|
|
if( !m_shutdown.compare_exchange_strong( v1, v2 ) )
|
2018-08-29 21:40:59 +02:00
|
|
|
{
|
|
|
|
m_work_ptr.reset();
|
|
|
|
m_io_service.run();
|
|
|
|
m_io_service.stop();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Hive::Reset()
|
|
|
|
{
|
2018-10-24 13:52:27 +02:00
|
|
|
uint32_t v1 = 0;
|
|
|
|
uint32_t v2 = 1;
|
|
|
|
if( m_shutdown.compare_exchange_strong( v1, v2 ) )
|
2018-08-29 21:40:59 +02:00
|
|
|
{
|
|
|
|
m_io_service.reset();
|
2018-10-24 15:17:40 +02:00
|
|
|
m_work_ptr.reset( new asio::io_service::work( m_io_service ) );
|
2018-08-29 21:40:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2018-10-24 13:52:27 +02:00
|
|
|
}
|