Changeset 34 in code for trunk/upstream.go


Ignore:
Timestamp:
Feb 7, 2020, 9:54:03 AM (5 years ago)
Author:
contact
Message:

Handle third-party JOIN and PART messages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/upstream.go

    r33 r34  
    136136                        return newNeedMoreParamsError(msg.Command)
    137137                }
     138
    138139                for _, ch := range strings.Split(msg.Params[0], ",") {
    139                         c.logger.Printf("joined channel %q", ch)
    140                         c.channels[ch] = &upstreamChannel{
    141                                 Name:    ch,
    142                                 Members: make(map[string]membership),
     140                        if msg.Prefix.Name == c.upstream.Nick {
     141                                c.logger.Printf("joined channel %q", ch)
     142                                c.channels[ch] = &upstreamChannel{
     143                                        Name:    ch,
     144                                        Members: make(map[string]membership),
     145                                }
     146                        } else {
     147                                ch, err := c.getChannel(ch)
     148                                if err != nil {
     149                                        return err
     150                                }
     151                                ch.Members[msg.Prefix.Name] = 0
    143152                        }
    144153                }
     154
     155                c.srv.lock.Lock()
     156                for _, dc := range c.srv.downstreamConns {
     157                        dc.messages <- msg
     158                }
     159                c.srv.lock.Unlock()
     160        case "PART":
     161                if len(msg.Params) < 1 {
     162                        return newNeedMoreParamsError(msg.Command)
     163                }
     164
     165                for _, ch := range strings.Split(msg.Params[0], ",") {
     166                        if msg.Prefix.Name == c.upstream.Nick {
     167                                c.logger.Printf("parted channel %q", ch)
     168                                delete(c.channels, ch)
     169                        } else {
     170                                ch, err := c.getChannel(ch)
     171                                if err != nil {
     172                                        return err
     173                                }
     174                                delete(ch.Members, msg.Prefix.Name)
     175                        }
     176                }
     177
     178                c.srv.lock.Lock()
     179                for _, dc := range c.srv.downstreamConns {
     180                        dc.messages <- msg
     181                }
     182                c.srv.lock.Unlock()
    145183        case irc.RPL_TOPIC, irc.RPL_NOTOPIC:
    146184                if len(msg.Params) < 3 {
     
    211249                }
    212250
     251                if ch.complete {
     252                        return fmt.Errorf("received unexpected RPL_ENDOFNAMES")
     253                }
    213254                ch.complete = true
    214255
Note: See TracChangeset for help on using the changeset viewer.