Rename interpretor to interpreter.
[Faustine.git] / interpreter / preprocessor / faust-0.9.47mr3 / architecture / osclib / oscpack / examples / SimpleReceive.cpp
diff --git a/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/oscpack/examples/SimpleReceive.cpp b/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/oscpack/examples/SimpleReceive.cpp
new file mode 100644 (file)
index 0000000..c8ff042
--- /dev/null
@@ -0,0 +1,75 @@
+/* 
+    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;
+}
+