--- /dev/null
+/*
+ Example of two different ways to process received OSC messages using oscpack.
+ Receives the messages from the SimpleSend.cpp example.
+*/
+
+#include <string.h>
+#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;
+}
+