Changeset 485 in code for trunk/user.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/user.go

    r483 r485  
    5858type deliveredClientMap map[string]string // client name -> msg ID
    5959
     60type deliveredStore struct {
     61        m deliveredCasemapMap
     62}
     63
     64func newDeliveredStore() deliveredStore {
     65        return deliveredStore{deliveredCasemapMap{newCasemapMap(0)}}
     66}
     67
     68func (ds deliveredStore) HasTarget(target string) bool {
     69        return ds.m.Value(target) != nil
     70}
     71
     72func (ds deliveredStore) LoadID(target, clientName string) string {
     73        clients := ds.m.Value(target)
     74        if clients == nil {
     75                return ""
     76        }
     77        return clients[clientName]
     78}
     79
     80func (ds deliveredStore) StoreID(target, clientName, msgID string) {
     81        clients := ds.m.Value(target)
     82        if clients == nil {
     83                clients = make(deliveredClientMap)
     84                ds.m.SetValue(target, clients)
     85        }
     86        clients[clientName] = msgID
     87}
     88
     89func (ds deliveredStore) ForEachTarget(f func(target string)) {
     90        for _, entry := range ds.m.innerMap {
     91                f(entry.originalKey)
     92        }
     93}
     94
    6095type network struct {
    6196        Network
     
    65100        conn      *upstreamConn
    66101        channels  channelCasemapMap
    67         delivered deliveredCasemapMap
     102        delivered deliveredStore
    68103        lastError error
    69104        casemap   casemapping
     
    82117                stopped:   make(chan struct{}),
    83118                channels:  m,
    84                 delivered: deliveredCasemapMap{newCasemapMap(0)},
     119                delivered: newDeliveredStore(),
    85120                casemap:   casemapRFC1459,
    86121        }
     
    254289        net.casemap = newCasemap
    255290        net.channels.SetCasemapping(newCasemap)
    256         net.delivered.SetCasemapping(newCasemap)
     291        net.delivered.m.SetCasemapping(newCasemap)
    257292        if net.conn != nil {
    258293                net.conn.channels.SetCasemapping(newCasemap)
Note: See TracChangeset for help on using the changeset viewer.