mirror of
https://github.com/ergochat/ergo.git
synced 2025-12-20 02:00:11 -08:00
refactor sync
* send an empty batch if necessary, as per spec * reduce lock acquisitions
This commit is contained in:
parent
3966c17dec
commit
3e761ff68a
1 changed files with 6 additions and 11 deletions
|
|
@ -62,16 +62,13 @@ func broadcastMetadataUpdate(server *Server, sessions iter.Seq[*Session], origin
|
||||||
}
|
}
|
||||||
|
|
||||||
func syncClientMetadata(server *Server, rb *ResponseBuffer, target *Client) {
|
func syncClientMetadata(server *Server, rb *ResponseBuffer, target *Client) {
|
||||||
if len(rb.session.MetadataSubscriptions()) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
batchId := rb.StartNestedBatch("metadata")
|
batchId := rb.StartNestedBatch("metadata")
|
||||||
defer rb.EndNestedBatch(batchId)
|
defer rb.EndNestedBatch(batchId)
|
||||||
|
|
||||||
|
subs := rb.session.MetadataSubscriptions()
|
||||||
values := target.ListMetadata()
|
values := target.ListMetadata()
|
||||||
for k, v := range values {
|
for k, v := range values {
|
||||||
if rb.session.isSubscribedTo(k) {
|
if subs.Has(k) {
|
||||||
visibility := "*"
|
visibility := "*"
|
||||||
rb.Add(nil, server.name, "METADATA", target.Nick(), k, visibility, v)
|
rb.Add(nil, server.name, "METADATA", target.Nick(), k, visibility, v)
|
||||||
}
|
}
|
||||||
|
|
@ -79,16 +76,14 @@ func syncClientMetadata(server *Server, rb *ResponseBuffer, target *Client) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func syncChannelMetadata(server *Server, rb *ResponseBuffer, target *Channel) {
|
func syncChannelMetadata(server *Server, rb *ResponseBuffer, target *Channel) {
|
||||||
if len(rb.session.MetadataSubscriptions()) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
batchId := rb.StartNestedBatch("metadata")
|
batchId := rb.StartNestedBatch("metadata")
|
||||||
defer rb.EndNestedBatch(batchId)
|
defer rb.EndNestedBatch(batchId)
|
||||||
|
|
||||||
|
subs := rb.session.MetadataSubscriptions()
|
||||||
|
|
||||||
values := target.ListMetadata()
|
values := target.ListMetadata()
|
||||||
for k, v := range values {
|
for k, v := range values {
|
||||||
if rb.session.isSubscribedTo(k) {
|
if subs.Has(k) {
|
||||||
visibility := "*"
|
visibility := "*"
|
||||||
rb.Add(nil, server.name, "METADATA", target.Name(), k, visibility, v)
|
rb.Add(nil, server.name, "METADATA", target.Name(), k, visibility, v)
|
||||||
}
|
}
|
||||||
|
|
@ -97,7 +92,7 @@ func syncChannelMetadata(server *Server, rb *ResponseBuffer, target *Channel) {
|
||||||
for _, client := range target.Members() {
|
for _, client := range target.Members() {
|
||||||
values := client.ListMetadata()
|
values := client.ListMetadata()
|
||||||
for k, v := range values {
|
for k, v := range values {
|
||||||
if rb.session.isSubscribedTo(k) {
|
if subs.Has(k) {
|
||||||
visibility := "*"
|
visibility := "*"
|
||||||
rb.Add(nil, server.name, "METADATA", client.Nick(), k, visibility, v)
|
rb.Add(nil, server.name, "METADATA", client.Nick(), k, visibility, v)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue