1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 14:57:44 +00:00
sapphire/src/common/Network/Hive.cpp

67 lines
993 B
C++
Raw Normal View History

2018-10-24 17:58:57 +02:00
#include <memory>
#include <functional>
2017-08-08 13:53:47 +02:00
#include "Hive.h"
namespace Sapphire {
namespace Network {
//-----------------------------------------------------------------------------
Hive::Hive() :
m_work_ptr( new asio::io_service::work( m_io_service ) ),
m_shutdown( 0 )
{
}
Hive::~Hive()
{
}
asio::io_service& Hive::GetService()
{
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 );
}
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 ) )
{
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 ) )
{
m_io_service.reset();
m_work_ptr.reset( new asio::io_service::work( m_io_service ) );
}
}
}
2018-10-24 13:52:27 +02:00
}