|
- package client
-
- import (
- "bufio"
- "crypto/tls"
- "net"
- "sync"
-
- "github.com/yosssi/gmq/mqtt/packet"
- )
-
- // Buffer size of the send channel
- const sendBufSize = 1024
-
- // connection represents a Network Connection.
- type connection struct {
- net.Conn
- // r is the buffered reader.
- r *bufio.Reader
- // w is the buffered writer.
- w *bufio.Writer
- // disconnected is true if the Network Connection
- // has been disconnected by the Client.
- disconnected bool
-
- // wg is the Wait Group for the goroutines
- // which are launched by the Connect method.
- wg sync.WaitGroup
- // connack is the channel which handles the signal
- // to notify the arrival of the CONNACK Packet.
- connack chan struct{}
- // send is the channel which handles the Packet.
- send chan packet.Packet
- // sendEnd is the channel which ends the goroutine
- // which sends a Packet to the Server.
- sendEnd chan struct{}
-
- // muPINGRESPs is the Mutex for pingresps.
- muPINGRESPs sync.RWMutex
- // pingresps is the slice of the channels which
- // handle the signal to notify the arrival of
- // the PINGRESP Packet.
- pingresps []chan struct{}
-
- // unackSubs contains the subscription information
- // which are not acknowledged by the Server.
- unackSubs map[string]MessageHandler
- // ackedSubs contains the subscription information
- // which are acknowledged by the Server.
- ackedSubs map[string]MessageHandler
- }
-
- // newConnection connects to the address on the named network,
- // creates a Network Connection and returns it.
- func newConnection(network, address string, tlsConfig *tls.Config) (*connection, error) {
- // Define the local variables.
- var conn net.Conn
- var err error
-
- // Connect to the address on the named network.
- if tlsConfig != nil {
- conn, err = tls.Dial(network, address, tlsConfig)
- } else {
- conn, err = net.Dial(network, address)
- }
- if err != nil {
- return nil, err
- }
-
- // Create a Network Connection.
- c := &connection{
- Conn: conn,
- r: bufio.NewReader(conn),
- w: bufio.NewWriter(conn),
- connack: make(chan struct{}, 1),
- send: make(chan packet.Packet, sendBufSize),
- sendEnd: make(chan struct{}, 1),
- unackSubs: make(map[string]MessageHandler),
- ackedSubs: make(map[string]MessageHandler),
- }
-
- // Return the Network Connection.
- return c, nil
- }
|