source: code/trunk/bridge.go@ 153

Last change on this file since 153 was 140, checked in by delthas, 5 years ago

Add downstream NAMES support

NAMES reply for channels currently joined will be returned from cache;
requests for channels not joined will be forwarded from upstream.

File size: 1.2 KB
RevLine 
[98]1package soju
[32]2
3import (
4 "gopkg.in/irc.v3"
5)
6
7func forwardChannel(dc *downstreamConn, ch *upstreamChannel) {
8 if !ch.complete {
9 panic("Tried to forward a partial channel")
10 }
11
[69]12 downstreamName := dc.marshalChannel(ch.conn, ch.Name)
13
[32]14 if ch.Topic != "" {
[54]15 dc.SendMessage(&irc.Message{
[32]16 Prefix: dc.srv.prefix(),
17 Command: irc.RPL_TOPIC,
[69]18 Params: []string{dc.nick, downstreamName, ch.Topic},
[54]19 })
[32]20 } else {
[54]21 dc.SendMessage(&irc.Message{
[32]22 Prefix: dc.srv.prefix(),
23 Command: irc.RPL_NOTOPIC,
[69]24 Params: []string{dc.nick, downstreamName, "No topic is set"},
[54]25 })
[32]26 }
27
28 // TODO: rpl_topicwhotime
[140]29 sendNames(dc, ch)
30}
[32]31
[140]32func sendNames(dc *downstreamConn, ch *upstreamChannel) {
[32]33 // TODO: send multiple members in each message
[140]34
35 downstreamName := dc.marshalChannel(ch.conn, ch.Name)
36
[32]37 for nick, membership := range ch.Members {
[139]38 s := membership.String() + dc.marshalNick(ch.conn, nick)
[32]39
[54]40 dc.SendMessage(&irc.Message{
[32]41 Prefix: dc.srv.prefix(),
42 Command: irc.RPL_NAMREPLY,
[69]43 Params: []string{dc.nick, string(ch.Status), downstreamName, s},
[54]44 })
[32]45 }
46
[54]47 dc.SendMessage(&irc.Message{
[32]48 Prefix: dc.srv.prefix(),
49 Command: irc.RPL_ENDOFNAMES,
[69]50 Params: []string{dc.nick, downstreamName, "End of /NAMES list"},
[54]51 })
[32]52}
Note: See TracBrowser for help on using the repository browser.