Changeset 69 in code for trunk/upstream.go


Ignore:
Timestamp:
Feb 19, 2020, 5:25:19 PM (5 years ago)
Author:
contact
Message:

Add functions to translate between upstream and downstream names

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/upstream.go

    r68 r69  
    9292}
    9393
     94func (uc *upstreamConn) prefix() *irc.Prefix {
     95        return &irc.Prefix{
     96                Name: uc.nick,
     97                User: uc.upstream.Username,
     98                // TODO: fill the host?
     99        }
     100}
     101
    94102func (uc *upstreamConn) Close() error {
    95103        if uc.closed {
     
    118126                return nil
    119127        case "MODE":
     128                if msg.Prefix == nil {
     129                        return fmt.Errorf("missing prefix")
     130                }
     131
    120132                var name, modeStr string
    121133                if err := parseMessageParams(msg, &name, &modeStr); err != nil {
     
    136148                                return err
    137149                        }
    138                 }
    139 
    140                 uc.user.forEachDownstream(func(dc *downstreamConn) {
    141                         dc.SendMessage(msg)
    142                 })
     150
     151                        uc.user.forEachDownstream(func(dc *downstreamConn) {
     152                                dc.SendMessage(&irc.Message{
     153                                        Prefix:  dc.marshalUserPrefix(uc, msg.Prefix),
     154                                        Command: "MODE",
     155                                        Params:  []string{dc.marshalChannel(uc, name), modeStr},
     156                                })
     157                        })
     158                }
    143159        case "NOTICE":
    144160                uc.logger.Print(msg)
     
    177193                        }
    178194                }
    179 
    180                 uc.user.forEachDownstream(func(dc *downstreamConn) {
    181                         dc.SendMessage(msg)
    182                 })
    183195        case "JOIN":
     196                if msg.Prefix == nil {
     197                        return fmt.Errorf("expected a prefix")
     198                }
     199
    184200                var channels string
    185201                if err := parseMessageParams(msg, &channels); err != nil {
     
    202218                                ch.Members[msg.Prefix.Name] = 0
    203219                        }
    204                 }
    205 
    206                 uc.user.forEachDownstream(func(dc *downstreamConn) {
    207                         dc.SendMessage(msg)
    208                 })
     220
     221                        uc.user.forEachDownstream(func(dc *downstreamConn) {
     222                                dc.SendMessage(&irc.Message{
     223                                        Prefix:  dc.marshalUserPrefix(uc, msg.Prefix),
     224                                        Command: "JOIN",
     225                                        Params:  []string{dc.marshalChannel(uc, ch)},
     226                                })
     227                        })
     228                }
    209229        case "PART":
     230                if msg.Prefix == nil {
     231                        return fmt.Errorf("expected a prefix")
     232                }
     233
    210234                var channels string
    211235                if err := parseMessageParams(msg, &channels); err != nil {
     
    224248                                delete(ch.Members, msg.Prefix.Name)
    225249                        }
    226                 }
    227 
    228                 uc.user.forEachDownstream(func(dc *downstreamConn) {
    229                         dc.SendMessage(msg)
    230                 })
     250
     251                        uc.user.forEachDownstream(func(dc *downstreamConn) {
     252                                dc.SendMessage(&irc.Message{
     253                                        Prefix:  dc.marshalUserPrefix(uc, msg.Prefix),
     254                                        Command: "PART",
     255                                        Params:  []string{dc.marshalChannel(uc, ch)},
     256                                })
     257                        })
     258                }
    231259        case irc.RPL_TOPIC, irc.RPL_NOTOPIC:
    232260                var name, topic string
     
    311339                })
    312340        case "PRIVMSG":
     341                if err := parseMessageParams(msg, nil, nil); err != nil {
     342                        return err
     343                }
    313344                uc.ring.Produce(msg)
    314345        case irc.RPL_YOURHOST, irc.RPL_CREATED:
     
    332363        uc.SendMessage(&irc.Message{
    333364                Command: "NICK",
    334                 Params:  []string{uc.upstream.Nick},
     365                Params:  []string{uc.nick},
    335366        })
    336367        uc.SendMessage(&irc.Message{
Note: See TracChangeset for help on using the changeset viewer.