...
1 package eventsource_test
2
3 import (
4 "fmt"
5 "net"
6 "net/http"
7 "time"
8
9 "github.com/donovanhide/eventsource"
10 )
11
12 type TimeEvent time.Time
13
14 func (t TimeEvent) Id() string { return fmt.Sprint(time.Time(t).UnixNano()) }
15 func (t TimeEvent) Event() string { return "Tick" }
16 func (t TimeEvent) Data() string { return time.Time(t).String() }
17
18 const (
19 TICK_COUNT = 5
20 )
21
22 func TimePublisher(srv *eventsource.Server) {
23 start := time.Date(2013, time.January, 1, 0, 0, 0, 0, time.UTC)
24 ticker := time.NewTicker(time.Second)
25 for i := 0; i < TICK_COUNT; i++ {
26 <-ticker.C
27 srv.Publish([]string{"time"}, TimeEvent(start))
28 start = start.Add(time.Second)
29 }
30 }
31
32 func ExampleEvent() {
33 srv := eventsource.NewServer()
34 srv.Gzip = true
35 defer srv.Close()
36 l, err := net.Listen("tcp", ":8080")
37 if err != nil {
38 return
39 }
40 defer l.Close()
41 http.HandleFunc("/time", srv.Handler("time"))
42 go http.Serve(l, nil)
43 go TimePublisher(srv)
44 stream, err := eventsource.Subscribe("http://127.0.0.1:8080/time", "")
45 if err != nil {
46 return
47 }
48 for i := 0; i < TICK_COUNT; i++ {
49 ev := <-stream.Events
50 fmt.Println(ev.Id(), ev.Event(), ev.Data())
51 }
52
53
54
55
56
57
58
59 }
60
View as plain text