Mercurial > hg > aimc
view trunk/external/oscpack/examples/SimpleReceive.cpp @ 690:76f749d29b48
Fix memory leak in CARFAC.
Also get rid of most uses of auto, which tend to hurt readability
unless the type name is particularly long, especially when it masks
pointers.
author | ronw@google.com |
---|---|
date | Tue, 11 Jun 2013 21:41:53 +0000 |
parents | 4b37b53105a3 |
children |
line wrap: on
line source
/* Example of two different ways to process received OSC messages using oscpack. Receives the messages from the SimpleSend.cpp example. */ #include <iostream> #include "osc/OscReceivedElements.h" #include "osc/OscPacketListener.h" #include "ip/UdpSocket.h" #define PORT 7000 class ExamplePacketListener : public osc::OscPacketListener { protected: virtual void ProcessMessage( const osc::ReceivedMessage& m, const IpEndpointName& remoteEndpoint ) { try{ // example of parsing single messages. osc::OsckPacketListener // handles the bundle traversal. if( strcmp( m.AddressPattern(), "/test1" ) == 0 ){ // example #1 -- argument stream interface osc::ReceivedMessageArgumentStream args = m.ArgumentStream(); bool a1; osc::int32 a2; float a3; const char *a4; args >> a1 >> a2 >> a3 >> a4 >> osc::EndMessage; std::cout << "received '/test1' message with arguments: " << a1 << " " << a2 << " " << a3 << " " << a4 << "\n"; }else if( strcmp( m.AddressPattern(), "/test2" ) == 0 ){ // example #2 -- argument iterator interface, supports // reflection for overloaded messages (eg you can call // (*arg)->IsBool() to check if a bool was passed etc). osc::ReceivedMessage::const_iterator arg = m.ArgumentsBegin(); bool a1 = (arg++)->AsBool(); int a2 = (arg++)->AsInt32(); float a3 = (arg++)->AsFloat(); const char *a4 = (arg++)->AsString(); if( arg != m.ArgumentsEnd() ) throw osc::ExcessArgumentException(); std::cout << "received '/test2' message with arguments: " << a1 << " " << a2 << " " << a3 << " " << a4 << "\n"; } }catch( osc::Exception& e ){ // any parsing errors such as unexpected argument types, or // missing arguments get thrown as exceptions. std::cout << "error while parsing message: " << m.AddressPattern() << ": " << e.what() << "\n"; } } }; int main(int argc, char* argv[]) { ExamplePacketListener listener; UdpListeningReceiveSocket s( IpEndpointName( IpEndpointName::ANY_ADDRESS, PORT ), &listener ); std::cout << "press ctrl-c to end\n"; s.RunUntilSigInt(); return 0; }