Changeset 103 in code
- Timestamp:
- Mar 16, 2020, 11:44:59 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r102 r103 192 192 } 193 193 194 func (dc *downstreamConn) readMessages( ) error {194 func (dc *downstreamConn) readMessages(ch chan<- downstreamIncomingMessage) error { 195 195 dc.logger.Printf("new connection") 196 196 … … 207 207 } 208 208 209 err = dc.handleMessage(msg) 210 if ircErr, ok := err.(ircError); ok { 211 ircErr.Message.Prefix = dc.srv.prefix() 212 dc.SendMessage(ircErr.Message) 213 } else if err != nil { 214 return fmt.Errorf("failed to handle IRC command %q: %v", msg.Command, err) 215 } 216 217 if dc.isClosed() { 218 return nil 219 } 209 ch <- downstreamIncomingMessage{msg, dc} 220 210 } 221 211 … … 485 475 } 486 476 477 func (dc *downstreamConn) runUntilRegistered() error { 478 for !dc.registered { 479 msg, err := dc.irc.ReadMessage() 480 if err == io.EOF { 481 break 482 } else if err != nil { 483 return fmt.Errorf("failed to read IRC command: %v", err) 484 } 485 486 err = dc.handleMessage(msg) 487 if ircErr, ok := err.(ircError); ok { 488 ircErr.Message.Prefix = dc.srv.prefix() 489 dc.SendMessage(ircErr.Message) 490 } else if err != nil { 491 return fmt.Errorf("failed to handle IRC command %q: %v", msg, err) 492 } 493 } 494 495 return nil 496 } 497 487 498 func (dc *downstreamConn) handleMessageRegistered(msg *irc.Message) error { 488 499 switch msg.Command { -
trunk/server.go
r101 r103 115 115 s.lock.Unlock() 116 116 117 if err := dc.readMessages(); err != nil { 118 dc.logger.Printf("failed to handle messages: %v", err) 117 if err := dc.runUntilRegistered(); err != nil { 118 dc.logger.Print(err) 119 } else { 120 if err := dc.readMessages(dc.user.downstreamIncoming); err != nil { 121 dc.logger.Print(err) 122 } 119 123 } 120 124 dc.Close() -
trunk/upstream.go
r102 r103 660 660 } 661 661 662 func (uc *upstreamConn) readMessages( ) error {662 func (uc *upstreamConn) readMessages(ch chan<- upstreamIncomingMessage) error { 663 663 for { 664 664 msg, err := uc.irc.ReadMessage() … … 673 673 } 674 674 675 if err := uc.handleMessage(msg); err != nil { 676 uc.logger.Printf("failed to handle message %q: %v", msg, err) 677 } 675 ch <- upstreamIncomingMessage{msg, uc} 678 676 } 679 677 -
trunk/user.go
r101 r103 4 4 "sync" 5 5 "time" 6 7 "gopkg.in/irc.v3" 6 8 ) 9 10 type upstreamIncomingMessage struct { 11 msg *irc.Message 12 uc *upstreamConn 13 } 14 15 type downstreamIncomingMessage struct { 16 msg *irc.Message 17 dc *downstreamConn 18 } 7 19 8 20 type network struct { … … 41 53 net.user.lock.Unlock() 42 54 43 if err := uc.readMessages( ); err != nil {55 if err := uc.readMessages(net.user.upstreamIncoming); err != nil { 44 56 uc.logger.Printf("failed to handle messages: %v", err) 45 57 } … … 56 68 srv *Server 57 69 70 upstreamIncoming chan upstreamIncomingMessage 71 downstreamIncoming chan downstreamIncomingMessage 72 58 73 lock sync.Mutex 59 74 networks []*network … … 63 78 func newUser(srv *Server, record *User) *user { 64 79 return &user{ 65 User: *record, 66 srv: srv, 80 User: *record, 81 srv: srv, 82 upstreamIncoming: make(chan upstreamIncomingMessage, 64), 83 downstreamIncoming: make(chan downstreamIncomingMessage, 64), 67 84 } 68 85 } … … 120 137 } 121 138 u.lock.Unlock() 139 140 for { 141 select { 142 case upstreamMsg := <-u.upstreamIncoming: 143 msg, uc := upstreamMsg.msg, upstreamMsg.uc 144 if err := uc.handleMessage(msg); err != nil { 145 uc.logger.Printf("failed to handle message %q: %v", msg, err) 146 } 147 case downstreamMsg := <-u.downstreamIncoming: 148 msg, dc := downstreamMsg.msg, downstreamMsg.dc 149 err := dc.handleMessage(msg) 150 if ircErr, ok := err.(ircError); ok { 151 ircErr.Message.Prefix = dc.srv.prefix() 152 dc.SendMessage(ircErr.Message) 153 } else if err != nil { 154 dc.logger.Printf("failed to handle message %q: %v", msg, err) 155 dc.Close() 156 } 157 } 158 } 122 159 } 123 160
Note:
See TracChangeset
for help on using the changeset viewer.