libMVRgdtf 40bc00a
A library for GDTF and MVR
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CMVRxchangeService.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2//----- Copyright deersoft 2015 - 2017 www.deersoft.de
3//-----------------------------------------------------------------------------
4#pragma once
5
7#include "mdns_cpp/mdns.hpp"
8#include "../mvrxchange/mvrxchange_prefix.h"
9#include "../mvrxchange/mvrxchange_server.h"
10#include "../mvrxchange/mvrxchange_client.h"
11
12
13namespace VectorworksMVR
14{
16 {
17 TXStringArray IP; // One Member can broadcast on multiple adapters
18 uint16_t Port;
21 };
22
24
25 //----------------------------------------------------------------------------------------
26 class CMVRxchangeServiceImpl : public VCOMImpl<IMVRxchangeService>
27 {
28 public:
31
32 //Interface
33 public:
34 virtual VCOMError VCOM_CALLTYPE ConnectToLocalService(const ConnectToLocalServiceArgs& service);
36
37 virtual VCOMError VCOM_CALLTYPE QueryLocalServices(size_t& out_Count);
38 virtual VCOMError VCOM_CALLTYPE GetLocalServiceAt(size_t index, ConnectToLocalServiceArgs& outLocalService);
39
40 virtual VCOMError VCOM_CALLTYPE ConnectToRemoteService(const ConnectToRemoteServiceArgs& service);
42
43 virtual VCOMError VCOM_CALLTYPE OnMessage(OnMessageArgs& messageHandler);
44 virtual VCOMError VCOM_CALLTYPE Send_message(const SendMessageArgs& messageHandler);
45
46 private:
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
52 void mDNS_Client_Stop();
53 void mDNS_Client_Start();
54
55
56
57 std::vector<std::unique_ptr<mdns_cpp::mDNS>> fmdns;
58 std::thread fmdns_Thread;
59 boost::asio::io_context fmdns_IO_Context;
60 std::unique_ptr <boost::asio::deadline_timer> fmdns_long_timer; // To prevent a deadlock by a dll that inits a CMVRxchangeServiceImpl( in which a deadline_timer obj would have to be inited ) in its global space we use unique_ptr here to make sure we initialize the obj only when needed.
61 std::atomic<bool> fmdns_stop_flag;
62
63 std::mutex fQueryLocalServicesResult_mtx;
64 std::vector<ConnectToLocalServiceArgs> fQueryLocalServicesResult;
65 bool fIsInitialized = false;
66
68 ConnectToLocalServiceArgs fCurrentService;
69
70 void TCP_Start();
71 void TCP_Stop();
72 public:
73 IMVRxchangeMessage TCP_OnIncommingMessage(const IMVRxchangeMessage&, const TCPMessageInfo&);
74 void TCP_OnReturningMessage(const SendMessageArgs&, const IMVRxchangeMessage&, const TCPMessageInfo&);
75 private:
76 std::mutex fMvrGroupMutex;
77 std::vector<MVRxchangeGroupMember> fMVRGroup;
78 private:
79
80 OnMessageArgs fCallBack;
81 //---------------------------------------------------------------------------
82 // TCP Client - Local Network mode
83
84 bool SendMessageToLocalNetworks(const TXString& ip, uint16_t p, const MVRxchangeNetwork::MVRxchangePacket& msg, MVRxchangeNetwork::MVRxchangeClient::SendResult& retVal);
85
86
87 //---------------------------------------------------------------------------
88 // mDNS Functions
89
90 // Get Services for a certain name
91 // [serviceName] is the name without _mvrxchange._tcp.local. ; e.g. for TestService._mvrxchange._tcp.local. use TestService as [serviceName]
92 std::vector<MVRxchangeGroupMember> GetMembersOfService(const MVRxchangeString& serviceName);
93 inline std::vector<MVRxchangeGroupMember> GetMembersOfService(const TXString& serviceName) {
95 t = serviceName.GetCharPtr();
96 return GetMembersOfService(t);
97 }
98
99 VCOMError GetSingleMemberOfService(const MvrUUID& stationUUID, MVRxchangeGroupMember& out);
100
101 // Filters duplicates and own mDNS-sockets
102 // this function is moving objects from [input]. Do not use [input] after this call
103 mdns_cpp::QueryResList mDNS_Filter_Queries(mdns_cpp::QueryResList& input);
104 };
105}
#define VCOM_CALLTYPE
Definition VectorworksMVR.h:93
Definition mvrxchange_message.h:13
Definition mvrxchange_server.h:14
Definition StdAfx.h:187
Definition CMVRxchangeService.h:27
CMVRxchangeServiceImpl()
Definition CMVRxchangeService.cpp:15
virtual VCOMError VCOM_CALLTYPE LeaveRemoteService()
Definition CMVRxchangeService.cpp:207
virtual VCOMError VCOM_CALLTYPE OnMessage(OnMessageArgs &messageHandler)
Definition CMVRxchangeService.cpp:212
virtual VCOMError VCOM_CALLTYPE Send_message(const SendMessageArgs &messageHandler)
Definition CMVRxchangeService.cpp:219
void TCP_OnReturningMessage(const SendMessageArgs &, const IMVRxchangeMessage &, const TCPMessageInfo &)
Definition CMVRxchangeService.cpp:371
virtual ~CMVRxchangeServiceImpl()
Definition CMVRxchangeService.cpp:20
virtual VCOMError VCOM_CALLTYPE ConnectToLocalService(const ConnectToLocalServiceArgs &service)
Definition CMVRxchangeService.cpp:55
virtual VCOMError VCOM_CALLTYPE QueryLocalServices(size_t &out_Count)
Definition CMVRxchangeService.cpp:159
virtual VCOMError VCOM_CALLTYPE LeaveLocalService()
Definition CMVRxchangeService.cpp:138
virtual VCOMError VCOM_CALLTYPE GetLocalServiceAt(size_t index, ConnectToLocalServiceArgs &outLocalService)
Definition CMVRxchangeService.cpp:186
IMVRxchangeMessage TCP_OnIncommingMessage(const IMVRxchangeMessage &, const TCPMessageInfo &)
Definition CMVRxchangeService.cpp:308
virtual VCOMError VCOM_CALLTYPE ConnectToRemoteService(const ConnectToRemoteServiceArgs &service)
Definition CMVRxchangeService.cpp:200
Definition IMediaRessourceVectorInterface.h:1769
Definition GSString.h:134
const char * GetCharPtr() const
Definition GSString.h:351
Definition CieColor.h:9
std::vector< TXString > TXStringArray
Definition GSString.h:547
uint32_t VCOMError
Definition VectorworksMVR.h:119
Definition mvrxchange_client.h:23
Definition mvrxchange_client.h:13
Definition CMVRxchangeService.h:16
TXString Name
Definition CMVRxchangeService.h:19
TXStringArray IP
Definition CMVRxchangeService.h:17
MvrUUID stationUUID
Definition CMVRxchangeService.h:20
uint16_t Port
Definition CMVRxchangeService.h:18
Definition IMediaRessourceVectorInterface.h:64