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":