forked from jshiffer/go-xmpp
Make client use the new Router
This commit is contained in:
parent
7aef8357ed
commit
45c7ca74b1
23
client.go
23
client.go
@ -70,8 +70,8 @@ type Client struct {
|
|||||||
Session *Session
|
Session *Session
|
||||||
// TCP level connection / can be replaced by a TLS session after starttls
|
// TCP level connection / can be replaced by a TLS session after starttls
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
// Packet channel
|
// Router is used to dispatch packets
|
||||||
RecvChannel chan Packet
|
router *Router
|
||||||
// Track and broadcast connection state
|
// Track and broadcast connection state
|
||||||
EventManager
|
EventManager
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ Setting up the client / Checking the parameters
|
|||||||
// If host is not specified, the DNS SRV should be used to find the host from the domainpart of the JID.
|
// If host is not specified, the DNS SRV should be used to find the host from the domainpart of the JID.
|
||||||
// Default the port to 5222.
|
// Default the port to 5222.
|
||||||
// TODO: better config checks
|
// TODO: better config checks
|
||||||
func NewClient(config Config) (c *Client, err error) {
|
func NewClient(config Config, r *Router) (c *Client, err error) {
|
||||||
// TODO: If option address is nil, use the Jid domain to compose the address
|
// TODO: If option address is nil, use the Jid domain to compose the address
|
||||||
if config.Address, err = checkAddress(config.Address); err != nil {
|
if config.Address, err = checkAddress(config.Address); err != nil {
|
||||||
return nil, NewConnError(err, true)
|
return nil, NewConnError(err, true)
|
||||||
@ -103,14 +103,12 @@ func NewClient(config Config) (c *Client, err error) {
|
|||||||
|
|
||||||
c = new(Client)
|
c = new(Client)
|
||||||
c.config = config
|
c.config = config
|
||||||
|
c.router = r
|
||||||
|
|
||||||
if c.config.ConnectTimeout == 0 {
|
if c.config.ConnectTimeout == 0 {
|
||||||
c.config.ConnectTimeout = 15 // 15 second as default
|
c.config.ConnectTimeout = 15 // 15 second as default
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a default channel that developers can override
|
|
||||||
c.RecvChannel = make(chan Packet)
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,13 +171,6 @@ func (c *Client) SetHandler(handler EventHandler) {
|
|||||||
c.Handler = handler
|
c.Handler = handler
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recv abstracts receiving preparsed XMPP packets from a channel.
|
|
||||||
// Channel allow client to receive / dispatch packets in for range loop.
|
|
||||||
// TODO: Deprecate this function in favor of reading directly from the RecvChannel ?
|
|
||||||
func (c *Client) Recv() <-chan Packet {
|
|
||||||
return c.RecvChannel
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send marshals XMPP stanza and sends it to the server.
|
// Send marshals XMPP stanza and sends it to the server.
|
||||||
func (c *Client) Send(packet Packet) error {
|
func (c *Client) Send(packet Packet) error {
|
||||||
data, err := xml.Marshal(packet)
|
data, err := xml.Marshal(packet)
|
||||||
@ -219,13 +210,13 @@ func (c *Client) recv(keepaliveQuit chan<- struct{}) (err error) {
|
|||||||
// Handle stream errors
|
// Handle stream errors
|
||||||
switch packet := val.(type) {
|
switch packet := val.(type) {
|
||||||
case StreamError:
|
case StreamError:
|
||||||
c.RecvChannel <- val
|
c.router.Route(c, val)
|
||||||
close(c.RecvChannel)
|
close(keepaliveQuit)
|
||||||
c.streamError(packet.Error.Local, packet.Text)
|
c.streamError(packet.Error.Local, packet.Text)
|
||||||
return errors.New("stream error: " + packet.Error.Local)
|
return errors.New("stream error: " + packet.Error.Local)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.RecvChannel <- val
|
c.router.Route(c, val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user