Changeset 137 in code for trunk


Ignore:
Timestamp:
Mar 23, 2020, 3:05:00 PM (5 years ago)
Author:
contact
Message:

Add user.{add,remove}Downstream

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r136 r137  
    305305
    306306        if u := dc.user; u != nil {
    307                 u.lock.Lock()
    308                 for i := range u.downstreamConns {
    309                         if u.downstreamConns[i] == dc {
    310                                 u.downstreamConns = append(u.downstreamConns[:i], u.downstreamConns[i+1:]...)
    311                                 break
    312                         }
    313                 }
    314                 u.lock.Unlock()
     307                u.removeDownstream(dc)
    315308        }
    316309
     
    661654        dc.logger.Printf("registration complete for user %q", dc.username)
    662655
    663         dc.user.lock.Lock()
    664         firstDownstream := len(dc.user.downstreamConns) == 0
    665         dc.user.downstreamConns = append(dc.user.downstreamConns, dc)
    666         dc.user.lock.Unlock()
     656        firstDownstream := dc.user.addDownstream(dc)
    667657
    668658        dc.SendMessage(&irc.Message{
     
    708698                historyName := dc.rawUsername
    709699
     700                // TODO: need to take dc.network into account here
    710701                var seqPtr *uint64
    711702                if firstDownstream {
     
    718709                }
    719710
     711                // TODO: we need to create a consumer when adding networks on-the-fly
    720712                consumer, ch := uc.ring.NewConsumer(seqPtr)
    721713                go func() {
     
    735727                        seq := consumer.Close()
    736728
     729                        // TODO: need to take dc.network into account here
    737730                        dc.user.lock.Lock()
    738731                        lastDownstream := len(dc.user.downstreamConns) == 0
  • trunk/user.go

    r136 r137  
    177177}
    178178
     179func (u *user) addDownstream(dc *downstreamConn) (first bool) {
     180        u.lock.Lock()
     181        first = len(dc.user.downstreamConns) == 0
     182        u.downstreamConns = append(u.downstreamConns, dc)
     183        u.lock.Unlock()
     184        return first
     185}
     186
     187func (u *user) removeDownstream(dc *downstreamConn) {
     188        u.lock.Lock()
     189        for i := range u.downstreamConns {
     190                if u.downstreamConns[i] == dc {
     191                        u.downstreamConns = append(u.downstreamConns[:i], u.downstreamConns[i+1:]...)
     192                        break
     193                }
     194        }
     195        u.lock.Unlock()
     196}
     197
    179198func (u *user) createNetwork(net *Network) (*network, error) {
    180199        network := newNetwork(u, net)
Note: See TracChangeset for help on using the changeset viewer.