Changeset 478 in code for trunk/user.go
- Timestamp:
- Mar 24, 2021, 5:15:52 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/user.go
r467 r478 62 62 63 63 conn *upstreamConn 64 channels map[string]*Channel65 delivered map [string]map[string]string// entity -> client name -> msg ID66 offlineClients map[string]struct{} 64 channels channelCasemapMap 65 delivered mapStringStringCasemapMap // entity -> client name -> msg ID 66 offlineClients map[string]struct{} // indexed by client name 67 67 lastError error 68 casemap casemapping 68 69 } 69 70 70 71 func newNetwork(user *user, record *Network, channels []Channel) *network { 71 m := make(map[string]*Channel, len(channels))72 m := channelCasemapMap{newCasemapMap(0)} 72 73 for _, ch := range channels { 73 74 ch := ch 74 m [ch.Name] = &ch75 m.SetValue(ch.Name, &ch) 75 76 } 76 77 … … 80 81 stopped: make(chan struct{}), 81 82 channels: m, 82 delivered: ma ke(map[string]map[string]string),83 delivered: mapStringStringCasemapMap{newCasemapMap(0)}, 83 84 offlineClients: make(map[string]struct{}), 85 casemap: casemapRFC1459, 84 86 } 85 87 } … … 186 188 187 189 if net.conn != nil { 188 if uch, ok := net.conn.channels[ch.Name]; ok { 190 uch := net.conn.channels.Value(ch.Name) 191 if uch != nil { 189 192 uch.updateAutoDetach(0) 190 193 } … … 211 214 var uch *upstreamChannel 212 215 if net.conn != nil { 213 uch = net.conn.channels [ch.Name]216 uch = net.conn.channels.Value(ch.Name) 214 217 215 218 net.conn.updateChannelAutoDetach(ch.Name) … … 232 235 233 236 func (net *network) deleteChannel(name string) error { 234 ch , ok := net.channels[name]235 if !ok{237 ch := net.channels.Value(name) 238 if ch == nil { 236 239 return fmt.Errorf("unknown channel %q", name) 237 240 } 238 241 if net.conn != nil { 239 if uch, ok := net.conn.channels[ch.Name]; ok { 242 uch := net.conn.channels.Value(ch.Name) 243 if uch != nil { 240 244 uch.updateAutoDetach(0) 241 245 } … … 245 249 return err 246 250 } 247 delete(net.channels,name)251 net.channels.Delete(name) 248 252 return nil 253 } 254 255 func (net *network) updateCasemapping(newCasemap casemapping) { 256 net.casemap = newCasemap 257 net.channels.SetCasemapping(newCasemap) 258 net.delivered.SetCasemapping(newCasemap) 259 if net.conn != nil { 260 net.conn.channels.SetCasemapping(newCasemap) 261 for _, entry := range net.conn.channels.innerMap { 262 uch := entry.value.(*upstreamChannel) 263 uch.Members.SetCasemapping(newCasemap) 264 } 265 } 249 266 } 250 267 … … 411 428 case eventChannelDetach: 412 429 uc, name := e.uc, e.name 413 c , ok := uc.network.channels[name]414 if !ok|| c.Detached {430 c := uc.network.channels.Value(name) 431 if c == nil || c.Detached { 415 432 continue 416 433 } … … 500 517 uc.endPendingLISTs(true) 501 518 502 for _, uch := range uc.channels { 519 for _, entry := range uc.channels.innerMap { 520 uch := entry.value.(*upstreamChannel) 503 521 uch.updateAutoDetach(0) 504 522 } … … 571 589 // Most network changes require us to re-connect to the upstream server 572 590 573 channels := make([]Channel, 0, len(network.channels)) 574 for _, ch := range network.channels { 591 channels := make([]Channel, 0, network.channels.Len()) 592 for _, entry := range network.channels.innerMap { 593 ch := entry.value.(*Channel) 575 594 channels = append(channels, *ch) 576 595 }
Note:
See TracChangeset
for help on using the changeset viewer.