|
|
|
@ -63,8 +63,9 @@ type P struct { |
|
|
|
|
|
|
|
|
|
|
|
var _ publisher.I = &P{} |
|
|
|
var _ publisher.I = &P{} |
|
|
|
|
|
|
|
|
|
|
|
func NewPublisher() (publisher *P) { |
|
|
|
func NewPublisher(c context.Context) (publisher *P) { |
|
|
|
return &P{ |
|
|
|
return &P{ |
|
|
|
|
|
|
|
c: c, |
|
|
|
Map: make(Map), |
|
|
|
Map: make(Map), |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -113,7 +114,7 @@ func (p *P) Receive(msg typer.T) { |
|
|
|
subs = make(map[string]Subscription) |
|
|
|
subs = make(map[string]Subscription) |
|
|
|
subs[m.Id] = Subscription{S: m.Filters, remote: m.remote} |
|
|
|
subs[m.Id] = Subscription{S: m.Filters, remote: m.remote} |
|
|
|
p.Map[m.Conn] = subs |
|
|
|
p.Map[m.Conn] = subs |
|
|
|
log.T.C( |
|
|
|
log.D.C( |
|
|
|
func() string { |
|
|
|
func() string { |
|
|
|
return fmt.Sprintf( |
|
|
|
return fmt.Sprintf( |
|
|
|
"created new subscription for %s, %s", |
|
|
|
"created new subscription for %s, %s", |
|
|
|
@ -124,7 +125,7 @@ func (p *P) Receive(msg typer.T) { |
|
|
|
) |
|
|
|
) |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
subs[m.Id] = Subscription{S: m.Filters, remote: m.remote} |
|
|
|
subs[m.Id] = Subscription{S: m.Filters, remote: m.remote} |
|
|
|
log.T.C( |
|
|
|
log.D.C( |
|
|
|
func() string { |
|
|
|
func() string { |
|
|
|
return fmt.Sprintf( |
|
|
|
return fmt.Sprintf( |
|
|
|
"added subscription %s for %s", m.Id, |
|
|
|
"added subscription %s for %s", m.Id, |
|
|
|
@ -151,7 +152,7 @@ func (p *P) Deliver(ev *event.E) { |
|
|
|
var err error |
|
|
|
var err error |
|
|
|
p.Mx.Lock() |
|
|
|
p.Mx.Lock() |
|
|
|
defer p.Mx.Unlock() |
|
|
|
defer p.Mx.Unlock() |
|
|
|
log.T.C( |
|
|
|
log.D.C( |
|
|
|
func() string { |
|
|
|
func() string { |
|
|
|
return fmt.Sprintf( |
|
|
|
return fmt.Sprintf( |
|
|
|
"delivering event %0x to websocket subscribers %d", ev.ID, |
|
|
|
"delivering event %0x to websocket subscribers %d", ev.ID, |
|
|
|
@ -160,13 +161,6 @@ func (p *P) Deliver(ev *event.E) { |
|
|
|
}, |
|
|
|
}, |
|
|
|
) |
|
|
|
) |
|
|
|
for w, subs := range p.Map { |
|
|
|
for w, subs := range p.Map { |
|
|
|
log.T.C( |
|
|
|
|
|
|
|
func() string { |
|
|
|
|
|
|
|
return fmt.Sprintf( |
|
|
|
|
|
|
|
"%v %s", subs, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
for id, subscriber := range subs { |
|
|
|
for id, subscriber := range subs { |
|
|
|
if !subscriber.Match(ev) { |
|
|
|
if !subscriber.Match(ev) { |
|
|
|
continue |
|
|
|
continue |
|
|
|
@ -185,7 +179,7 @@ func (p *P) Deliver(ev *event.E) { |
|
|
|
); chk.E(err) { |
|
|
|
); chk.E(err) { |
|
|
|
continue |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
log.T.C( |
|
|
|
log.D.C( |
|
|
|
func() string { |
|
|
|
func() string { |
|
|
|
return fmt.Sprintf( |
|
|
|
return fmt.Sprintf( |
|
|
|
"dispatched event %0x to subscription %s, %s", |
|
|
|
"dispatched event %0x to subscription %s, %s", |
|
|
|
|