Changeset 165 in code


Ignore:
Timestamp:
Mar 27, 2020, 3:33:19 PM (5 years ago)
Author:
contact
Message:

Introduce a user.events channel

This allows to easily add new events, and also guarantees ordering
between different event types.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r164 r165  
    228228}
    229229
    230 func (dc *downstreamConn) readMessages(ch chan<- downstreamIncomingMessage) error {
     230func (dc *downstreamConn) readMessages(ch chan<- event) error {
    231231        for {
    232232                msg, err := dc.irc.ReadMessage()
     
    241241                }
    242242
    243                 ch <- downstreamIncomingMessage{msg, dc}
     243                ch <- eventDownstreamMessage{msg, dc}
    244244        }
    245245
  • trunk/server.go

    r154 r165  
    120120                                dc.logger.Print(err)
    121121                        } else {
    122                                 if err := dc.readMessages(dc.user.downstreamIncoming); err != nil {
     122                                if err := dc.readMessages(dc.user.events); err != nil {
    123123                                        dc.logger.Print(err)
    124124                                }
  • trunk/upstream.go

    r163 r165  
    11681168}
    11691169
    1170 func (uc *upstreamConn) readMessages(ch chan<- upstreamIncomingMessage) error {
     1170func (uc *upstreamConn) readMessages(ch chan<- event) error {
    11711171        for {
    11721172                msg, err := uc.irc.ReadMessage()
     
    11811181                }
    11821182
    1183                 ch <- upstreamIncomingMessage{msg, uc}
     1183                ch <- eventUpstreamMessage{msg, uc}
    11841184        }
    11851185
  • trunk/user.go

    r144 r165  
    88)
    99
    10 type upstreamIncomingMessage struct {
     10type event interface{}
     11
     12type eventUpstreamMessage struct {
    1113        msg *irc.Message
    1214        uc  *upstreamConn
    1315}
    1416
    15 type downstreamIncomingMessage struct {
     17type eventDownstreamMessage struct {
    1618        msg *irc.Message
    1719        dc  *downstreamConn
     
    5961                net.lock.Unlock()
    6062
    61                 if err := uc.readMessages(net.user.upstreamIncoming); err != nil {
     63                if err := uc.readMessages(net.user.events); err != nil {
    6264                        uc.logger.Printf("failed to handle messages: %v", err)
    6365                }
     
    8082        srv *Server
    8183
    82         upstreamIncoming   chan upstreamIncomingMessage
    83         downstreamIncoming chan downstreamIncomingMessage
     84        events chan event
    8485
    8586        lock            sync.Mutex
     
    9091func newUser(srv *Server, record *User) *user {
    9192        return &user{
    92                 User:               *record,
    93                 srv:                srv,
    94                 upstreamIncoming:   make(chan upstreamIncomingMessage, 64),
    95                 downstreamIncoming: make(chan downstreamIncomingMessage, 64),
     93                User:   *record,
     94                srv:    srv,
     95                events: make(chan event, 64),
    9696        }
    9797}
     
    150150        u.lock.Unlock()
    151151
    152         for {
    153                 select {
    154                 case upstreamMsg := <-u.upstreamIncoming:
    155                         msg, uc := upstreamMsg.msg, upstreamMsg.uc
     152        for e := range u.events {
     153                switch e := e.(type) {
     154                case eventUpstreamMessage:
     155                        msg, uc := e.msg, e.uc
    156156                        if uc.closed {
    157157                                uc.logger.Printf("ignoring message on closed connection: %v", msg)
     
    161161                                uc.logger.Printf("failed to handle message %q: %v", msg, err)
    162162                        }
    163                 case downstreamMsg := <-u.downstreamIncoming:
    164                         msg, dc := downstreamMsg.msg, downstreamMsg.dc
     163                case eventDownstreamMessage:
     164                        msg, dc := e.msg, e.dc
    165165                        if dc.isClosed() {
    166166                                dc.logger.Printf("ignoring message on closed connection: %v", msg)
     
    175175                                dc.Close()
    176176                        }
     177                default:
     178                        u.srv.Logger.Printf("received unknown event type: %T", e)
    177179                }
    178180        }
Note: See TracChangeset for help on using the changeset viewer.