Skip to content

Commit b7e8e16

Browse files
committed
add custom dispatcher example
1 parent 72c07ab commit b7e8e16

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

customdispatcher_example_test.go

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package osc
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net"
7+
"time"
8+
)
9+
10+
func Example_customdispatcher() {
11+
laddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
12+
if err != nil {
13+
log.Fatal(err)
14+
}
15+
server, err := ListenUDP("udp", laddr)
16+
if err != nil {
17+
log.Fatal(err)
18+
}
19+
defer server.Close()
20+
21+
var (
22+
doneChan = make(chan struct{})
23+
dispatcher = customDispatcher{done: doneChan}
24+
errChan = make(chan error)
25+
)
26+
go func() {
27+
errChan <- server.Serve(1, dispatcher)
28+
}()
29+
30+
// Send a message from the client.
31+
raddr, err := net.ResolveUDPAddr("udp", server.LocalAddr().String())
32+
if err != nil {
33+
log.Fatal(err)
34+
}
35+
client, err := DialUDP("udp", nil, raddr)
36+
if err != nil {
37+
log.Fatal(err)
38+
}
39+
if err := client.Send(Message{Address: "/foo"}); err != nil {
40+
log.Fatal(err)
41+
}
42+
select {
43+
case <-doneChan:
44+
case err := <-errChan:
45+
log.Fatal(err)
46+
case <-time.After(5 * time.Second):
47+
panic("timeout waiting for custom dispatcher example to finish")
48+
}
49+
// Output:
50+
// method /foo received by custom dispatcher
51+
}
52+
53+
type customDispatcher struct {
54+
done chan struct{}
55+
}
56+
57+
func (d customDispatcher) Dispatch(bundle Bundle, exactMatch bool) error {
58+
fmt.Println("bundle received by custom dispatcher")
59+
close(d.done)
60+
return nil
61+
}
62+
63+
func (d customDispatcher) Invoke(msg Message, exactMatch bool) error {
64+
fmt.Printf("method %s received by custom dispatcher\n", msg.Address)
65+
close(d.done)
66+
return nil
67+
}

0 commit comments

Comments
 (0)