Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions include/DMDUtil/DMD.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
#include <string>
#include <thread>

#include "sockpp/tcp_connector.h"

#if defined(__APPLE__)
#include <TargetConditionals.h>
#endif
Expand Down Expand Up @@ -71,6 +69,8 @@ class LevelDMD;
class RGB24DMD;
class ConsoleDMD;

class DMDServerConnector;

class DMDUTILAPI DMD
{
public:
Expand Down Expand Up @@ -202,7 +202,7 @@ class DMDUTILAPI DMD
std::vector<LevelDMD*> m_levelDMDs;
std::vector<RGB24DMD*> m_rgb24DMDs;
std::vector<ConsoleDMD*> m_consoleDMDs;
sockpp::tcp_connector* m_pDMDServerConnector;
DMDServerConnector* m_pDMDServerConnector;
bool m_dmdServerDisconnectOthers = false;

std::thread* m_pLevelDMDThread;
Expand Down
37 changes: 30 additions & 7 deletions src/DMD.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include "DMDUtil/DMD.h"

#include "DMDUtil/Config.h"
#include "DMDUtil/ConsoleDMD.h"
#include "DMDUtil/LevelDMD.h"
Expand All @@ -15,6 +14,8 @@
#include <chrono>
#include <cstring>

#include "sockpp/tcp_connector.h"

#include "AlphaNumeric.h"
#include "FrameUtil.h"
#include "Logger.h"
Expand Down Expand Up @@ -42,6 +43,29 @@ void ZEDMDCALLBACK ZeDMDLogCallback(const char* format, va_list args, const void
Log(DMDUtil_LogLevel_INFO, "%s", buffer);
}

class DMDServerConnector
{
public:
~DMDServerConnector() { delete m_pConnector; }

static DMDServerConnector* Create(const char* pAddress, int port)
{
sockpp::tcp_connector* pConnector = new sockpp::tcp_connector({pAddress, (in_port_t)port});
return pConnector ? new DMDServerConnector(pConnector) : nullptr;
}

ssize_t Write(const void* buf, size_t size)
{
return m_pConnector->write_n(buf, size);
}

void Close() { m_pConnector->close(); }

private:
DMDServerConnector(sockpp::tcp_connector* pConnector) : m_pConnector(pConnector) {}
sockpp::tcp_connector* m_pConnector;
};

bool DMD::m_finding = false;

DMD::DMD()
Expand Down Expand Up @@ -170,7 +194,7 @@ DMD::~DMD()

if (m_pDMDServerConnector)
{
m_pDMDServerConnector->close();
m_pDMDServerConnector->Close();
delete m_pDMDServerConnector;
m_pDMDServerConnector = nullptr;
}
Expand All @@ -184,8 +208,7 @@ bool DMD::ConnectDMDServer()
sockpp::initialize();
Log(DMDUtil_LogLevel_INFO, "Connecting DMDServer on %s:%d", pConfig->GetDMDServerAddr(),
pConfig->GetDMDServerPort());
m_pDMDServerConnector =
new sockpp::tcp_connector({pConfig->GetDMDServerAddr(), (in_port_t)pConfig->GetDMDServerPort()});
m_pDMDServerConnector = DMDServerConnector::Create(pConfig->GetDMDServerAddr(), pConfig->GetDMDServerPort());
if (!m_pDMDServerConnector)
{
Log(DMDUtil_LogLevel_INFO, "DMDServer connection to %s:%d failed!", pConfig->GetDMDServerAddr(),
Expand Down Expand Up @@ -353,13 +376,13 @@ void DMD::QueueUpdate(const std::shared_ptr<Update> dmdUpdate, bool buffered)
StreamHeader streamHeader;
streamHeader.buffered = (uint8_t)buffered;
streamHeader.disconnectOthers = (uint8_t)m_dmdServerDisconnectOthers;
m_pDMDServerConnector->write_n(&streamHeader, sizeof(StreamHeader));
m_pDMDServerConnector->Write(&streamHeader, sizeof(StreamHeader));
PathsHeader pathsHeader;
strcpy(pathsHeader.name, m_romName);
strcpy(pathsHeader.altColorPath, m_altColorPath);
strcpy(pathsHeader.pupVideosPath, m_pupVideosPath);
m_pDMDServerConnector->write_n(&pathsHeader, sizeof(PathsHeader));
m_pDMDServerConnector->write_n(dmdUpdate.get(), sizeof(Update));
m_pDMDServerConnector->Write(&pathsHeader, sizeof(PathsHeader));
m_pDMDServerConnector->Write(dmdUpdate.get(), sizeof(Update));

if (streamHeader.disconnectOthers != 0) m_dmdServerDisconnectOthers = false;
}
Expand Down