commit 570c2c2

Hubert Hirtz  ·  2020-08-01 11:30:49 +0000 UTC
parent 8f08d53
Make message handlers able to return more than one event
1 files changed,  +16, -22
+16, -22
  1@@ -299,10 +299,7 @@ func (s *Session) requestHistory(act actionRequestHistory) (err error) {
  2 
  3 func (s *Session) run() {
  4 	for s.Running() {
  5-		var (
  6-			ev  Event
  7-			err error
  8-		)
  9+		var err error
 10 
 11 		select {
 12 		case act := <-s.acts:
 13@@ -322,22 +319,19 @@ func (s *Session) run() {
 14 			}
 15 		case msg := <-s.msgs:
 16 			if s.state == ConnStart {
 17-				ev, err = s.handleStart(msg)
 18+				err = s.handleStart(msg)
 19 			} else if s.state == ConnRegistered {
 20-				ev, err = s.handle(msg)
 21+				err = s.handle(msg)
 22 			}
 23 		}
 24 
 25-		if ev != nil {
 26-			s.evts <- ev
 27-		}
 28 		if err != nil {
 29 			s.evts <- err
 30 		}
 31 	}
 32 }
 33 
 34-func (s *Session) handleStart(msg Message) (ev Event, err error) {
 35+func (s *Session) handleStart(msg Message) (err error) {
 36 	switch msg.Command {
 37 	case "AUTHENTICATE":
 38 		if s.auth != nil {
 39@@ -433,13 +427,13 @@ func (s *Session) handleStart(msg Message) (ev Event, err error) {
 40 			return
 41 		}
 42 	default:
 43-		ev, err = s.handle(msg)
 44+		err = s.handle(msg)
 45 	}
 46 
 47 	return
 48 }
 49 
 50-func (s *Session) handle(msg Message) (ev Event, err error) {
 51+func (s *Session) handle(msg Message) (err error) {
 52 	if id, ok := msg.Tags["batch"]; ok {
 53 		if b, ok := s.chBatches[id]; ok {
 54 			s.chBatches[id] = HistoryEvent{
 55@@ -455,7 +449,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
 56 		s.nick = msg.Params[0]
 57 		s.lNick = strings.ToLower(s.nick)
 58 		s.state = ConnRegistered
 59-		ev = RegisteredEvent{}
 60+		s.evts <- RegisteredEvent{}
 61 
 62 		if s.host == "" {
 63 			err = s.send("WHO %s\r\n", s.nick)
 64@@ -568,7 +562,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
 65 				t = time.Now()
 66 			}
 67 
 68-			ev = UserJoinEvent{
 69+			s.evts <- UserJoinEvent{
 70 				ChannelEvent: channelEv,
 71 				UserEvent:    UserEvent{Nick: nick},
 72 				Time:         t,
 73@@ -582,7 +576,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
 74 
 75 		if lNick == s.lNick {
 76 			delete(s.channels, channel)
 77-			ev = SelfPartEvent{ChannelEvent: channelEv}
 78+			s.evts <- SelfPartEvent{ChannelEvent: channelEv}
 79 		} else if c, ok := s.channels[channel]; ok {
 80 			delete(c.Members, lNick)
 81 
 82@@ -591,7 +585,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
 83 				t = time.Now()
 84 			}
 85 
 86-			ev = UserPartEvent{
 87+			s.evts <- UserPartEvent{
 88 				ChannelEvent: channelEv,
 89 				UserEvent:    UserEvent{Nick: nick},
 90 				Time:         t,
 91@@ -612,7 +606,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
 92 			}
 93 
 94 			// TODO UserQuitEvent
 95-			ev = UserPartEvent{
 96+			s.evts <- UserPartEvent{
 97 				ChannelEvent: ChannelEvent{Channel: c.Name},
 98 				UserEvent:    UserEvent{Nick: nick},
 99 				Time:         t,
100@@ -636,7 +630,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
101 			}
102 		}
103 	case rplEndofnames:
104-		ev = SelfJoinEvent{ChannelEvent{Channel: msg.Params[1]}}
105+		s.evts <- SelfJoinEvent{ChannelEvent{Channel: msg.Params[1]}}
106 	case rplTopic:
107 		channel := strings.ToLower(msg.Params[1])
108 
109@@ -644,7 +638,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
110 			c.Topic = msg.Params[2]
111 		}
112 	case "PRIVMSG":
113-		ev = s.privmsgToEvent(msg)
114+		s.evts <- s.privmsgToEvent(msg)
115 	case "TAGMSG":
116 		nick, _, _ := FullMask(msg.Prefix)
117 		target := strings.ToLower(msg.Params[0])
118@@ -673,14 +667,14 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
119 		}
120 		if target == s.lNick {
121 			// TAGMSG to self
122-			ev = QueryTypingEvent{
123+			s.evts <- QueryTypingEvent{
124 				UserEvent: UserEvent{Nick: nick},
125 				State:     typing,
126 				Time:      t,
127 			}
128 		} else if _, ok := s.channels[target]; ok {
129 			// TAGMSG to channel
130-			ev = ChannelTypingEvent{
131+			s.evts <- ChannelTypingEvent{
132 				UserEvent:    UserEvent{Nick: nick},
133 				ChannelEvent: ChannelEvent{Channel: msg.Params[0]},
134 				State:        typing,
135@@ -694,7 +688,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) {
136 		if batchStart && msg.Params[1] == "chathistory" {
137 			s.chBatches[id] = HistoryEvent{Target: msg.Params[2]}
138 		} else if b, ok := s.chBatches[id]; ok {
139-			ev = b
140+			s.evts <- b
141 			delete(s.chBatches, id)
142 		}
143 	case "FAIL":