# HG changeset patch # User Chris Jones # Date 1325103848 25200 # Node ID b5de44679389f4dbedcbd5d77f44055329cce022 # Parent d6b7b4cbf50d0b9009c2ce3e81678094c2e333ca Made the input and output channels of type Stanza rather than interface{}. We should handle everything internally that's not an iq, message, or presence. diff -r d6b7b4cbf50d -r b5de44679389 examples/interact.go --- a/examples/interact.go Wed Dec 28 13:14:46 2011 -0700 +++ b/examples/interact.go Wed Dec 28 13:24:08 2011 -0700 @@ -30,7 +30,7 @@ } defer c.Close() - go func(ch <-chan interface{}) { + go func(ch <-chan xmpp.Stanza) { for obj := range ch { fmt.Printf("s: %v\n", obj) } diff -r d6b7b4cbf50d -r b5de44679389 stream.go --- a/stream.go Wed Dec 28 13:14:46 2011 -0700 +++ b/stream.go Wed Dec 28 13:24:08 2011 -0700 @@ -189,7 +189,7 @@ } } -func (cl *Client) readStream(srvIn <-chan interface{}, cliOut chan<- interface{}) { +func (cl *Client) readStream(srvIn <-chan interface{}, cliOut chan<- Stanza) { defer tryClose(srvIn, cliOut) handlers := make(map[string] func(Stanza) bool) @@ -213,14 +213,19 @@ default: send = true } - if st, ok := x.(Stanza) ; ok && - handlers[st.XId()] != nil { + st, ok := x.(Stanza) + if !ok { + log.Printf("Unhandled non-stanza: %v", + x) + continue + } + if handlers[st.XId()] != nil { f := handlers[st.XId()] handlers[st.XId()] = nil send = f(st) } if send { - cliOut <- x + cliOut <- st } } } @@ -229,7 +234,7 @@ // BUG(cjyar) Disable this loop until resource binding is // complete. Otherwise the app might inject something weird into our // negotiation stream. -func writeStream(srvOut chan<- interface{}, cliIn <-chan interface{}) { +func writeStream(srvOut chan<- interface{}, cliIn <-chan Stanza) { defer tryClose(srvOut, cliIn) for x := range cliIn { diff -r d6b7b4cbf50d -r b5de44679389 xmpp.go --- a/xmpp.go Wed Dec 28 13:14:46 2011 -0700 +++ b/xmpp.go Wed Dec 28 13:24:08 2011 -0700 @@ -58,11 +58,10 @@ // Incoming XMPP stanzas from the server will be published on // this channel. Information which is only used by this // library to set up the XMPP stream will not appear here. - // BUG(cjyar) Make these channels of type Stanza. - In <-chan interface{} + In <-chan Stanza // Outgoing XMPP stanzas to the server should be sent to this // channel. - Out chan<- interface{} + Out chan<- Stanza xmlOut chan<- interface{} // BUG(cjyar) Remove this. Make a Stanza parser method // available for use by interact.go and similar applications. @@ -164,14 +163,14 @@ return ch } -func (cl *Client) startStreamReader(xmlIn <-chan interface{}, srvOut chan<- interface{}) <-chan interface{} { - ch := make(chan interface{}) +func (cl *Client) startStreamReader(xmlIn <-chan interface{}, srvOut chan<- interface{}) <-chan Stanza { + ch := make(chan Stanza) go cl.readStream(xmlIn, ch) return ch } -func startStreamWriter(xmlOut chan<- interface{}) chan<- interface{} { - ch := make(chan interface{}) +func startStreamWriter(xmlOut chan<- interface{}) chan<- Stanza { + ch := make(chan Stanza) go writeStream(xmlOut, ch) return ch }