added implementation of wfp_client_disconnect

pull/63/head
Falk Werner 4 years ago
parent 36f2b82a67
commit 3eb5dc89a7

@ -89,12 +89,25 @@ extern WFP_API void wfp_client_protocol_init_lws(
/// \see wfp_connected_fn
/// \see wfp_client_config_set_onconnected
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
extern WFP_API void wfp_client_protocol_connect(
struct wfp_client_protocol * protocol,
struct lws_context * context,
char const * url);
//------------------------------------------------------------------------------
/// \brief Disconnects the protocol from a remote webfuse adapter server.
///
/// \note This call starts to disconnect. A callback is invoked,
/// when the connection is estanlished.
///
/// \param protocol pointer to protocol
///
/// \see wfp_connected_fn
/// \see wfp_client_config_set_ondisconnected
//------------------------------------------------------------------------------
extern WFP_API void wfp_client_protocol_disconnect(
struct wfp_client_protocol * protocol);
#ifdef __cplusplus
}
#endif

@ -202,6 +202,12 @@ void wfp_client_protocol_connect(
wfp_impl_client_protocol_connect(protocol, context, url);
}
void wfp_client_protocol_disconnect(
struct wfp_client_protocol * protocol)
{
wfp_impl_client_protocol_disconnect(protocol);
}
// client

@ -79,9 +79,7 @@ void wfp_impl_client_connect(
void wfp_impl_client_disconnect(
struct wfp_client * client)
{
(void) client;
// ToDo: implement me
wfp_impl_client_protocol_disconnect(&client->protocol);
}
bool wfp_impl_client_is_connected(

@ -324,3 +324,17 @@ void wfp_impl_client_protocol_connect(
}
}
void wfp_impl_client_protocol_disconnect(
struct wfp_client_protocol * protocol)
{
if (protocol->is_connected)
{
protocol->is_shutdown_requested = true;
lws_callback_on_writable(protocol->wsi);
}
else
{
protocol->provider.disconnected(protocol->user_data);
}
}

@ -53,6 +53,9 @@ extern void wfp_impl_client_protocol_connect(
struct lws_context * context,
char const * url);
extern void wfp_impl_client_protocol_disconnect(
struct wfp_client_protocol * protocol);
#ifdef __cplusplus
}
#endif

@ -67,6 +67,12 @@ private:
{
wfp_client_service(context->client);
}
wfp_client_disconnect(context->client);
while (wfp_impl_client_is_connected(context->client))
{
wfp_client_service(context->client);
}
}
std::mutex shutdown_lock;

@ -52,6 +52,11 @@ public:
server->waitForConnection();
}
void Disconnect()
{
wfp_client_protocol_disconnect(protocol);
}
void SendToClient(json_t * request)
{
server->sendMessage(request);
@ -166,6 +171,16 @@ TEST(client_protocol, connect)
if (HasFatalFailure()) { return; }
}
TEST(client_protocol, disconnect_without_connect)
{
MockProviderClient provider;
ClientProtocolFixture fixture(provider);
EXPECT_CALL(provider, OnDisconnected()).Times(1);
fixture.Disconnect();
}
TEST(client_protocol, connect_with_username_authentication)
{
MockProviderClient provider;
@ -184,7 +199,6 @@ TEST(client_protocol, connect_with_username_authentication)
std::string filesystem;
fixture.AwaitAddFilesystem(filesystem);
if (HasFatalFailure()) { return; }
}
TEST(client_protocol, getattr)
@ -216,4 +230,6 @@ TEST(client_protocol, getattr)
ASSERT_TRUE(json_is_object(response));
json_decref(response);
fixture.Disconnect();
}
Loading…
Cancel
Save