48 lines
724 B
Go
48 lines
724 B
Go
|
package pubsub
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
|
||
|
cskrpubsub "github.com/cskr/pubsub"
|
||
|
)
|
||
|
|
||
|
type PubSubWriter struct {
|
||
|
*cskrpubsub.PubSub
|
||
|
topic string
|
||
|
closed bool
|
||
|
}
|
||
|
|
||
|
func NewPubSubWriter() *PubSubWriter {
|
||
|
pipe := new(PubSubWriter)
|
||
|
pipe.PubSub = cskrpubsub.New(1)
|
||
|
return pipe
|
||
|
}
|
||
|
|
||
|
func (pipe *PubSubWriter) Write(p []byte) (n int, err error) {
|
||
|
if pipe.closed {
|
||
|
err = io.EOF
|
||
|
return
|
||
|
}
|
||
|
pipe.PubSub.Pub(p, "")
|
||
|
n = len(p)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (pipe *PubSubWriter) Close() (err error) {
|
||
|
if pipe.closed {
|
||
|
err = io.EOF
|
||
|
return
|
||
|
}
|
||
|
pipe.PubSub.Shutdown()
|
||
|
pipe.closed = true
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (pipe *PubSubWriter) Sub() io.ReadCloser {
|
||
|
return &PubSubReader{
|
||
|
channel: pipe.PubSub.Sub(""),
|
||
|
pubsub: pipe.PubSub,
|
||
|
closed: pipe.closed,
|
||
|
}
|
||
|
}
|