Skip to content

Commit 63e7147

Browse files
Merge pull request #47 from mvrdevelopment/migrate-changes-from-MVR
Migrate changes from development repo
2 parents be85429 + efc17a3 commit 63e7147

11 files changed

Lines changed: 108 additions & 53 deletions

File tree

buildAllConfigs_Win.bat

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
pushd .
22

3-
call buildLib_Win.bat Release MT MZ
3+
call buildLib_Win.bat Release MT MZ false
44
popd
55
pushd .
66

7-
call buildLib_Win.bat Release MT NoMZ
7+
call buildLib_Win.bat Release MT NoMZ false
88
popd
99
pushd .
1010

11-
call buildLib_Win.bat Release MD MZ
11+
call buildLib_Win.bat Release MD MZ false
1212
popd
1313
pushd .
1414

15-
call buildLib_Win.bat Release MD NoMZ
15+
call buildLib_Win.bat Release MD NoMZ false
1616
popd
1717
pushd .
1818

19-
call buildLib_Win.bat Debug MD MZ
19+
call buildLib_Win.bat Debug MD MZ false
2020
popd
2121
pushd .
2222

23-
call buildLib_Win.bat Debug MD NoMZ
23+
call buildLib_Win.bat Debug MD NoMZ false
2424
popd
2525
pushd .
2626

27-
call buildLib_Win.bat Debug MT MZ
27+
call buildLib_Win.bat Debug MT MZ false
2828
popd
2929
pushd .
3030

31-
call buildLib_Win.bat Debug MT NoMZ
31+
call buildLib_Win.bat Debug MT NoMZ false
3232
popd
3333
pushd .
3434

buildLib_Win.bat

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ if %3.==. goto ERROR
1515
if %1 == Debug (set DCMAKE_CXX_FLAGS=-DCMAKE_CXX_FLAGS_DEBUG) else (set DCMAKE_CXX_FLAGS=-DCMAKE_CXX_FLAGS_RELEASE)
1616
if %1 == Debug (set RunTimeLib=%2d) else (set RunTimeLib=%2)
1717
if %3 == MZ (set noMZ=false) else (set noMZ=true)
18-
18+
if %3 == MZ (set noXerces=true) else (set noXerces=false)
1919

2020

2121
@echo on
@@ -24,12 +24,12 @@ if exist build ( rd /S /Q build)
2424

2525
mkdir build && cd build
2626

27-
28-
cmake -G "Visual Studio 15 2017 Win64" -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=libs -DCMAKE_CONFIGURATION_TYPES="%1" -Dxmlch-type=wchar_t %DCMAKE_CXX_FLAGS%:STRING="-%RunTimeLib% -O2 -Ob2 -DNDEBUG" -DDO_NOT_INCLUDE_MINI_ZIP=%noMZ% -DWIN_RUNTIME_LIB="-%RunTimeLib%" -DUNITTEST=%4 ..
27+
cmake -G "Visual Studio 17 2022" -A x64 -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=libs -DCMAKE_CONFIGURATION_TYPES="%1" -Dxmlch-type=wchar_t %DCMAKE_CXX_FLAGS%:STRING="-%RunTimeLib% -O2 -Ob2 -DNDEBUG" -DDO_NOT_INCLUDE_MINI_ZIP=%noMZ% -DWIN_RUNTIME_LIB="-%RunTimeLib%" -DDONT_USE_XERCES_AS_XMLLIB="%noXerces%" -DUNITTEST=%4 ..
2928

3029
cd ..
3130

32-
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat"
31+
call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat"
32+
3333
REM build libVectorworksMvrGdtf
3434
cd build
3535
MSBuild.exe MvrGdtf.sln /t:Build /p:Configuration=%1 /m
@@ -42,3 +42,4 @@ Color 04
4242
echo Not all parameters are provided for this script!
4343

4444
:END
45+

mdns_cpp/src/mdns.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,11 +549,19 @@ QueryResList mDNS::executeQuery2(const std::string &service) {
549549
if(in.addr != comp.addr) {return false;}
550550

551551
bool add = false;
552-
std::string service(in.canonicalName.begin(), in.canonicalName.begin() + in.canonicalName.find('.'));
553552

554553
add = add || in.canonicalName == comp.canonicalName;
555554
add = add || in.canonicalName == comp.data.name;
555+
556556
add = add || (comp.canonicalName.length() >= in.canonicalName.length() && in.canonicalName == std::string(comp.canonicalName.end() - in.canonicalName.length(), comp.canonicalName.end()));
557+
558+
auto pos = in.canonicalName.find('.');
559+
if(pos == std::string::npos)
560+
{
561+
pos = in.canonicalName.size();
562+
}
563+
564+
std::string service(in.canonicalName.begin(), in.canonicalName.begin() + pos);
557565
add = add || (comp.canonicalName.length() >= service.length() && service == std::string(comp.canonicalName.begin(), comp.canonicalName.begin() + service.length()));
558566

559567
return add;

src/Implementation/CSceneObjImpl.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,17 +1266,9 @@ VectorworksMVR::VCOMError VectorworksMVR::CSceneObjImpl::GetConnectionAt(size_t
12661266

12671267
VectorworksMVR::VCOMError VectorworksMVR::CSceneObjImpl::CreateConnection(MvrString own, MvrString other, MvrUUID ToObject, IConnection** addedObj)
12681268
{
1269-
ASSERTN(kEveryone,fType == ESceneObjType::Fixture);
1270-
if( fType != ESceneObjType::Fixture) return kVCOMError_NoFixtureObj;
1271-
1272-
SceneData::SceneDataFixtureObjPtr fixture = static_cast<SceneData::SceneDataFixtureObjPtr>(fPtr);
1273-
1274-
ASSERTN(kEveryone, fixture != nullptr);
1275-
if ( ! fixture) { return kVCOMError_Failed; }
1276-
1277-
const auto nObj = fixture->AddConnectionObj(own, other, VWUUID(ToObject.a, ToObject.b, ToObject.c, ToObject.d));
1269+
const auto nObj = fPtr->AddConnectionObj(own, other, VWUUID(ToObject.a, ToObject.b, ToObject.c, ToObject.d));
12781270

1279-
//---------------------------------------------------------------------------
1271+
//---------------------------------------------------------------------------
12801272
// Initialize Object
12811273
CConnectionImpl* pConnectionImpl = nullptr;
12821274

src/Include/IMediaRessourceVectorInterface.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,7 +1782,11 @@ class DYNAMIC_ATTRIBUTE IGdtfMacro : public IVWUnknown
17821782

17831783
MVRxchangeString& operator=(const char* str)
17841784
{
1785+
#pragma warning(push) // Save the current warning state
1786+
#pragma warning(disable : 4996) // Disable strncpy warning
17851787
std::strncpy(fBuffer, str, 1024);
1788+
#pragma warning(pop)
1789+
17861790
fBuffer[1023] = '\0'; // In case str is longer than 1024, no terminator is set by strncpy
17871791
return *this;
17881792
}

src/SceneDataExchange.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2384,7 +2384,7 @@ ESceneDataObjectType SceneDataFocusPointObj::GetObjectType()
23842384

23852385
// ----------------------------------------------------------------------------------------------------------------------------------
23862386
// SceneDataTrussObj
2387-
SceneDataTrussObj::SceneDataTrussObj(const SceneDataGUID& guid) : SceneDataGroupObj(guid)
2387+
SceneDataTrussObj::SceneDataTrussObj(const SceneDataGUID& guid) : SceneDataGDTFSpecObj(guid)
23882388
{
23892389

23902390
}

src/SceneDataExchange.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,7 @@ namespace SceneData
827827

828828
// ----------------------------------------------------------------------------------------------------------------------------------
829829
// SceneDataObjWithMatrix
830-
class SceneDataTrussObj : public SceneDataGroupObj
830+
class SceneDataTrussObj : public SceneDataGDTFSpecObj
831831
{
832832

833833
public:

src/mvrxchange/CMVRxchangeService.cpp

Lines changed: 66 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,39 @@
1010
#include <boost/date_time/posix_time/posix_time.hpp>
1111
#include <unordered_map>
1212
#include <thread>
13+
#include <regex>
1314

14-
VectorworksMVR::CMVRxchangeServiceImpl::CMVRxchangeServiceImpl()
15+
VectorworksMVR::CMVRxchangeServiceImpl::CMVRxchangeServiceImpl(): fmdns_long_timer(fmdns_IO_Context)
1516
{
1617
fServer = nullptr;
1718
}
1819

1920
VectorworksMVR::CMVRxchangeServiceImpl::~CMVRxchangeServiceImpl()
2021
{
2122
this->mDNS_Client_Stop();
23+
if(fmdns_Thread.joinable())
24+
{
25+
fmdns_Thread.join();
26+
}
2227
this->TCP_Stop();
2328
}
2429

30+
void FilterServiceName(MVRxchangeString& service)
31+
{
32+
std::string s(service.fBuffer);
33+
std::string out;
34+
35+
if(s.empty())
36+
{
37+
return;
38+
}
39+
40+
std::regex_replace(std::back_inserter(out), s.begin(), s.end(), std::regex("[^a-zA-Z0-9\\-_]"), "");
41+
42+
service = out.c_str();
43+
}
44+
45+
2546
VCOMError VectorworksMVR::CMVRxchangeServiceImpl::ConnectToLocalService(const ConnectToLocalServiceArgs& service)
2647
{
2748
this->LeaveLocalService();
@@ -30,6 +51,7 @@ VCOMError VectorworksMVR::CMVRxchangeServiceImpl::ConnectToLocalService(const Co
3051
fCurrentService = service;
3152
this->TCP_Start();
3253

54+
FilterServiceName(fCurrentService.Service);
3355

3456
//---------------------------------------------------------------------------------------------
3557
// Start mDNS Service
@@ -95,10 +117,10 @@ VCOMError VectorworksMVR::CMVRxchangeServiceImpl::ConnectToLocalService(const Co
95117

96118
if (fmdns_Thread.joinable())
97119
{
98-
fmdns_IO_Context.stop();
99-
fmdns_Thread.join();
120+
mDNS_Client_Stop();
100121
}
101-
fmdns_Thread = std::thread(&CMVRxchangeServiceImpl::mDNS_Client_Start, this);
122+
123+
mDNS_Client_Start();
102124

103125
return kVCOMError_NoError;
104126
}
@@ -112,6 +134,7 @@ VCOMError VectorworksMVR::CMVRxchangeServiceImpl::LeaveLocalService()
112134
leaveMessage.Message.Type = MVRxchangeMessageType::MVR_LEAVE;
113135
leaveMessage.Message.LEAVE.FromStationUUID = fCurrentService.StationUUID;
114136
this->Send_message(leaveMessage);
137+
mDNS_Client_Stop();
115138

116139
for(auto& s : fmdns)
117140
{
@@ -126,8 +149,21 @@ VCOMError VectorworksMVR::CMVRxchangeServiceImpl::LeaveLocalService()
126149

127150
VCOMError VCOM_CALLTYPE CMVRxchangeServiceImpl::QueryLocalServices(size_t& out_Count)
128151
{
129-
this->mDNS_Client_Task();
130-
152+
153+
if(fmdns_Thread.joinable())
154+
{
155+
std::condition_variable cv;
156+
std::mutex mut;
157+
std::unique_lock<std::mutex> lock(mut);
158+
boost::asio::post(fmdns_IO_Context, [this, &cv](){
159+
this->mDNS_Client_Task();
160+
cv.notify_all();
161+
});
162+
cv.wait(lock);
163+
}else{
164+
this->mDNS_Client_Task();
165+
}
166+
131167
{
132168
std::lock_guard<std::mutex> lock (fQueryLocalServicesResult_mtx);
133169
out_Count = fQueryLocalServicesResult.size();
@@ -303,9 +339,12 @@ IMVRxchangeService::IMVRxchangeMessage CMVRxchangeServiceImpl::TCP_OnIncommingMe
303339
if(GetSingleMemberOfService(in.LEAVE.FromStationUUID, newItem) != kVCOMError_NoError)
304340
{
305341
std::lock_guard<std::mutex> lock(fMvrGroupMutex);
306-
std::remove_if(fMVRGroup.begin(), fMVRGroup.end(), [&newItem](const MVRxchangeGroupMember& it){
307-
return it.stationUUID == newItem.stationUUID;
308-
});
342+
fMVRGroup.erase(
343+
std::remove_if(fMVRGroup.begin(), fMVRGroup.end(), [&newItem](const MVRxchangeGroupMember& it){
344+
return it.stationUUID == newItem.stationUUID;
345+
}),
346+
fMVRGroup.end()
347+
);
309348
}
310349
}
311350

@@ -315,6 +354,7 @@ IMVRxchangeService::IMVRxchangeMessage CMVRxchangeServiceImpl::TCP_OnIncommingMe
315354
ret = fCallBack.IncomingCallback(in, fCallBack.Context);
316355
}
317356

357+
318358
return ret;
319359
}
320360

@@ -400,34 +440,40 @@ VCOMError CMVRxchangeServiceImpl::GetSingleMemberOfService(const MvrUUID& statio
400440
return kVCOMError_Failed;
401441
}
402442

403-
404-
void CMVRxchangeServiceImpl::mDNS_Client_Tick(boost::asio::deadline_timer* t)
443+
void CMVRxchangeServiceImpl::mDNS_Client_Tick()
405444
{
406445
MVRXCHANGE_DEBUG("mDNS_Client_Tick");
407446
mDNS_Client_Task();
408447

409-
t->async_wait(boost::bind(&CMVRxchangeServiceImpl::mDNS_Client_Tick, this, t));
448+
fmdns_long_timer.expires_from_now(boost::posix_time::seconds(45));
449+
fmdns_long_timer.async_wait(boost::bind(&CMVRxchangeServiceImpl::mDNS_Client_Tick, this));
410450
}
411451

412-
void CMVRxchangeServiceImpl::mDNS_Client_Start()
413-
{
414-
boost::asio::deadline_timer t_long (fmdns_IO_Context, boost::posix_time::seconds(45));
452+
void CMVRxchangeServiceImpl::mDNS_Client_RFun()
453+
{
454+
while(!fmdns_stop_flag)
415455
{
416-
boost::asio::deadline_timer t_short(fmdns_IO_Context, boost::posix_time::seconds(1));
417-
t_short.async_wait(boost::bind(&CMVRxchangeServiceImpl::mDNS_Client_Tick, this, &t_long));
456+
fmdns_IO_Context.run_for(std::chrono::seconds(1));
418457
}
419-
fmdns_IO_Context.run();
458+
}
459+
460+
void CMVRxchangeServiceImpl::mDNS_Client_Start()
461+
{
462+
fmdns_stop_flag = false;
463+
boost::asio::post(fmdns_IO_Context, boost::bind(&CMVRxchangeServiceImpl::mDNS_Client_Tick, this));
464+
fmdns_Thread = std::thread(&CMVRxchangeServiceImpl::mDNS_Client_RFun, this);
420465
}
421466

422467
void CMVRxchangeServiceImpl::mDNS_Client_Stop()
423468
{
424-
if (fmdns_Thread.joinable())
469+
fmdns_stop_flag = true;
470+
if(fmdns_Thread.joinable())
425471
{
426-
fmdns_IO_Context.stop();
427472
fmdns_Thread.join();
428473
}
429474
}
430475

476+
431477
mdns_cpp::QueryResList CMVRxchangeServiceImpl::mDNS_Filter_Queries(mdns_cpp::QueryResList &input)
432478
{
433479
// IPv6 is currently not supported
@@ -493,8 +539,6 @@ mdns_cpp::QueryResList CMVRxchangeServiceImpl::mDNS_Filter_Queries(mdns_cpp::Que
493539

494540
void CMVRxchangeServiceImpl::mDNS_Client_Task()
495541
{
496-
497-
498542
mdns_cpp::mDNS mdns;
499543
auto query_res = mdns.executeQuery2(MVRXChange_Service);
500544
std::vector<ConnectToLocalServiceArgs> result;

src/mvrxchange/CMVRxchangeService.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,22 @@ namespace VectorworksMVR
4343
virtual VCOMError VCOM_CALLTYPE OnMessage(OnMessageArgs& messageHandler);
4444
virtual VCOMError VCOM_CALLTYPE Send_message(const SendMessageArgs& messageHandler);
4545

46-
void mDNS_Client_Task();
47-
4846
private:
49-
void mDNS_Client_Start();
47+
void mDNS_Client_Task(); // actual mdns task
48+
49+
void mDNS_Client_Tick(); // mdns tick function (executed by RFun function)
50+
void mDNS_Client_RFun(); // thread function (executed by fmdns_Thread)
51+
5052
void mDNS_Client_Stop();
51-
void mDNS_Client_Tick(boost::asio::deadline_timer* t);
53+
void mDNS_Client_Start();
54+
55+
5256

5357
std::vector<std::unique_ptr<mdns_cpp::mDNS>> fmdns;
5458
std::thread fmdns_Thread;
5559
boost::asio::io_context fmdns_IO_Context;
60+
boost::asio::deadline_timer fmdns_long_timer;
61+
std::atomic<bool> fmdns_stop_flag;
5662

5763
std::mutex fQueryLocalServicesResult_mtx;
5864
std::vector<ConnectToLocalServiceArgs> fQueryLocalServicesResult;

src/rapidxmlsupport/XMLFileImpl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ VCOMError CXMLFileImpl::WriteBuffer(IXMLFileIOBuffer* pOutputBuffer, EXMLEncodin
112112
{
113113
tinyxml2::XMLPrinter printer;
114114
fDoc.Print(&printer);
115-
pOutputBuffer->SetData((void*)printer.CStr(), printer.CStrSize());
115+
pOutputBuffer->SetData((void*)printer.CStr(), printer.CStrSize()-2);
116116
return kVCOMError_NoError;
117117
}
118118

0 commit comments

Comments
 (0)