Added OSC send message functions. Also fixed oscpack address string size check.

This commit is contained in:
Ludwig Frühschütz 2021-04-11 00:13:15 +02:00
parent a6992a45c8
commit 3b36d8b689
3 changed files with 36 additions and 2 deletions

View File

@ -6,6 +6,7 @@
#include <thread>
#include "osc/OscReceivedElements.h"
#include "osc/OscPacketListener.h"
#include "osc/OscOutboundPacketStream.h"
#include "ip/UdpSocket.h"
//Class from OSC library (oscpack). This calls our handleOscMsg() on every new message.
@ -169,6 +170,36 @@ DLLEXPORT char* getStringData(char* targetString, unsigned int targetSize, unsig
return targetString;
}
DLLEXPORT void sendOscMessageInt(char* ip, unsigned int port, char* address, int payload)
{
UdpTransmitSocket transmitSocket(IpEndpointName(ip, port));
char buffer[1024];
osc::OutboundPacketStream p(buffer, 1024);
p << osc::BeginMessage(address) << payload << osc::EndMessage;
transmitSocket.Send(p.Data(), p.Size());
}
DLLEXPORT void sendOscMessageFloat(char* ip, unsigned int port, char* address, float payload)
{
UdpTransmitSocket transmitSocket(IpEndpointName(ip, port));
char buffer[1024];
osc::OutboundPacketStream p(buffer, 1024);
p << osc::BeginMessage(address) << payload << osc::EndMessage;
transmitSocket.Send(p.Data(), p.Size());
}
DLLEXPORT void sendOscMessageString(char* ip, unsigned int port, char* address, char* payload)
{
UdpTransmitSocket transmitSocket(IpEndpointName(ip, port));
char buffer[1024];
osc::OutboundPacketStream p(buffer, 1024);
p << osc::BeginMessage(address) << payload << osc::EndMessage;
transmitSocket.Send(p.Data(), p.Size());
}
void removeStoredString(int stringId)
{
for (UINT i = 0; i < storedStrings.size(); i++)

View File

@ -24,6 +24,9 @@ extern "C" DLLEXPORT int close(unsigned int clearListeners = 1);
extern "C" DLLEXPORT int addListener(LPCSTR address, unsigned int messageID, unsigned int dataType = OSC_TYPE_ALL);
extern "C" DLLEXPORT int removeListener(LPCSTR address);
extern "C" DLLEXPORT char* getStringData(char* targetString, unsigned int targetSize, unsigned int StringID);
extern "C" DLLEXPORT void sendOscMessageInt(char* ip, unsigned int port, char* address, int payload);
extern "C" DLLEXPORT void sendOscMessageFloat(char* ip, unsigned int port, char* address, float payload);
extern "C" DLLEXPORT void sendOscMessageString(char* ip, unsigned int port, char* address, char* payload);
int handleOscMsg(const osc::ReceivedMessage& m);
bool isMatchingOscType(unsigned int msgType, unsigned int listenerTypeField);
bool isMatchingOSCAddress(const char* address, const char* pattern);

View File

@ -362,7 +362,7 @@ OutboundPacketStream& OutboundPacketStream::operator<<( const BeginMessage& rhs
//std::strcpy( messageCursor_, rhs.addressPattern );
std::size_t rhsLength = std::strlen(rhs.addressPattern);
strcpy_s(messageCursor_, rhsLength, rhs.addressPattern);
strcpy_s(messageCursor_, rhsLength+1, rhs.addressPattern); //Size check is done manually earlier
messageCursor_ += rhsLength + 1;
// zero pad to 4-byte boundary
@ -605,7 +605,7 @@ OutboundPacketStream& OutboundPacketStream::operator<<( const char *rhs )
*(--typeTagsCurrent_) = STRING_TYPE_TAG;
//std::strcpy( argumentCurrent_, rhs );
std::size_t rhsLength = std::strlen(rhs);
strcpy_s(argumentCurrent_, rhsLength, rhs);
strcpy_s(argumentCurrent_, rhsLength+1, rhs);
argumentCurrent_ += rhsLength + 1;
// zero pad to 4-byte boundary