Changeset 485 in code for trunk/downstream.go


Ignore:
Timestamp:
Mar 29, 2021, 3:49:50 PM (4 years ago)
Author:
contact
Message:

Introduce deliveredStore

This hides the double-map complexity behind a dedicated type.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r484 r485  
    362362        }
    363363
    364         delivered := network.delivered.Value(entity)
    365         if delivered == nil {
    366                 return
    367         }
    368 
    369         delivered[dc.clientName] = id
     364        network.delivered.StoreID(entity, dc.clientName, id)
    370365}
    371366
     
    998993                })
    999994                if firstClient {
    1000                         dc.sendNetworkBacklog(net)
     995                        net.delivered.ForEachTarget(func(target string) {
     996                                dc.sendTargetBacklog(net, target)
     997                        })
    1001998                }
    1002999
    10031000                // Fast-forward history to last message
    1004                 for targetCM, entry := range net.delivered.innerMap {
    1005                         delivered := entry.value.(deliveredClientMap)
    1006                         ch := net.channels.Value(targetCM)
     1001                net.delivered.ForEachTarget(func(target string) {
     1002                        ch := net.channels.Value(target)
    10071003                        if ch != nil && ch.Detached {
    1008                                 continue
    1009                         }
    1010 
     1004                                return
     1005                        }
     1006
     1007                        targetCM := net.casemap(target)
    10111008                        lastID, err := dc.user.msgStore.LastMsgID(net, targetCM, time.Now())
    10121009                        if err != nil {
    10131010                                dc.logger.Printf("failed to get last message ID: %v", err)
    1014                                 continue
    1015                         }
    1016                         delivered[dc.clientName] = lastID
    1017                 }
     1011                                return
     1012                        }
     1013
     1014                        net.delivered.StoreID(target, dc.clientName, lastID)
     1015                })
    10181016        })
    10191017
     
    10351033}
    10361034
    1037 func (dc *downstreamConn) sendNetworkBacklog(net *network) {
    1038         for _, entry := range net.delivered.innerMap {
    1039                 target := entry.originalKey
    1040                 dc.sendTargetBacklog(net, target)
    1041         }
    1042 }
    1043 
    10441035func (dc *downstreamConn) sendTargetBacklog(net *network, target string) {
    10451036        if dc.caps["draft/chathistory"] || dc.user.msgStore == nil {
     
    10491040                return
    10501041        }
    1051         delivered := net.delivered.Value(target)
    1052         if delivered == nil {
    1053                 return
    1054         }
    1055         lastDelivered, ok := delivered[dc.clientName]
    1056         if !ok {
     1042
     1043        lastDelivered := net.delivered.LoadID(target, dc.clientName)
     1044        if lastDelivered == "" {
    10571045                return
    10581046        }
Note: See TracChangeset for help on using the changeset viewer.