コード例 #1
0
ファイル: main.go プロジェクト: kloepper/pubsub
func (ch fooChan) SubscribeTo(ctx *pubsub.Context) error {
	rfn := func(v interface{}) bool {
		if v == ctx.Done {
			close(ch)
			ctx.Close()
			return false
		}
		ch <- v.(foo)
		return true
	}

	ctx.Buffer.ReadTo(rfn)
	return nil
}
コード例 #2
0
ファイル: main.go プロジェクト: kloepper/pubsub
func (fn fooFunc) SubscribeTo(ctx *pubsub.Context) error {
	rfn := func(v interface{}) bool {
		if v == ctx.Done {
			ctx.Close()
			return false
		}

		fn(v.(foo))
		return true
	}

	ctx.Buffer.ReadTo(rfn)
	return nil
}
コード例 #3
0
ファイル: main.go プロジェクト: kloepper/pubsub
func (ch fooChan) PublishTo(ctx *pubsub.Context) error {
	go func() {
		defer ctx.Close()

		for {
			select {
			case v, ok := <-ch:
				if !ok {
					return
				}

				ctx.Buffer.Write(v)
			case <-ctx.Done:
				return
			}
		}
	}()

	return nil
}