43 lines
		
	
	
		
			851 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
		
			851 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | package event | ||
|  | 
 | ||
|  | import "fmt" | ||
|  | 
 | ||
|  | func ExampleTypeMux() { | ||
|  | 	type someEvent struct{ I int } | ||
|  | 	type otherEvent struct{ S string } | ||
|  | 	type yetAnotherEvent struct{ X, Y int } | ||
|  | 
 | ||
|  | 	var mux TypeMux | ||
|  | 
 | ||
|  | 	// Start a subscriber. | ||
|  | 	done := make(chan struct{}) | ||
|  | 	sub := mux.Subscribe(someEvent{}, otherEvent{}) | ||
|  | 	go func() { | ||
|  | 		for event := range sub.Chan() { | ||
|  | 			fmt.Printf("Received: %#v\n", event) | ||
|  | 		} | ||
|  | 		fmt.Println("done") | ||
|  | 		close(done) | ||
|  | 	}() | ||
|  | 
 | ||
|  | 	// Post some events. | ||
|  | 	mux.Post(someEvent{5}) | ||
|  | 	mux.Post(yetAnotherEvent{X: 3, Y: 4}) | ||
|  | 	mux.Post(someEvent{6}) | ||
|  | 	mux.Post(otherEvent{"whoa"}) | ||
|  | 
 | ||
|  | 	// Stop closes all subscription channels. | ||
|  | 	// The subscriber goroutine will print "done" | ||
|  | 	// and exit. | ||
|  | 	mux.Stop() | ||
|  | 
 | ||
|  | 	// Wait for subscriber to return. | ||
|  | 	<-done | ||
|  | 
 | ||
|  | 	// Output: | ||
|  | 	// Received: event.someEvent{I:5} | ||
|  | 	// Received: event.someEvent{I:6} | ||
|  | 	// Received: event.otherEvent{S:"whoa"} | ||
|  | 	// done | ||
|  | } |