@@ -21,13 +21,13 @@ extern crate tokio_service;
21
21
extern crate osc_address;
22
22
#[ macro_use] extern crate osc_address_derive;
23
23
24
- use osc_address:: OscMessage ;
24
+ use osc_address:: { OscMessage , OscBundle , OscPacket } ;
25
25
26
26
use std:: io;
27
27
use std:: net:: { IpAddr , Ipv4Addr , SocketAddr } ;
28
28
use std:: error:: Error ;
29
29
30
- use bytes:: { BytesMut , BufMut } ;
30
+ use bytes:: { Buf , BytesMut , BufMut } ;
31
31
use futures:: { Future , BoxFuture , Sink , Stream } ;
32
32
use tokio_core:: net:: { UdpSocket , UdpCodec } ;
33
33
use tokio_core:: reactor:: Core ;
@@ -46,7 +46,7 @@ enum OscMsg {
46
46
struct OSCCodec ;
47
47
48
48
impl UdpCodec for OSCCodec {
49
- type In = ( SocketAddr , OscMsg ) ;
49
+ type In = ( SocketAddr , OscBundle < OscMsg > ) ;
50
50
type Out = ( SocketAddr , Vec < u8 > ) ;
51
51
52
52
fn decode ( & mut self , addr : & SocketAddr , buf : & [ u8 ] ) -> io:: Result < Self :: In > {
@@ -75,21 +75,32 @@ fn go() -> Result<(), Box<Error>> {
75
75
76
76
let sock_stream = sock_stream
77
77
. or_else :: < _ , Result < _ , io:: Error > > ( |err| {
78
- println ! ( "error: {:?}" , err) ;
79
- Ok ( ( addr. clone ( ) , OscMsg :: Error ( ( ) , ( err. description ( ) . to_string ( ) , ) ) ) )
78
+ // TODO: We need a way to bundle these errors back into an OscBundle and pass them along
79
+ // println!("error: {:?}", err);
80
+ // Ok((addr.clone(), OscMsg::Error((), (err.description().to_string(),))))
81
+ Err ( err)
80
82
} )
81
- . for_each ( |( addr, msg) | {
82
- match msg {
83
- OscMsg :: Freq ( ( ) , ( new_freq, ) ) => {
84
- println ! ( "new_freq: {:?}" , & new_freq) ;
85
- }
86
- OscMsg :: Error ( ( ) , ( err, ) ) => {
87
- println ! ( "error: {}" , & err) ;
88
- }
89
- _ => {
90
- println ! ( "message: {:?}" , & msg) ;
83
+ . for_each ( |( addr, bundle) | {
84
+ for packet in bundle. messages ( ) {
85
+ match packet {
86
+ OscPacket :: Message ( msg) => {
87
+ match msg {
88
+ OscMsg :: Freq ( ( ) , ( new_freq, ) ) => {
89
+ println ! ( "new_freq: {:?}" , & new_freq) ;
90
+ }
91
+ OscMsg :: Error ( ( ) , ( err, ) ) => {
92
+ println ! ( "error: {}" , & err) ;
93
+ }
94
+ _ => {
95
+ println ! ( "message: {:?}" , & msg) ;
96
+ }
97
+ }
98
+ }
99
+
100
+ OscPacket :: Bundle ( _) => println ! ( "Sorry, we'll only nest one deep here" )
91
101
}
92
102
}
103
+
93
104
Ok ( ( ) )
94
105
} ) ;
95
106
0 commit comments