mirror of
https://github.com/gwm17/Specter.git
synced 2024-11-22 18:28:52 -05:00
Fixed gross code for creating data sources. Now much cleaner, easier to understand.
This commit is contained in:
parent
cfb7c7cd76
commit
632004b52e
|
@ -226,7 +226,11 @@ namespace Specter {
|
||||||
|
|
||||||
m_scalerPanel.OnImGuiRender(m_manager, m_scalerList, m_graphList);
|
m_scalerPanel.OnImGuiRender(m_manager, m_scalerList, m_graphList);
|
||||||
|
|
||||||
m_sourceDialog.ImGuiRenderSourceDialog();
|
if (m_sourceDialog.ImGuiRenderSourceDialog())
|
||||||
|
{
|
||||||
|
PhysicsStartEvent event(m_sourceDialog.GetArgs());
|
||||||
|
m_callbackFunc(event);
|
||||||
|
}
|
||||||
|
|
||||||
RemoveHistogramDialog();
|
RemoveHistogramDialog();
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
namespace Specter {
|
namespace Specter {
|
||||||
|
|
||||||
SourceDialog::SourceDialog() :
|
SourceDialog::SourceDialog() :
|
||||||
m_openFlag(false), m_chosenPort("51489"), m_chosenWindow(2000000)
|
m_openFlag(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,63 +26,60 @@ namespace Specter {
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void SourceDialog::ImGuiRenderSourceDialog()
|
bool SourceDialog::ImGuiRenderSourceDialog()
|
||||||
{
|
{
|
||||||
SPEC_PROFILE_FUNCTION();
|
SPEC_PROFILE_FUNCTION();
|
||||||
static bool onlineFlag = false;
|
static bool result = false;
|
||||||
static bool offlineFlag = false;
|
|
||||||
static std::vector<DataSource::SourceType> availTypes = { DataSource::SourceType::CompassOnline, DataSource::SourceType::CompassOffline, DataSource::SourceType::DaqromancyOnline,
|
static std::vector<DataSource::SourceType> availTypes = { DataSource::SourceType::CompassOnline, DataSource::SourceType::CompassOffline, DataSource::SourceType::DaqromancyOnline,
|
||||||
DataSource::SourceType::DaqromancyOffline, DataSource::SourceType::CharonOnline };
|
DataSource::SourceType::DaqromancyOffline, DataSource::SourceType::CharonOnline };
|
||||||
|
result = false;
|
||||||
if (m_openFlag)
|
if (m_openFlag)
|
||||||
{
|
{
|
||||||
onlineFlag = false;
|
|
||||||
offlineFlag = false;
|
|
||||||
m_openFlag = false;
|
m_openFlag = false;
|
||||||
m_chosenType = DataSource::SourceType::None;
|
m_args.type = DataSource::SourceType::None;
|
||||||
m_chosenLocation = "";
|
m_args.location = "";
|
||||||
m_chosenPort = "51489";
|
m_args.port = "52324";
|
||||||
m_chosenWindow = 3000000;
|
m_args.coincidenceWindow = 3000000;
|
||||||
m_bitflags = 0;
|
m_args.bitflags = 0;
|
||||||
ImGui::OpenPopup(ICON_FA_LINK " Attach Source");
|
ImGui::OpenPopup(ICON_FA_LINK " Attach Source");
|
||||||
}
|
}
|
||||||
if (ImGui::BeginPopupModal(ICON_FA_LINK " Attach Source"))
|
if (ImGui::BeginPopupModal(ICON_FA_LINK " Attach Source"))
|
||||||
{
|
{
|
||||||
if (ImGui::BeginCombo("Source Type", ConvertDataSourceTypeToString(m_chosenType).c_str()))
|
if (ImGui::BeginCombo("Source Type", ConvertDataSourceTypeToString(m_args.type).c_str()))
|
||||||
{
|
{
|
||||||
for (auto& type : availTypes)
|
for (auto& type : availTypes)
|
||||||
{
|
{
|
||||||
if (ImGui::Selectable(ConvertDataSourceTypeToString(type).c_str(), type == m_chosenType, ImGuiSelectableFlags_DontClosePopups))
|
if (ImGui::Selectable(ConvertDataSourceTypeToString(type).c_str(), type == m_args.type, ImGuiSelectableFlags_DontClosePopups))
|
||||||
{
|
{
|
||||||
m_chosenType = type;
|
m_args.type = type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_chosenType == DataSource::SourceType::CompassOnline)
|
if (m_args.type == DataSource::SourceType::CompassOnline)
|
||||||
{
|
{
|
||||||
ImGui::InputText("Hostname", &m_chosenLocation);
|
ImGui::InputText("Hostname", &m_args.location);
|
||||||
ImGui::InputText("Port", &m_chosenPort);
|
ImGui::InputText("Port", &m_args.port);
|
||||||
if (ImGui::RadioButton("Energy", (m_bitflags & CompassHeaders::Energy) != 0))
|
if (ImGui::RadioButton("Energy", (m_args.bitflags & CompassHeaders::Energy) != 0))
|
||||||
{
|
{
|
||||||
m_bitflags = m_bitflags ^ CompassHeaders::Energy;
|
m_args.bitflags = m_args.bitflags ^ CompassHeaders::Energy;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::RadioButton("Energy Short", (m_bitflags & CompassHeaders::EnergyShort) != 0))
|
if (ImGui::RadioButton("Energy Short", (m_args.bitflags & CompassHeaders::EnergyShort) != 0))
|
||||||
{
|
{
|
||||||
m_bitflags = m_bitflags ^ CompassHeaders::EnergyShort;
|
m_args.bitflags = m_args.bitflags ^ CompassHeaders::EnergyShort;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::RadioButton("Energy Calibrated", (m_bitflags & CompassHeaders::EnergyCalibrated) != 0))
|
if (ImGui::RadioButton("Energy Calibrated", (m_args.bitflags & CompassHeaders::EnergyCalibrated) != 0))
|
||||||
{
|
{
|
||||||
m_bitflags = m_bitflags ^ CompassHeaders::EnergyCalibrated;
|
m_args.bitflags = m_args.bitflags ^ CompassHeaders::EnergyCalibrated;
|
||||||
}
|
}
|
||||||
ImGui::InputInt("Coinc. Window (ps)", &m_chosenWindow);
|
ImGui::InputScalar("Coinc. Window (ps)", ImGuiDataType_U64, &m_args.coincidenceWindow);
|
||||||
}
|
}
|
||||||
else if (m_chosenType == DataSource::SourceType::CompassOffline)
|
else if (m_args.type == DataSource::SourceType::CompassOffline)
|
||||||
{
|
{
|
||||||
ImGui::InputText("Run Directory", &m_chosenLocation);
|
ImGui::InputText("Run Directory", &m_args.location);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Choose Location"))
|
if (ImGui::Button("Choose Location"))
|
||||||
{
|
{
|
||||||
|
@ -90,18 +87,18 @@ namespace Specter {
|
||||||
}
|
}
|
||||||
auto temp = m_fileDialog.RenderFileDialog();
|
auto temp = m_fileDialog.RenderFileDialog();
|
||||||
if (!temp.first.empty() && temp.second == FileDialog::Type::OpenDir)
|
if (!temp.first.empty() && temp.second == FileDialog::Type::OpenDir)
|
||||||
m_chosenLocation = temp.first;
|
m_args.location = temp.first;
|
||||||
ImGui::InputInt("Coinc. Window (ps)", &m_chosenWindow);
|
ImGui::InputScalar("Coinc. Window (ps)", ImGuiDataType_U64, &m_args.coincidenceWindow);
|
||||||
}
|
}
|
||||||
else if (m_chosenType == DataSource::SourceType::DaqromancyOnline)
|
else if (m_args.type == DataSource::SourceType::DaqromancyOnline)
|
||||||
{
|
{
|
||||||
ImGui::InputText("Hostname", &m_chosenLocation);
|
ImGui::InputText("Hostname", &m_args.location);
|
||||||
ImGui::InputText("Port", &m_chosenPort);
|
ImGui::InputText("Port", &m_args.port);
|
||||||
ImGui::InputInt("Coinc. Window (ps)", &m_chosenWindow);
|
ImGui::InputScalar("Coinc. Window (ps)", ImGuiDataType_U64, &m_args.coincidenceWindow);
|
||||||
}
|
}
|
||||||
else if (m_chosenType == DataSource::SourceType::DaqromancyOffline)
|
else if (m_args.type == DataSource::SourceType::DaqromancyOffline)
|
||||||
{
|
{
|
||||||
ImGui::InputText("Run Directory", &m_chosenLocation);
|
ImGui::InputText("Run Directory", &m_args.location);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Choose Location"))
|
if (ImGui::Button("Choose Location"))
|
||||||
{
|
{
|
||||||
|
@ -109,29 +106,29 @@ namespace Specter {
|
||||||
}
|
}
|
||||||
auto temp = m_fileDialog.RenderFileDialog();
|
auto temp = m_fileDialog.RenderFileDialog();
|
||||||
if (!temp.first.empty() && temp.second == FileDialog::Type::OpenDir)
|
if (!temp.first.empty() && temp.second == FileDialog::Type::OpenDir)
|
||||||
m_chosenLocation = temp.first;
|
m_args.location = temp.first;
|
||||||
ImGui::InputInt("Coinc. Window (ps)", &m_chosenWindow);
|
ImGui::InputScalar("Coinc. Window (ps)", ImGuiDataType_U64, &m_args.coincidenceWindow);
|
||||||
}
|
}
|
||||||
else if (m_chosenType == DataSource::SourceType::CharonOnline)
|
else if (m_args.type == DataSource::SourceType::CharonOnline)
|
||||||
{
|
{
|
||||||
ImGui::InputText("Hostname", &m_chosenLocation);
|
ImGui::InputText("Hostname", &m_args.location);
|
||||||
ImGui::InputText("Port", &m_chosenPort);
|
ImGui::InputText("Port", &m_args.port);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::Button("Ok"))
|
if (ImGui::Button("Ok"))
|
||||||
{
|
{
|
||||||
PhysicsStartEvent event(m_chosenLocation, m_chosenType, m_chosenWindow, m_chosenPort, m_bitflags);
|
result = true;
|
||||||
Application::Get().OnEvent(event);
|
|
||||||
|
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Cancel"))
|
if (ImGui::Button("Cancel"))
|
||||||
{
|
{
|
||||||
|
result = false;
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
}
|
}
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,17 +19,15 @@ namespace Specter {
|
||||||
SourceDialog();
|
SourceDialog();
|
||||||
~SourceDialog();
|
~SourceDialog();
|
||||||
|
|
||||||
void ImGuiRenderSourceDialog();
|
bool ImGuiRenderSourceDialog();
|
||||||
|
|
||||||
|
inline const SourceArgs& GetArgs() const { return m_args; }
|
||||||
|
|
||||||
inline void OpenSourceDialog() { m_openFlag = true; }
|
inline void OpenSourceDialog() { m_openFlag = true; }
|
||||||
private:
|
private:
|
||||||
bool m_openFlag;
|
bool m_openFlag;
|
||||||
DataSource::SourceType m_chosenType;
|
SourceArgs m_args;
|
||||||
std::string m_chosenLocation;
|
|
||||||
std::string m_chosenPort;
|
|
||||||
FileDialog m_fileDialog;
|
FileDialog m_fileDialog;
|
||||||
uint16_t m_bitflags;
|
|
||||||
int m_chosenWindow;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,30 +21,22 @@ namespace Specter {
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//Bitflags is a final option for random crap needed for a source. Currently used for compass online to indicate header state.
|
//Bitflags is a final option for random crap needed for a source. Currently used for compass online to indicate header state.
|
||||||
PhysicsStartEvent(const std::string& loc, DataSource::SourceType type, uint64_t window, const std::string& port = "51489", uint16_t bitflags = 0) :
|
PhysicsStartEvent(const SourceArgs& args) :
|
||||||
m_sourceLocation(loc), m_port(port), m_sourceType(type), m_coincidenceWindow(window), m_bitflags(bitflags)
|
m_args(args)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
inline const std::string GetSourceLocation() const { return m_sourceLocation; }
|
const SourceArgs& GetSourceArgs() const { return m_args; }
|
||||||
inline const std::string GetSourcePort() const { return m_port; }
|
|
||||||
inline const DataSource::SourceType GetSourceType() const { return m_sourceType; }
|
|
||||||
inline const uint64_t GetCoincidenceWindow() const { return m_coincidenceWindow; }
|
|
||||||
inline const uint16_t GetBitFlags() const { return m_bitflags; }
|
|
||||||
|
|
||||||
std::string ToString() const override
|
std::string ToString() const override
|
||||||
{
|
{
|
||||||
return "Starting PhysicsEventBuilder with DataSource of type {0} at location {1}" + m_sourceLocation + ConvertDataSourceTypeToString(m_sourceType);
|
return "Starting PhysicsEventBuilder with DataSource of type " + ConvertDataSourceTypeToString(m_args.type) + " at location " + m_args.location;
|
||||||
}
|
}
|
||||||
|
|
||||||
EVENT_CATEGORY_SETUP(EventCategoryPhysics);
|
EVENT_CATEGORY_SETUP(EventCategoryPhysics);
|
||||||
EVENT_TYPE_SETUP(PhysicsStart);
|
EVENT_TYPE_SETUP(PhysicsStart);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_sourceLocation;
|
SourceArgs m_args;
|
||||||
std::string m_port;
|
|
||||||
DataSource::SourceType m_sourceType;
|
|
||||||
uint64_t m_coincidenceWindow;
|
|
||||||
uint16_t m_bitflags;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PhysicsStopEvent : public Event
|
class PhysicsStopEvent : public Event
|
||||||
|
|
|
@ -16,15 +16,15 @@
|
||||||
namespace Specter {
|
namespace Specter {
|
||||||
|
|
||||||
//loc=either an ip address or a file location, port=address port, or unused in case of file
|
//loc=either an ip address or a file location, port=address port, or unused in case of file
|
||||||
DataSource* CreateDataSource(const std::string& location, const std::string& port, uint16_t header, DataSource::SourceType type, uint64_t coincidenceWindow)
|
DataSource* CreateDataSource(const SourceArgs& args)
|
||||||
{
|
{
|
||||||
switch(type)
|
switch(args.type)
|
||||||
{
|
{
|
||||||
case DataSource::SourceType::CompassOffline: return new CompassRun(location, coincidenceWindow);
|
case DataSource::SourceType::CompassOffline: return new CompassRun(args.location, args.coincidenceWindow);
|
||||||
case DataSource::SourceType::CompassOnline: return new CompassOnlineSource(location, port, header, coincidenceWindow);
|
case DataSource::SourceType::CompassOnline: return new CompassOnlineSource(args.location, args.port, args.bitflags, args.coincidenceWindow);
|
||||||
case DataSource::SourceType::DaqromancyOffline: return new DYFileSource(location, coincidenceWindow);
|
case DataSource::SourceType::DaqromancyOffline: return new DYFileSource(args.location, args.coincidenceWindow);
|
||||||
case DataSource::SourceType::DaqromancyOnline: return new DYOnlineSource(location, port, coincidenceWindow);
|
case DataSource::SourceType::DaqromancyOnline: return new DYOnlineSource(args.location, args.port, args.coincidenceWindow);
|
||||||
case DataSource::SourceType::CharonOnline: return new CharonOnlineSource(location, port);
|
case DataSource::SourceType::CharonOnline: return new CharonOnlineSource(args.location, args.port);
|
||||||
case DataSource::SourceType::None: return nullptr;
|
case DataSource::SourceType::None: return nullptr;
|
||||||
}
|
}
|
||||||
SPEC_WARN("Invalid DataSourceType at CreateDataSource!");
|
SPEC_WARN("Invalid DataSourceType at CreateDataSource!");
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include "SpecData.h"
|
#include "SpecData.h"
|
||||||
|
|
||||||
namespace Specter {
|
namespace Specter {
|
||||||
|
|
||||||
class DataSource
|
class DataSource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -46,7 +46,16 @@ namespace Specter {
|
||||||
PhysicsEventBuilder m_eventBuilder;
|
PhysicsEventBuilder m_eventBuilder;
|
||||||
};
|
};
|
||||||
|
|
||||||
DataSource* CreateDataSource(const std::string& location, const std::string& port, uint16_t bitflags, DataSource::SourceType type, uint64_t coincidenceWindow);
|
struct SourceArgs
|
||||||
|
{
|
||||||
|
DataSource::SourceType type = DataSource::SourceType::None;
|
||||||
|
std::string location = "";
|
||||||
|
std::string port = "";
|
||||||
|
uint64_t coincidenceWindow = 0;
|
||||||
|
uint16_t bitflags = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
DataSource* CreateDataSource(const SourceArgs& args);
|
||||||
|
|
||||||
std::string ConvertDataSourceTypeToString(DataSource::SourceType type);
|
std::string ConvertDataSourceTypeToString(DataSource::SourceType type);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ namespace Specter {
|
||||||
if (m_activeFlag)
|
if (m_activeFlag)
|
||||||
{
|
{
|
||||||
DetachDataSource();
|
DetachDataSource();
|
||||||
DestroyPhysThread();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,17 +49,10 @@ namespace Specter {
|
||||||
if(m_activeFlag)
|
if(m_activeFlag)
|
||||||
{
|
{
|
||||||
DetachDataSource();
|
DetachDataSource();
|
||||||
DestroyPhysThread();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AttachDataSource(event);
|
AttachDataSource(event.GetSourceArgs());
|
||||||
|
|
||||||
//If we succesfully attached, fire up a new phys thread
|
|
||||||
if(m_activeFlag)
|
|
||||||
{
|
|
||||||
SPEC_INFO("Starting new analysis thread...");
|
|
||||||
m_physThread = new std::thread(&PhysicsLayer::RunSource, std::ref(*this));
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +62,6 @@ namespace Specter {
|
||||||
if (m_activeFlag)
|
if (m_activeFlag)
|
||||||
{
|
{
|
||||||
DetachDataSource();
|
DetachDataSource();
|
||||||
DestroyPhysThread();
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -85,34 +76,17 @@ namespace Specter {
|
||||||
|
|
||||||
/*Threaded functions*/
|
/*Threaded functions*/
|
||||||
|
|
||||||
void PhysicsLayer::DestroyPhysThread()
|
void PhysicsLayer::AttachDataSource(const SourceArgs& args)
|
||||||
{
|
|
||||||
SPEC_PROFILE_FUNCTION();
|
|
||||||
SPEC_INFO("Destroying the analysis thread...");
|
|
||||||
//Join the thread back to the parent (finish up the thread)
|
|
||||||
if(m_physThread != nullptr && m_physThread->joinable())
|
|
||||||
{
|
|
||||||
m_physThread->join();
|
|
||||||
}
|
|
||||||
|
|
||||||
//Free the thread memory
|
|
||||||
if(m_physThread != nullptr)
|
|
||||||
{
|
|
||||||
delete m_physThread;
|
|
||||||
m_physThread = nullptr;
|
|
||||||
}
|
|
||||||
SPEC_INFO("Thread destroyed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicsLayer::AttachDataSource(PhysicsStartEvent& event)
|
|
||||||
{
|
{
|
||||||
SPEC_PROFILE_FUNCTION();
|
SPEC_PROFILE_FUNCTION();
|
||||||
std::scoped_lock<std::mutex> guard(m_sourceMutex); //Shouldn't matter for this, but safety first
|
std::scoped_lock<std::mutex> guard(m_sourceMutex); //Shouldn't matter for this, but safety first
|
||||||
m_source.reset(CreateDataSource(event.GetSourceLocation(), event.GetSourcePort(), event.GetBitFlags(), event.GetSourceType(), event.GetCoincidenceWindow()));
|
m_source.reset(CreateDataSource(args));
|
||||||
if (m_source->IsValid())
|
if (m_source->IsValid())
|
||||||
{
|
{
|
||||||
SPEC_INFO("Attach successful. Enabling data pull...");
|
SPEC_INFO("Source attached... Starting new analysis thread...");
|
||||||
m_activeFlag = true;
|
m_activeFlag = true;
|
||||||
|
|
||||||
|
m_physThread = new std::thread(&PhysicsLayer::RunSource, std::ref(*this));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -124,10 +98,18 @@ namespace Specter {
|
||||||
void PhysicsLayer::DetachDataSource()
|
void PhysicsLayer::DetachDataSource()
|
||||||
{
|
{
|
||||||
SPEC_PROFILE_FUNCTION();
|
SPEC_PROFILE_FUNCTION();
|
||||||
std::scoped_lock<std::mutex> guard(m_sourceMutex);
|
|
||||||
SPEC_INFO("Detaching physics data source...");
|
SPEC_INFO("Detaching physics data source...");
|
||||||
|
|
||||||
|
std::scoped_lock<std::mutex> guard(m_sourceMutex);
|
||||||
m_activeFlag = false;
|
m_activeFlag = false;
|
||||||
m_source.reset(nullptr);
|
m_source.reset(nullptr);
|
||||||
|
if (m_physThread != nullptr && m_physThread->joinable())
|
||||||
|
{
|
||||||
|
m_physThread->join();
|
||||||
|
}
|
||||||
|
delete m_physThread;
|
||||||
|
m_physThread = nullptr;
|
||||||
|
|
||||||
SPEC_INFO("Detach succesful.");
|
SPEC_INFO("Detach succesful.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,7 @@ namespace Specter {
|
||||||
void PushStage(AnalysisStage* stage);
|
void PushStage(AnalysisStage* stage);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void DestroyPhysThread();
|
void AttachDataSource(const SourceArgs& args);
|
||||||
void AttachDataSource(PhysicsStartEvent& event);
|
|
||||||
void DetachDataSource();
|
void DetachDataSource();
|
||||||
void RunSource();
|
void RunSource();
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ namespace Specter {
|
||||||
asio::ip::tcp::resolver resolver(m_context);
|
asio::ip::tcp::resolver resolver(m_context);
|
||||||
auto end_points = resolver.resolve(hostname, port);
|
auto end_points = resolver.resolve(hostname, port);
|
||||||
|
|
||||||
m_deadline.expires_after(std::chrono::seconds(60));
|
m_deadline.expires_after(std::chrono::seconds(30));
|
||||||
asio::async_connect(m_socket, end_points,
|
asio::async_connect(m_socket, end_points,
|
||||||
[this, hostname, port](std::error_code ec, asio::ip::tcp::endpoint endpoint)
|
[this, hostname, port](std::error_code ec, asio::ip::tcp::endpoint endpoint)
|
||||||
{
|
{
|
||||||
|
@ -44,6 +44,7 @@ namespace Specter {
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SPEC_WARN("Unable to connect to CharonClient {0}:{1}" , hostname, port);
|
SPEC_WARN("Unable to connect to CharonClient {0}:{1}" , hostname, port);
|
||||||
|
m_socket.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user