float Message::getArgAsFloat(int index, bool typeConvert) const{ if (getArgType(index) != TYPE_FLOAT){ if( typeConvert && (getArgType(index) == TYPE_INT32) ) return (float)((ArgInt32*)args[index])->get(); else throw OscExcInvalidArgumentType(); }else return ((ArgFloat*)args[index])->get(); }
void OscSender::appendMessage(OscMessage& message, ::osc::OutboundPacketStream& p){ p << ::osc::BeginMessage(message.getAddress().c_str()); for (int i = 0; i < message.getNumArgs(); ++i) { if (message.getArgType(i) == TYPE_INT32){ p << message.getArgAsInt32(i); }else if (message.getArgType(i) == TYPE_FLOAT){ p << message.getArgAsFloat(i); }else if (message.getArgType(i) == TYPE_STRING){ p << message.getArgAsString(i).c_str(); }else { throw OscExcInvalidArgumentType(); } } p << ::osc::EndMessage; }
std::string Message::getArgAsString( int index, bool typeConvert ) const{ if (getArgType(index) != TYPE_STRING ){ if (typeConvert && (getArgType(index) == TYPE_FLOAT) ){ char buf[1024]; sprintf(buf,"%f",((ArgFloat*)args[index])->get() ); return std::string( buf ); } else if (typeConvert && (getArgType(index) == TYPE_INT32)){ char buf[1024]; sprintf(buf,"%i",((ArgInt32*)args[index])->get() ); return std::string( buf ); } else throw OscExcInvalidArgumentType(); } else return ((ArgString*)args[index])->get(); }
Message& Message::copy( const Message& other ){ address = other.address; remote_host = other.remote_host; remote_port = other.remote_port; for ( int i=0; i<(int)other.args.size(); ++i ){ ArgType argType = other.getArgType( i ); if ( argType == TYPE_INT32 ) args.push_back( new ArgInt32( other.getArgAsInt32( i ) ) ); else if ( argType == TYPE_FLOAT ) args.push_back( new ArgFloat( other.getArgAsFloat( i ) ) ); else if ( argType == TYPE_STRING ) args.push_back( new ArgString( other.getArgAsString( i ) ) ); else { throw OscExcInvalidArgumentType(); } } return *this; }