diff -r 578c2a83dc18 -r 53f15893a1a7 roster.go --- a/roster.go Thu Jan 12 23:14:25 2012 -0700 +++ b/roster.go Mon Jan 16 20:30:29 2012 -0600 @@ -12,32 +12,30 @@ // This file contains support for roster management, RFC 3921, Section 7. -var rosterExt Extension = Extension{StanzaHandlers: - map[string] func(*xml.Name) interface{}{NsRoster: - newRosterQuery}, Start: startRosterFilter} +var rosterExt Extension = Extension{StanzaHandlers: map[string]func(*xml.Name) interface{}{NsRoster: newRosterQuery}, Start: startRosterFilter} // Roster query/result type RosterQuery struct { XMLName xml.Name `xml:"jabber:iq:roster query"` - Item []RosterItem + Item []RosterItem } // See RFC 3921, Section 7.1. type RosterItem struct { - XMLName xml.Name `xml:"item"` - Jid string `xml:"attr"` - Subscription string `xml:"attr"` - Name string `xml:"attr"` - Group []string + XMLName xml.Name `xml:"item"` + Jid string `xml:"attr"` + Subscription string `xml:"attr"` + Name string `xml:"attr"` + Group []string } type rosterClient struct { - rosterChan <-chan []RosterItem + rosterChan <-chan []RosterItem rosterUpdate chan<- RosterItem } var ( - rosterClients = make(map[string] rosterClient) + rosterClients = make(map[string]rosterClient) ) // Implicitly becomes part of NewClient's extStanza arg. @@ -51,7 +49,7 @@ func fetchRoster(client *Client) os.Error { rosterUpdate := rosterClients[client.Uid].rosterUpdate - iq := &Iq{From: client.Jid.String(), Id: <- Id, Type: "get", + iq := &Iq{From: client.Jid.String(), Id: <-Id, Type: "get", Nested: []interface{}{RosterQuery{}}} ch := make(chan os.Error) f := func(st Stanza) bool { @@ -61,8 +59,8 @@ return false } var rq *RosterQuery - for _, ele := range(st.GetNested()) { - if q, ok := ele.(*RosterQuery) ; ok { + for _, ele := range st.GetNested() { + if q, ok := ele.(*RosterQuery); ok { rq = q break } @@ -72,7 +70,7 @@ "Roster query result not query: %v", st)) return false } - for _, item := range(rq.Item) { + for _, item := range rq.Item { rosterUpdate <- item } ch <- nil @@ -81,7 +79,7 @@ client.HandleStanza(iq.Id, f) client.Out <- iq // Wait for f to complete. - return <- ch + return <-ch } // The roster filter updates the Client's representation of the @@ -93,7 +91,7 @@ in := client.AddFilter(out) go func(in <-chan Stanza, out chan<- Stanza) { defer close(out) - for st := range(in) { + for st := range in { maybeUpdateRoster(client, st) out <- st } @@ -110,25 +108,24 @@ rosterUpdate := rosterClients[client.Uid].rosterUpdate var rq *RosterQuery - for _, ele := range(st.GetNested()) { - if q, ok := ele.(*RosterQuery) ; ok { + for _, ele := range st.GetNested() { + if q, ok := ele.(*RosterQuery); ok { rq = q break } } if st.GetName() == "iq" && st.GetType() == "set" && rq != nil { - for _, item := range(rq.Item) { + for _, item := range rq.Item { rosterUpdate <- item } // Send a reply. - iq := &Iq{To: st.GetFrom(), Id: st.GetId(), Type: - "result"} + iq := &Iq{To: st.GetFrom(), Id: st.GetId(), Type: "result"} client.Out <- iq } } func feedRoster(rosterCh chan<- []RosterItem, rosterUpdate <-chan RosterItem) { - roster := make(map[string] RosterItem) + roster := make(map[string]RosterItem) snapshot := []RosterItem{} for { select { @@ -141,7 +138,7 @@ case rosterCh <- snapshot: } snapshot = make([]RosterItem, 0, len(roster)) - for _, v := range(roster) { + for _, v := range roster { snapshot = append(snapshot, v) } } @@ -150,5 +147,5 @@ // Retrieve a snapshot of the roster for the given Client. func Roster(client *Client) []RosterItem { rosterChan := rosterClients[client.Uid].rosterChan - return <- rosterChan + return <-rosterChan }