lib/avahi/Client: add method IsConnected()
Publish only if the client is really connected.
This commit is contained in:
parent
6b43338e06
commit
d28cb93835
@ -30,11 +30,15 @@ void
|
|||||||
Client::Close() noexcept
|
Client::Close() noexcept
|
||||||
{
|
{
|
||||||
if (client != nullptr) {
|
if (client != nullptr) {
|
||||||
|
connected = false;
|
||||||
|
|
||||||
for (auto *l : listeners)
|
for (auto *l : listeners)
|
||||||
l->OnAvahiDisconnect();
|
l->OnAvahiDisconnect();
|
||||||
|
|
||||||
avahi_client_free(client);
|
avahi_client_free(client);
|
||||||
client = nullptr;
|
client = nullptr;
|
||||||
|
} else {
|
||||||
|
assert(!connected);
|
||||||
}
|
}
|
||||||
|
|
||||||
reconnect_timer.Cancel();
|
reconnect_timer.Cancel();
|
||||||
@ -45,6 +49,8 @@ Client::ClientCallback(AvahiClient *c, AvahiClientState state) noexcept
|
|||||||
{
|
{
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case AVAHI_CLIENT_S_RUNNING:
|
case AVAHI_CLIENT_S_RUNNING:
|
||||||
|
connected = true;
|
||||||
|
|
||||||
for (auto *l : listeners)
|
for (auto *l : listeners)
|
||||||
l->OnAvahiConnect(c);
|
l->OnAvahiConnect(c);
|
||||||
|
|
||||||
@ -73,12 +79,15 @@ Client::ClientCallback(AvahiClient *c, AvahiClientState state) noexcept
|
|||||||
|
|
||||||
case AVAHI_CLIENT_S_COLLISION:
|
case AVAHI_CLIENT_S_COLLISION:
|
||||||
case AVAHI_CLIENT_S_REGISTERING:
|
case AVAHI_CLIENT_S_REGISTERING:
|
||||||
|
assert(!connected);
|
||||||
|
|
||||||
for (auto *l : listeners)
|
for (auto *l : listeners)
|
||||||
l->OnAvahiChanged();
|
l->OnAvahiChanged();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AVAHI_CLIENT_CONNECTING:
|
case AVAHI_CLIENT_CONNECTING:
|
||||||
|
assert(!connected);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,6 +104,7 @@ void
|
|||||||
Client::OnReconnectTimer() noexcept
|
Client::OnReconnectTimer() noexcept
|
||||||
{
|
{
|
||||||
assert(client == nullptr);
|
assert(client == nullptr);
|
||||||
|
assert(!connected);
|
||||||
|
|
||||||
int error;
|
int error;
|
||||||
client = avahi_client_new(&poll, AVAHI_CLIENT_NO_FAIL,
|
client = avahi_client_new(&poll, AVAHI_CLIENT_NO_FAIL,
|
||||||
|
@ -29,6 +29,8 @@ class Client final {
|
|||||||
|
|
||||||
std::forward_list<ConnectionListener *> listeners;
|
std::forward_list<ConnectionListener *> listeners;
|
||||||
|
|
||||||
|
bool connected = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Client(EventLoop &event_loop, ErrorHandler &_error_handler) noexcept;
|
Client(EventLoop &event_loop, ErrorHandler &_error_handler) noexcept;
|
||||||
~Client() noexcept;
|
~Client() noexcept;
|
||||||
@ -42,6 +44,10 @@ public:
|
|||||||
|
|
||||||
void Close() noexcept;
|
void Close() noexcept;
|
||||||
|
|
||||||
|
bool IsConnected() const noexcept {
|
||||||
|
return connected;
|
||||||
|
}
|
||||||
|
|
||||||
AvahiClient *GetClient() noexcept {
|
AvahiClient *GetClient() noexcept {
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
@ -48,9 +48,8 @@ Publisher::Publisher(Client &_client, const char *_name,
|
|||||||
|
|
||||||
client.AddListener(*this);
|
client.AddListener(*this);
|
||||||
|
|
||||||
auto *c = client.GetClient();
|
if (client.IsConnected())
|
||||||
if (c != nullptr)
|
RegisterServices(client.GetClient());
|
||||||
RegisterServices(c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Publisher::~Publisher() noexcept
|
Publisher::~Publisher() noexcept
|
||||||
@ -168,9 +167,8 @@ Publisher::ShowServices() noexcept
|
|||||||
|
|
||||||
visible = true;
|
visible = true;
|
||||||
|
|
||||||
auto *c = client.GetClient();
|
if (client.IsConnected())
|
||||||
if (c != nullptr)
|
RegisterServices(client.GetClient());
|
||||||
RegisterServices(c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user