mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-02-03 03:30:06 +00:00
Add IP and Port detection option in OSCReceiver
This commit is contained in:
parent
61a03097ec
commit
d2cf768b0a
4 changed files with 72 additions and 3 deletions
|
|
@ -60,6 +60,12 @@
|
|||
|
||||
#pragma once
|
||||
#define JUCE_OSC_H_INCLUDED
|
||||
/** Config: JUCE_IP_AND_PORT_DETECTION
|
||||
If enabled, this will add remoteIP and remotePort variables to osc packets, corresponding to the sender's ip and port when receiving messages.
|
||||
*/
|
||||
#ifndef JUCE_IP_AND_PORT_DETECTION
|
||||
#define JUCE_IP_AND_PORT_DETECTION 0
|
||||
#endif
|
||||
|
||||
#include <juce_core/juce_core.h>
|
||||
#include <juce_events/juce_events.h>
|
||||
|
|
|
|||
|
|
@ -50,6 +50,26 @@ OSCAddressPattern OSCMessage::getAddressPattern() const noexcept
|
|||
return addressPattern;
|
||||
}
|
||||
|
||||
#if JUCE_IP_AND_PORT_DETECTION
|
||||
String OSCMessage::getSenderIPAddress() const noexcept
|
||||
{
|
||||
return senderIPAddress;
|
||||
}
|
||||
|
||||
void OSCMessage::setSenderIPAddress(const String& ip) noexcept
|
||||
{
|
||||
senderIPAddress = ip;
|
||||
}
|
||||
|
||||
int OSCMessage::getSenderPortNumber() const noexcept
|
||||
{
|
||||
return senderPortNumber;
|
||||
}
|
||||
void OSCMessage::setSenderPortNumber(int port) noexcept
|
||||
{
|
||||
senderPortNumber = port;
|
||||
}
|
||||
#endif
|
||||
//==============================================================================
|
||||
int OSCMessage::size() const noexcept
|
||||
{
|
||||
|
|
|
|||
|
|
@ -91,6 +91,16 @@ public:
|
|||
/** Returns the address pattern of the OSCMessage. */
|
||||
OSCAddressPattern getAddressPattern() const noexcept;
|
||||
|
||||
#if JUCE_IP_AND_PORT_DETECTION
|
||||
/** Returns the sender's IP Address. */
|
||||
String getSenderIPAddress() const noexcept;
|
||||
void setSenderIPAddress(const String& ip) noexcept;
|
||||
|
||||
/** Returns the sender's port number. */
|
||||
int getSenderPortNumber() const noexcept;
|
||||
void setSenderPortNumber(int port) noexcept;
|
||||
#endif
|
||||
|
||||
/** Returns the number of OSCArgument objects that belong to this OSCMessage. */
|
||||
int size() const noexcept;
|
||||
|
||||
|
|
@ -178,6 +188,11 @@ private:
|
|||
//==============================================================================
|
||||
OSCAddressPattern addressPattern;
|
||||
Array<OSCArgument> arguments;
|
||||
|
||||
#if JUCE_IP_AND_PORT_DETECTION
|
||||
String senderIPAddress;
|
||||
int senderPortNumber = 0;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -56,9 +56,18 @@ namespace
|
|||
@param sourceData the block of data to use as the stream's source
|
||||
@param sourceDataSize the number of bytes in the source data block
|
||||
*/
|
||||
|
||||
#if JUCE_IP_AND_PORT_DETECTION
|
||||
OSCInputStream (const void* sourceData, size_t sourceDataSize, const String& senderIPAddress, const int& senderPortNumber) :
|
||||
input(sourceData, sourceDataSize, false),
|
||||
senderIPAddress(senderIPAddress),
|
||||
senderPortNumber(senderPortNumber)
|
||||
{}
|
||||
#else
|
||||
OSCInputStream (const void* sourceData, size_t sourceDataSize)
|
||||
: input (sourceData, sourceDataSize, false)
|
||||
{}
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
/** Returns a pointer to the source data block from which this stream is reading. */
|
||||
|
|
@ -273,6 +282,11 @@ namespace
|
|||
private:
|
||||
MemoryInputStream input;
|
||||
|
||||
#if JUCE_IP_AND_PORT_DETECTION
|
||||
String senderIPAddress;
|
||||
int senderPortNumber;
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
void readPaddingZeros (size_t bytesRead)
|
||||
{
|
||||
|
|
@ -427,10 +441,15 @@ struct OSCReceiver::Pimpl : private Thread,
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
void handleBuffer (const char* data, size_t dataSize)
|
||||
#if JUCE_IP_AND_PORT_DETECTION
|
||||
void handleBuffer(const char* data, size_t dataSize, const String& senderIPAddress, const int& senderPortNumber)
|
||||
{
|
||||
OSCInputStream inStream (data, dataSize);
|
||||
|
||||
OSCInputStream inStream(data, dataSize, senderIPAddress, senderPortNumber);
|
||||
#else
|
||||
void handleBuffer(const char* data, size_t dataSize)
|
||||
{
|
||||
OSCInputStream inStream(data, dataSize);
|
||||
#endif
|
||||
try
|
||||
{
|
||||
auto content = inStream.readElementWithKnownSize (dataSize);
|
||||
|
|
@ -477,10 +496,19 @@ private:
|
|||
if (ready == 0)
|
||||
continue;
|
||||
|
||||
|
||||
#if JUCE_IP_AND_PORT_DETECTION
|
||||
String senderIPAddress = "";
|
||||
int senderPortNumber = 0;
|
||||
auto bytesRead = (size_t) socket->read (oscBuffer.getData(), bufferSize, false, senderIPAddress, senderPortNumber);
|
||||
if (bytesRead >= 4)
|
||||
handleBuffer(oscBuffer.getData(), bytesRead, senderIPAddress, senderPortNumber);
|
||||
#else
|
||||
auto bytesRead = (size_t) socket->read (oscBuffer.getData(), bufferSize, false);
|
||||
|
||||
if (bytesRead >= 4)
|
||||
handleBuffer (oscBuffer.getData(), bytesRead);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue