diff options
author | Felix Lange <fjl@twurst.com> | 2016-07-19 07:39:12 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2017-01-26 01:44:20 +0800 |
commit | 6d5e100d0dc6fc0b905610850a75b5d4fa907739 (patch) | |
tree | a653dc592af1e7405faeaf9ec9b84f9b32aa3b88 /event/example_subscription_test.go | |
parent | 9b62facdd4bdabfed5ef98d131686c4d2606083a (diff) | |
download | go-tangerine-6d5e100d0dc6fc0b905610850a75b5d4fa907739.tar go-tangerine-6d5e100d0dc6fc0b905610850a75b5d4fa907739.tar.gz go-tangerine-6d5e100d0dc6fc0b905610850a75b5d4fa907739.tar.bz2 go-tangerine-6d5e100d0dc6fc0b905610850a75b5d4fa907739.tar.lz go-tangerine-6d5e100d0dc6fc0b905610850a75b5d4fa907739.tar.xz go-tangerine-6d5e100d0dc6fc0b905610850a75b5d4fa907739.tar.zst go-tangerine-6d5e100d0dc6fc0b905610850a75b5d4fa907739.zip |
event: add new Subscription type and related utilities
This commit introduces a new Subscription type, which is synonymous with
ethereum.Subscription. It also adds a couple of utilities that make
working with Subscriptions easier. The mot complex utility is Feed, a
synchronisation device that implements broadcast subscriptions. Feed is
slightly faster than TypeMux and will replace uses of TypeMux across the
go-ethereum codebase in the future.
Diffstat (limited to 'event/example_subscription_test.go')
-rw-r--r-- | event/example_subscription_test.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/event/example_subscription_test.go b/event/example_subscription_test.go new file mode 100644 index 000000000..de1126689 --- /dev/null +++ b/event/example_subscription_test.go @@ -0,0 +1,56 @@ +// Copyright 2017 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package event_test + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/event" +) + +func ExampleNewSubscription() { + // Create a subscription that sends 10 integers on ch. + ch := make(chan int) + sub := event.NewSubscription(func(quit <-chan struct{}) error { + for i := 0; i < 10; i++ { + select { + case ch <- i: + case <-quit: + fmt.Println("unsubscribed") + return nil + } + } + return nil + }) + + // This is the consumer. It reads 5 integers, then aborts the subscription. + // Note that Unsubscribe waits until the producer has shut down. + for i := range ch { + fmt.Println(i) + if i == 4 { + sub.Unsubscribe() + break + } + } + // Output: + // 0 + // 1 + // 2 + // 3 + // 4 + // unsubscribed +} |