Changeset 23 in code for trunk


Ignore:
Timestamp:
Feb 6, 2020, 8:20:22 PM (5 years ago)
Author:
contact
Message:

Allow Server to have access to upstreamConn

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r22 r23  
    4040
    4141type downstreamConn struct {
    42         net        net.Conn
    43         irc        *irc.Conn
    44         srv        *Server
    45         logger     Logger
     42        net    net.Conn
     43        irc    *irc.Conn
     44        srv    *Server
     45        logger Logger
    4646
    4747        registered bool
     
    5454func newDownstreamConn(srv *Server, netConn net.Conn) *downstreamConn {
    5555        return &downstreamConn{
    56                 net: netConn,
    57                 irc: irc.NewConn(netConn),
    58                 srv: srv,
     56                net:    netConn,
     57                irc:    irc.NewConn(netConn),
     58                srv:    srv,
    5959                logger: &prefixLogger{srv.Logger, fmt.Sprintf("downstream %q: ", netConn.RemoteAddr())},
    6060        }
  • trunk/server.go

    r22 r23  
    5555                // TODO: retry connecting
    5656                go func() {
    57                         if err := connect(s, upstream); err != nil {
    58                                 s.Logger.Printf("Failed to connect to upstream server %q: %v", upstream.Addr, err)
     57                        conn, err := connectToUpstream(s, upstream)
     58                        if err != nil {
     59                                s.Logger.Printf("failed to connect to upstream server %q: %v", upstream.Addr, err)
     60                                return
     61                        }
     62                        if err := conn.readMessages(); err != nil {
     63                                conn.logger.Printf("failed to handle messages: %v", err)
    5964                        }
    6065                }()
     
    7378                go func() {
    7479                        if err := conn.readMessages(); err != nil {
    75                                 conn.logger.Printf("Error handling messages: %v", err)
     80                                conn.logger.Printf("failed to handle messages: %v", err)
    7681                        }
    7782                }()
  • trunk/upstream.go

    r21 r23  
    176176}
    177177
    178 func connect(s *Server, upstream *Upstream) error {
     178func (c *upstreamConn) readMessages() error {
     179        defer c.net.Close()
     180
     181        err := c.irc.WriteMessage(&irc.Message{
     182                Command: "NICK",
     183                Params:  []string{c.upstream.Nick},
     184        })
     185        if err != nil {
     186                return err
     187        }
     188
     189        err = c.irc.WriteMessage(&irc.Message{
     190                Command: "USER",
     191                Params:  []string{c.upstream.Username, "0", "*", c.upstream.Realname},
     192        })
     193        if err != nil {
     194                return err
     195        }
     196
     197        for {
     198                msg, err := c.irc.ReadMessage()
     199                if err == io.EOF {
     200                        break
     201                } else if err != nil {
     202                        return fmt.Errorf("failed to read IRC command: %v", err)
     203                }
     204
     205                if err := c.handleMessage(msg); err != nil {
     206                        c.logger.Printf("failed to handle message %q: %v", msg, err)
     207                }
     208        }
     209
     210        return c.net.Close()
     211}
     212
     213func connectToUpstream(s *Server, upstream *Upstream) (*upstreamConn, error) {
    179214        logger := &prefixLogger{s.Logger, fmt.Sprintf("upstream %q: ", upstream.Addr)}
    180215        logger.Printf("connecting to server")
     
    182217        netConn, err := tls.Dial("tcp", upstream.Addr, nil)
    183218        if err != nil {
    184                 return fmt.Errorf("failed to dial %q: %v", upstream.Addr, err)
    185         }
    186 
    187         c := upstreamConn{
     219                return nil, fmt.Errorf("failed to dial %q: %v", upstream.Addr, err)
     220        }
     221
     222        return &upstreamConn{
    188223                upstream: upstream,
    189224                logger:   logger,
     
    192227                srv:      s,
    193228                channels: make(map[string]*upstreamChannel),
    194         }
    195         defer netConn.Close()
    196 
    197         err = c.irc.WriteMessage(&irc.Message{
    198                 Command: "NICK",
    199                 Params:  []string{upstream.Nick},
    200         })
    201         if err != nil {
    202                 return err
    203         }
    204 
    205         err = c.irc.WriteMessage(&irc.Message{
    206                 Command: "USER",
    207                 Params:  []string{upstream.Username, "0", "*", upstream.Realname},
    208         })
    209         if err != nil {
    210                 return err
    211         }
    212 
    213         for {
    214                 msg, err := c.irc.ReadMessage()
    215                 if err == io.EOF {
    216                         break
    217                 } else if err != nil {
    218                         return fmt.Errorf("failed to read IRC command: %v", err)
    219                 }
    220 
    221                 if err := c.handleMessage(msg); err != nil {
    222                         c.logger.Printf("failed to handle message %q: %v", msg, err)
    223                 }
    224         }
    225 
    226         return netConn.Close()
    227 }
     229        }, nil
     230}
Note: See TracChangeset for help on using the changeset viewer.