Changeset 551 in code for trunk


Ignore:
Timestamp:
Jun 5, 2021, 10:38:52 AM (4 years ago)
Author:
contact
Message:

Add downstreamConn.SendBatch helper

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r550 r551  
    188188        caps            map[string]bool
    189189
     190        lastBatchRef uint64
     191
    190192        saslServer sasl.Server
    191193}
     
    380382                }
    381383        }
     384        if !dc.caps["batch"] && msg.Tags["batch"] != "" {
     385                msg = msg.Copy()
     386                delete(msg.Tags, "batch")
     387        }
    382388        if msg.Command == "JOIN" && !dc.caps["extended-join"] {
    383389                msg.Params = msg.Params[:1]
     
    388394
    389395        dc.conn.SendMessage(msg)
     396}
     397
     398func (dc *downstreamConn) SendBatch(typ string, params []string, tags irc.Tags, f func(batchRef irc.TagValue)) {
     399        dc.lastBatchRef++
     400        ref := fmt.Sprintf("%v", dc.lastBatchRef)
     401
     402        if dc.caps["batch"] {
     403                dc.SendMessage(&irc.Message{
     404                        Tags:    tags,
     405                        Prefix:  dc.srv.prefix(),
     406                        Command: "BATCH",
     407                        Params:  append([]string{"+" + ref, typ}, params...),
     408                })
     409        }
     410
     411        f(irc.TagValue(ref))
     412
     413        if dc.caps["batch"] {
     414                dc.SendMessage(&irc.Message{
     415                        Prefix:  dc.srv.prefix(),
     416                        Command: "BATCH",
     417                        Params:  []string{"-" + ref},
     418                })
     419        }
    390420}
    391421
     
    10841114
    10851115        if dc.caps["soju.im/bouncer-networks-notify"] {
    1086                 dc.SendMessage(&irc.Message{
    1087                         Prefix:  dc.srv.prefix(),
    1088                         Command: "BATCH",
    1089                         Params:  []string{"+networks", "soju.im/bouncer-networks"},
    1090                 })
    1091                 dc.user.forEachNetwork(func(network *network) {
    1092                         idStr := fmt.Sprintf("%v", network.ID)
    1093                         attrs := getNetworkAttrs(network)
    1094                         dc.SendMessage(&irc.Message{
    1095                                 Tags:    irc.Tags{"batch": irc.TagValue("networks")},
    1096                                 Prefix:  dc.srv.prefix(),
    1097                                 Command: "BOUNCER",
    1098                                 Params:  []string{"NETWORK", idStr, attrs.String()},
    1099                         })
    1100                 })
    1101                 dc.SendMessage(&irc.Message{
    1102                         Prefix:  dc.srv.prefix(),
    1103                         Command: "BATCH",
    1104                         Params:  []string{"-networks"},
     1116                dc.SendBatch("soju.im/bouncer-networks", nil, nil, func(batchRef irc.TagValue) {
     1117                        dc.user.forEachNetwork(func(network *network) {
     1118                                idStr := fmt.Sprintf("%v", network.ID)
     1119                                attrs := getNetworkAttrs(network)
     1120                                dc.SendMessage(&irc.Message{
     1121                                        Tags:    irc.Tags{"batch": batchRef},
     1122                                        Prefix:  dc.srv.prefix(),
     1123                                        Command: "BOUNCER",
     1124                                        Params:  []string{"NETWORK", idStr, attrs.String()},
     1125                                })
     1126                        })
    11051127                })
    11061128        }
     
    11931215        }
    11941216
    1195         batchRef := "history"
    1196         if dc.caps["batch"] {
    1197                 dc.SendMessage(&irc.Message{
    1198                         Prefix:  dc.srv.prefix(),
    1199                         Command: "BATCH",
    1200                         Params:  []string{"+" + batchRef, "chathistory", dc.marshalEntity(net, target)},
    1201                 })
    1202         }
    1203 
    1204         for _, msg := range history {
    1205                 if !dc.messageSupportsHistory(msg) {
    1206                         continue
    1207                 }
    1208 
    1209                 if ch != nil && ch.Detached {
    1210                         if net.detachedMessageNeedsRelay(ch, msg) {
    1211                                 dc.relayDetachedMessage(net, msg)
    1212                         }
    1213                 } else {
    1214                         if dc.caps["batch"] {
    1215                                 msg.Tags["batch"] = irc.TagValue(batchRef)
    1216                         }
    1217                         dc.SendMessage(dc.marshalMessage(msg, net))
    1218                 }
    1219         }
    1220 
    1221         if dc.caps["batch"] {
    1222                 dc.SendMessage(&irc.Message{
    1223                         Prefix:  dc.srv.prefix(),
    1224                         Command: "BATCH",
    1225                         Params:  []string{"-" + batchRef},
    1226                 })
    1227         }
     1217        dc.SendBatch("chathistory", []string{dc.marshalEntity(net, target)}, nil, func(batchRef irc.TagValue) {
     1218                for _, msg := range history {
     1219                        if !dc.messageSupportsHistory(msg) {
     1220                                continue
     1221                        }
     1222
     1223                        if ch != nil && ch.Detached {
     1224                                if net.detachedMessageNeedsRelay(ch, msg) {
     1225                                        dc.relayDetachedMessage(net, msg)
     1226                                }
     1227                        } else {
     1228                                if dc.caps["batch"] {
     1229                                        msg.Tags["batch"] = irc.TagValue(batchRef)
     1230                                }
     1231                                dc.SendMessage(dc.marshalMessage(msg, net))
     1232                        }
     1233                }
     1234        })
    12281235}
    12291236
     
    21082115                        }
    21092116
    2110                         batchRef := "history-targets"
    2111                         dc.SendMessage(&irc.Message{
    2112                                 Prefix:  dc.srv.prefix(),
    2113                                 Command: "BATCH",
    2114                                 Params:  []string{"+" + batchRef, "draft/chathistory-targets"},
    2115                         })
    2116 
    2117                         for _, target := range targets {
    2118                                 if ch := uc.network.channels.Value(target.Name); ch != nil && ch.Detached {
    2119                                         continue
     2117                        dc.SendBatch("draft/chathistory-targets", nil, nil, func(batchRef irc.TagValue) {
     2118                                for _, target := range targets {
     2119                                        if ch := uc.network.channels.Value(target.Name); ch != nil && ch.Detached {
     2120                                                continue
     2121                                        }
     2122
     2123                                        dc.SendMessage(&irc.Message{
     2124                                                Tags:    irc.Tags{"batch": batchRef},
     2125                                                Prefix:  dc.srv.prefix(),
     2126                                                Command: "CHATHISTORY",
     2127                                                Params:  []string{"TARGETS", target.Name, target.LatestMessage.UTC().Format(serverTimeLayout)},
     2128                                        })
    21202129                                }
    2121 
    2122                                 dc.SendMessage(&irc.Message{
    2123                                         Tags:    irc.Tags{"batch": irc.TagValue(batchRef)},
    2124                                         Prefix:  dc.srv.prefix(),
    2125                                         Command: "CHATHISTORY",
    2126                                         Params:  []string{"TARGETS", target.Name, target.LatestMessage.UTC().Format(serverTimeLayout)},
    2127                                 })
    2128                         }
    2129 
    2130                         dc.SendMessage(&irc.Message{
    2131                                 Prefix:  dc.srv.prefix(),
    2132                                 Command: "BATCH",
    2133                                 Params:  []string{"-" + batchRef},
    21342130                        })
    21352131
     
    21412137                }
    21422138
    2143                 batchRef := "history"
    2144                 dc.SendMessage(&irc.Message{
    2145                         Prefix:  dc.srv.prefix(),
    2146                         Command: "BATCH",
    2147                         Params:  []string{"+" + batchRef, "chathistory", target},
    2148                 })
    2149 
    2150                 for _, msg := range history {
    2151                         msg.Tags["batch"] = irc.TagValue(batchRef)
    2152                         dc.SendMessage(dc.marshalMessage(msg, uc.network))
    2153                 }
    2154 
    2155                 dc.SendMessage(&irc.Message{
    2156                         Prefix:  dc.srv.prefix(),
    2157                         Command: "BATCH",
    2158                         Params:  []string{"-" + batchRef},
     2139                dc.SendBatch("chathistory", []string{target}, nil, func(batchRef irc.TagValue) {
     2140                        for _, msg := range history {
     2141                                msg.Tags["batch"] = batchRef
     2142                                dc.SendMessage(dc.marshalMessage(msg, uc.network))
     2143                        }
    21592144                })
    21602145        case "BOUNCER":
     
    21662151                switch strings.ToUpper(subcommand) {
    21672152                case "LISTNETWORKS":
    2168                         dc.SendMessage(&irc.Message{
    2169                                 Prefix:  dc.srv.prefix(),
    2170                                 Command: "BATCH",
    2171                                 Params:  []string{"+networks", "soju.im/bouncer-networks"},
    2172                         })
    2173                         dc.user.forEachNetwork(func(network *network) {
    2174                                 idStr := fmt.Sprintf("%v", network.ID)
    2175                                 attrs := getNetworkAttrs(network)
    2176                                 dc.SendMessage(&irc.Message{
    2177                                         Tags:    irc.Tags{"batch": irc.TagValue("networks")},
    2178                                         Prefix:  dc.srv.prefix(),
    2179                                         Command: "BOUNCER",
    2180                                         Params:  []string{"NETWORK", idStr, attrs.String()},
     2153                        dc.SendBatch("soju.im/bouncer-networks", nil, nil, func(batchRef irc.TagValue) {
     2154                                dc.user.forEachNetwork(func(network *network) {
     2155                                        idStr := fmt.Sprintf("%v", network.ID)
     2156                                        attrs := getNetworkAttrs(network)
     2157                                        dc.SendMessage(&irc.Message{
     2158                                                Tags:    irc.Tags{"batch": batchRef},
     2159                                                Prefix:  dc.srv.prefix(),
     2160                                                Command: "BOUNCER",
     2161                                                Params:  []string{"NETWORK", idStr, attrs.String()},
     2162                                        })
    21812163                                })
    2182                         })
    2183                         dc.SendMessage(&irc.Message{
    2184                                 Prefix:  dc.srv.prefix(),
    2185                                 Command: "BATCH",
    2186                                 Params:  []string{"-networks"},
    21872164                        })
    21882165                case "ADDNETWORK":
Note: See TracChangeset for help on using the changeset viewer.