Add primary XMPP API.

This commit is contained in:
Matt Goodall 2012-07-08 12:18:40 +01:00
parent c13edc39c2
commit 1836b6bf2d
1 changed files with 60 additions and 0 deletions

60
src/xmpp/xmpp.go Normal file
View File

@ -0,0 +1,60 @@
package xmpp
import "log"
type XMPP struct {
JID JID
stream *Stream
in chan interface{}
out chan interface{}
}
func newXMPP(jid JID, stream *Stream) *XMPP {
x := &XMPP{
jid,
stream,
make(chan interface{}),
make(chan interface{}),
}
go x.sender()
go x.receiver()
return x
}
func (x *XMPP) Send(v interface{}) {
x.out <- v
}
func (x *XMPP) sender() {
for v := range x.out {
x.stream.Send(v)
}
}
func (x *XMPP) receiver() {
for {
start, err := x.stream.Next(nil)
if err != nil {
log.Fatal(err)
}
var v interface{}
switch start.Name.Local {
case "iq":
v = &Iq{}
case "message":
v = &Message{}
case "presence":
v = &Presence{}
default:
panic("Unexected element: " + start.Name.Local)
}
err = x.stream.DecodeElement(v, start)
if err != nil {
log.Fatal(err)
}
x.in <- v
}
}