// Description: a node that can send messages over Open Sound Control
//
//notes:
//
//- derived nodes inherit all messages from their base classes
//
- see reset method for default settings
//
-
//
//
// Category: Sound
// Author: Ben Chang
// Revision: 05/10/04
#include "OSCNode.h"
#include "OSC-client.h"
#include "htmsocket.h"
using namespace std;
extern "C" ygNode* construct_OSCNode(const char* name,bool master) { return new OSCNode(name,master); }
struct _OSCNodePrivateData
{
ygString OSCInstrumentName;
ygString netOSCInstrumentName;
ygString host;
int port;
bool netPlay;
};
OSCNode::OSCNode(const char* name,bool master) : ygNode(name,master)
{
setClassName("OSCNode");
p_ = new struct _OSCNodePrivateData;
p_->host = "localhost";
p_->port = 10000;
}
OSCNode::~OSCNode(void)
{
delete p_;
}
void OSCNode::reset(void)
{
ygNode::reset();
}
void OSCNode::message(const ygMessage& msg)
{
if (msg == "sendMessage")
{
// arg(0) = message address (string)
// arg(1 ... numArgs) are float arguments
int numArgs = msg.args.size();
float arglist [32];
char * messageName;
if (numArgs>32)
cout << "Warning: OSCNode takes only 32 args\n";
for (int i=1;ihost = msg.args[0];
cerr << "setting host = " << p_->host.c_str() << "\n";
}
// set the port number on the host sound server
else if (msg == "port")
p_->port = msg.intArg(0);
else
ygNode::message(msg);
}
void OSCNode::app(void)
{
ygNode::app();
}
#define MAX_ARGS 2000
#define SC_BUFFER_SIZE 32000
void OSCNode::sendOSCMessage (ygString oscmessage,int count, float *args)
{
OSCbuf buf;
void *socket;
int messagelength;
static char bufferForOSCbuf[SC_BUFFER_SIZE];
OSC_initBuffer (&buf,SC_BUFFER_SIZE,bufferForOSCbuf);
//OSC_writeAddressAndTypes (&buf,messageName,",fff");
if (count==0)
OSC_writeAddress (&buf, oscmessage.c_str());
else if (count==1)
OSC_writeAddressAndTypes (&buf,oscmessage.c_str(),",f");
for (int i=0;ihost.c_str(),p_->port);
SendHTMSocket (socket,OSC_packetSize(&buf),OSC_getPacket(&buf));
CloseHTMSocket (socket);
}
void OSCNode::sendOSCMessage (ygString oscmessage)
{
sendOSCMessage (oscmessage,0,NULL);
}