...

Source file src/github.com/donovanhide/eventsource/example_event_test.go

Documentation: github.com/donovanhide/eventsource

     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  	// Output:
    54  	// 1356998400000000000 Tick 2013-01-01 00:00:00 +0000 UTC
    55  	// 1356998401000000000 Tick 2013-01-01 00:00:01 +0000 UTC
    56  	// 1356998402000000000 Tick 2013-01-01 00:00:02 +0000 UTC
    57  	// 1356998403000000000 Tick 2013-01-01 00:00:03 +0000 UTC
    58  	// 1356998404000000000 Tick 2013-01-01 00:00:04 +0000 UTC
    59  }
    60  

View as plain text