forked from jshiffer/go-xmpp
77 lines
2.5 KiB
Markdown
77 lines
2.5 KiB
Markdown
# Fluux XMPP
|
|
|
|
[![Codeship Status for FluuxIO/xmpp](https://app.codeship.com/projects/dba7f300-d145-0135-6c51-26e28af241d2/status?branch=master)](https://app.codeship.com/projects/262399) [![GoDoc](https://godoc.org/gosrc.io/xmpp?status.svg)](https://godoc.org/gosrc.io/xmpp) [![GoReportCard](https://goreportcard.com/badge/gosrc.io/xmpp)](https://goreportcard.com/report/fluux.io/xmpp) [![codecov](https://codecov.io/gh/FluuxIO/go-xmpp/branch/master/graph/badge.svg)](https://codecov.io/gh/FluuxIO/go-xmpp)
|
|
|
|
Fluux XMPP is a Go XMPP library, focusing on simplicity, simple automation, and IoT.
|
|
|
|
The goal is to make simple to write simple XMPP clients and components:
|
|
|
|
- For automation (like for example monitoring of an XMPP service),
|
|
- For building connected "things" by plugging them on an XMPP server,
|
|
- For writing simple chatbot to control a service or a thing.
|
|
- For writing XMPP servers components. Fluux XMPP supports:
|
|
- [XEP-0114: Jabber Component Protocol](https://xmpp.org/extensions/xep-0114.html)
|
|
- [XEP-0355: Namespace Delegation](https://xmpp.org/extensions/xep-0355.html)
|
|
- [XEP-0356: Privileged Entity](https://xmpp.org/extensions/xep-0356.html)
|
|
|
|
The library is designed to have minimal dependencies. For now, the library does not depend on any other library.
|
|
|
|
## Examples
|
|
|
|
We have several [examples](https://github.com/FluuxIO/go-xmpp/tree/master/_examples) to help you get started using
|
|
Fluux XMPP library.
|
|
|
|
Here is the demo "echo" client:
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"gosrc.io/xmpp"
|
|
"gosrc.io/xmpp/stanza"
|
|
)
|
|
|
|
func main() {
|
|
config := xmpp.Config{
|
|
Address: "localhost:5222",
|
|
Jid: "test@localhost",
|
|
Password: "test",
|
|
PacketLogger: os.Stdout,
|
|
Insecure: true,
|
|
}
|
|
|
|
router := xmpp.NewRouter()
|
|
router.HandleFunc("message", handleMessage)
|
|
|
|
client, err := xmpp.NewClient(config, router)
|
|
if err != nil {
|
|
log.Fatalf("%+v", err)
|
|
}
|
|
|
|
// If you pass the client to a connection manager, it will handle the reconnect policy
|
|
// for you automatically.
|
|
cm := xmpp.NewStreamManager(client, nil)
|
|
log.Fatal(cm.Run())
|
|
}
|
|
|
|
func handleMessage(s xmpp.Sender, p stanza.Packet) {
|
|
msg, ok := p.(stanza.Message)
|
|
if !ok {
|
|
_, _ = fmt.Fprintf(os.Stdout, "Ignoring packet: %T\n", p)
|
|
return
|
|
}
|
|
|
|
_, _ = fmt.Fprintf(os.Stdout, "Body = %s - from = %s\n", msg.Body, msg.From)
|
|
reply := stanza.Message{Attrs: stanza.Attrs{To: msg.From}, Body: msg.Body}
|
|
_ = s.Send(reply)
|
|
}
|
|
```
|
|
|
|
## Reference documentation
|
|
|
|
The code documentation is available on GoDoc: [gosrc.io/xmpp](https://godoc.org/gosrc.io/xmpp)
|