提交 e9d1ea64 authored 作者: Shane Bryldt's avatar Shane Bryldt

FS-10167: Implemented first draft of blade.publish, still need to circle back to…

FS-10167: Implemented first draft of blade.publish, still need to circle back to finish blade.route to support multi-tiered routes
上级 84ec9204
...@@ -191,6 +191,7 @@ ...@@ -191,6 +191,7 @@
<ClCompile Include="src\blade_connection.c" /> <ClCompile Include="src\blade_connection.c" />
<ClCompile Include="src\blade_identity.c" /> <ClCompile Include="src\blade_identity.c" />
<ClCompile Include="src\blade_jsonrpc.c" /> <ClCompile Include="src\blade_jsonrpc.c" />
<ClCompile Include="src\blade_protocol.c" />
<ClCompile Include="src\blade_transport_wss.c" /> <ClCompile Include="src\blade_transport_wss.c" />
<ClCompile Include="src\blade_session.c" /> <ClCompile Include="src\blade_session.c" />
<ClCompile Include="src\blade_stack.c" /> <ClCompile Include="src\blade_stack.c" />
...@@ -202,6 +203,7 @@ ...@@ -202,6 +203,7 @@
<ClInclude Include="src\include\blade_connection.h" /> <ClInclude Include="src\include\blade_connection.h" />
<ClInclude Include="src\include\blade_identity.h" /> <ClInclude Include="src\include\blade_identity.h" />
<ClInclude Include="src\include\blade_jsonrpc.h" /> <ClInclude Include="src\include\blade_jsonrpc.h" />
<ClInclude Include="src\include\blade_protocol.h" />
<ClInclude Include="src\include\blade_transport_wss.h" /> <ClInclude Include="src\include\blade_transport_wss.h" />
<ClInclude Include="src\include\blade_session.h" /> <ClInclude Include="src\include\blade_session.h" />
<ClInclude Include="src\include\blade_stack.h" /> <ClInclude Include="src\include\blade_stack.h" />
......
...@@ -42,6 +42,9 @@ ...@@ -42,6 +42,9 @@
<ClCompile Include="src\blade_transport_wss.c"> <ClCompile Include="src\blade_transport_wss.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\blade_protocol.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\include\unqlite.h"> <ClInclude Include="src\include\unqlite.h">
...@@ -74,5 +77,8 @@ ...@@ -74,5 +77,8 @@
<ClInclude Include="src\include\blade_transport_wss.h"> <ClInclude Include="src\include\blade_transport_wss.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\include\blade_protocol.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -90,11 +90,6 @@ KS_DECLARE(ks_status_t) blade_identity_destroy(blade_identity_t **biP) ...@@ -90,11 +90,6 @@ KS_DECLARE(ks_status_t) blade_identity_destroy(blade_identity_t **biP)
ks_assert(*biP); ks_assert(*biP);
bi = *biP; bi = *biP;
if (bi->uri) {
ks_pool_free(bi->pool, &bi->uri);
ks_pool_free(bi->pool, &bi->components);
}
if (bi->parameters) ks_hash_destroy(&bi->parameters);
ks_pool_free(bi->pool, biP); ks_pool_free(bi->pool, biP);
......
...@@ -226,6 +226,18 @@ KS_DECLARE(blade_handle_t *) blade_jsonrpc_request_handle_get(blade_jsonrpc_requ ...@@ -226,6 +226,18 @@ KS_DECLARE(blade_handle_t *) blade_jsonrpc_request_handle_get(blade_jsonrpc_requ
return bjsonrpcreq->handle; return bjsonrpcreq->handle;
} }
KS_DECLARE(const char *) blade_jsonrpc_request_sessionid_get(blade_jsonrpc_request_t *bjsonrpcreq)
{
ks_assert(bjsonrpcreq);
return bjsonrpcreq->session_id;
}
KS_DECLARE(cJSON *) blade_jsonrpc_request_message_get(blade_jsonrpc_request_t *bjsonrpcreq)
{
ks_assert(bjsonrpcreq);
return bjsonrpcreq->message;
}
KS_DECLARE(const char *) blade_jsonrpc_request_messageid_get(blade_jsonrpc_request_t *bjsonrpcreq) KS_DECLARE(const char *) blade_jsonrpc_request_messageid_get(blade_jsonrpc_request_t *bjsonrpcreq)
{ {
ks_assert(bjsonrpcreq); ks_assert(bjsonrpcreq);
...@@ -358,6 +370,30 @@ KS_DECLARE(ks_status_t) blade_jsonrpc_response_raw_create(cJSON **json, cJSON ** ...@@ -358,6 +370,30 @@ KS_DECLARE(ks_status_t) blade_jsonrpc_response_raw_create(cJSON **json, cJSON **
return KS_STATUS_SUCCESS; return KS_STATUS_SUCCESS;
} }
KS_DECLARE(blade_handle_t *) blade_jsonrpc_response_handle_get(blade_jsonrpc_response_t *bjsonrpcres)
{
ks_assert(bjsonrpcres);
return bjsonrpcres->handle;
}
KS_DECLARE(const char *) blade_jsonrpc_response_sessionid_get(blade_jsonrpc_response_t *bjsonrpcres)
{
ks_assert(bjsonrpcres);
return bjsonrpcres->session_id;
}
KS_DECLARE(blade_jsonrpc_request_t *) blade_jsonrpc_response_request_get(blade_jsonrpc_response_t *bjsonrpcres)
{
ks_assert(bjsonrpcres);
return bjsonrpcres->request;
}
KS_DECLARE(cJSON *) blade_jsonrpc_response_message_get(blade_jsonrpc_response_t *bjsonrpcres)
{
ks_assert(bjsonrpcres);
return bjsonrpcres->message;
}
KS_DECLARE(ks_status_t) blade_jsonrpc_error_raw_create(cJSON **json, cJSON **error, const char *id, int32_t code, const char *message) KS_DECLARE(ks_status_t) blade_jsonrpc_error_raw_create(cJSON **json, cJSON **error, const char *id, int32_t code, const char *message)
{ {
cJSON *root = NULL; cJSON *root = NULL;
......
/*
* Copyright (c) 2017, Shane Bryldt
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "blade.h"
struct blade_protocol_s {
ks_pool_t *pool;
const char *name;
const char *realm;
ks_hash_t *providers;
// @todo descriptors (schema, etc) for each method within a protocol
};
static void blade_protocol_cleanup(ks_pool_t *pool, void *ptr, void *arg, ks_pool_cleanup_action_t action, ks_pool_cleanup_type_t type)
{
blade_protocol_t *bp = (blade_protocol_t *)ptr;
ks_assert(bp);
switch (action) {
case KS_MPCL_ANNOUNCE:
break;
case KS_MPCL_TEARDOWN:
if (bp->name) ks_pool_free(bp->pool, &bp->name);
if (bp->realm) ks_pool_free(bp->pool, &bp->realm);
if (bp->providers) ks_hash_destroy(&bp->providers);
break;
case KS_MPCL_DESTROY:
break;
}
}
KS_DECLARE(ks_status_t) blade_protocol_create(blade_protocol_t **bpP, ks_pool_t *pool, const char *name, const char *realm)
{
blade_protocol_t *bp = NULL;
ks_assert(bpP);
ks_assert(pool);
ks_assert(name);
ks_assert(realm);
bp = ks_pool_alloc(pool, sizeof(blade_protocol_t));
bp->pool = pool;
bp->name = ks_pstrdup(pool, name);
bp->realm = ks_pstrdup(pool, realm);
ks_hash_create(&bp->providers, KS_HASH_MODE_CASE_INSENSITIVE, KS_HASH_FLAG_NOLOCK | KS_HASH_FLAG_DUP_CHECK | KS_HASH_FLAG_FREE_KEY, bp->pool);
ks_assert(bp->providers);
ks_pool_set_cleanup(pool, bp, NULL, blade_protocol_cleanup);
*bpP = bp;
return KS_STATUS_SUCCESS;
}
KS_DECLARE(ks_status_t) blade_protocol_destroy(blade_protocol_t **bpP)
{
blade_protocol_t *bp = NULL;
ks_assert(bpP);
ks_assert(*bpP);
bp = *bpP;
ks_pool_free(bp->pool, bpP);
return KS_STATUS_SUCCESS;
}
KS_DECLARE(ks_hash_t *) blade_protocol_providers_get(blade_protocol_t *bp)
{
ks_assert(bp);
return bp->providers;
}
KS_DECLARE(ks_status_t) blade_protocol_providers_add(blade_protocol_t *bp, const char *nodeid)
{
char *key = NULL;
ks_assert(bp);
ks_assert(nodeid);
key = ks_pstrdup(bp->pool, nodeid);
ks_hash_insert(bp->providers, (void *)key, (void *)KS_TRUE);
return KS_STATUS_SUCCESS;
}
KS_DECLARE(ks_status_t) blade_protocol_providers_remove(blade_protocol_t *bp, const char *nodeid)
{
ks_assert(bp);
ks_assert(nodeid);
ks_hash_remove(bp->providers, (void *)nodeid);
return KS_STATUS_SUCCESS;
}
/* For Emacs:
* Local Variables:
* mode:c
* indent-tabs-mode:t
* tab-width:4
* c-basic-offset:4
* End:
* For VIM:
* vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:
*/
...@@ -50,7 +50,6 @@ struct blade_session_s { ...@@ -50,7 +50,6 @@ struct blade_session_s {
ks_q_t *sending; ks_q_t *sending;
ks_q_t *receiving; ks_q_t *receiving;
ks_hash_t *identities;
ks_hash_t *realms; ks_hash_t *realms;
ks_hash_t *routes; ks_hash_t *routes;
...@@ -132,9 +131,6 @@ KS_DECLARE(ks_status_t) blade_session_create(blade_session_t **bsP, blade_handle ...@@ -132,9 +131,6 @@ KS_DECLARE(ks_status_t) blade_session_create(blade_session_t **bsP, blade_handle
ks_q_create(&bs->receiving, pool, 0); ks_q_create(&bs->receiving, pool, 0);
ks_assert(bs->receiving); ks_assert(bs->receiving);
ks_hash_create(&bs->identities, KS_HASH_MODE_CASE_INSENSITIVE, KS_HASH_FLAG_RWLOCK | KS_HASH_FLAG_DUP_CHECK | KS_HASH_FLAG_FREE_KEY, bs->pool);
ks_assert(bs->identities);
ks_hash_create(&bs->realms, KS_HASH_MODE_CASE_INSENSITIVE, KS_HASH_FLAG_RWLOCK | KS_HASH_FLAG_DUP_CHECK | KS_HASH_FLAG_FREE_KEY, bs->pool); ks_hash_create(&bs->realms, KS_HASH_MODE_CASE_INSENSITIVE, KS_HASH_FLAG_RWLOCK | KS_HASH_FLAG_DUP_CHECK | KS_HASH_FLAG_FREE_KEY, bs->pool);
ks_assert(bs->realms); ks_assert(bs->realms);
...@@ -246,35 +242,6 @@ KS_DECLARE(blade_session_state_t) blade_session_state_get(blade_session_t *bs) ...@@ -246,35 +242,6 @@ KS_DECLARE(blade_session_state_t) blade_session_state_get(blade_session_t *bs)
return bs->state; return bs->state;
} }
KS_DECLARE(ks_status_t) blade_session_identity_add(blade_session_t *bs, const char *identity)
{
char *key = NULL;
ks_assert(bs);
ks_assert(identity);
key = ks_pstrdup(bs->pool, identity);
ks_hash_insert(bs->identities, (void *)key, (void *)KS_TRUE);
return KS_STATUS_SUCCESS;
}
KS_DECLARE(ks_status_t) blade_session_identity_remove(blade_session_t *bs, const char *identity)
{
ks_assert(bs);
ks_assert(identity);
ks_hash_remove(bs->identities, (void *)identity);
return KS_STATUS_SUCCESS;
}
KS_DECLARE(ks_hash_t *) blade_session_identities_get(blade_session_t *bs)
{
ks_assert(bs);
return bs->identities;
}
KS_DECLARE(ks_status_t) blade_session_realm_add(blade_session_t *bs, const char *realm) KS_DECLARE(ks_status_t) blade_session_realm_add(blade_session_t *bs, const char *realm)
{ {
char *key = NULL; char *key = NULL;
......
...@@ -44,8 +44,7 @@ ...@@ -44,8 +44,7 @@
#include "blade_jsonrpc.h" #include "blade_jsonrpc.h"
#include "blade_connection.h" #include "blade_connection.h"
#include "blade_session.h" #include "blade_session.h"
#include "ks_dht.h" #include "blade_protocol.h"
#include "ks_bencode.h"
#include "blade_transport_wss.h" #include "blade_transport_wss.h"
......
...@@ -51,6 +51,8 @@ KS_DECLARE(ks_status_t) blade_jsonrpc_request_create(blade_jsonrpc_request_t **b ...@@ -51,6 +51,8 @@ KS_DECLARE(ks_status_t) blade_jsonrpc_request_create(blade_jsonrpc_request_t **b
blade_jsonrpc_response_callback_t callback); blade_jsonrpc_response_callback_t callback);
KS_DECLARE(ks_status_t) blade_jsonrpc_request_destroy(blade_jsonrpc_request_t **bjsonrpcreqP); KS_DECLARE(ks_status_t) blade_jsonrpc_request_destroy(blade_jsonrpc_request_t **bjsonrpcreqP);
KS_DECLARE(blade_handle_t *) blade_jsonrpc_request_handle_get(blade_jsonrpc_request_t *bjsonrpcreq); KS_DECLARE(blade_handle_t *) blade_jsonrpc_request_handle_get(blade_jsonrpc_request_t *bjsonrpcreq);
KS_DECLARE(const char *) blade_jsonrpc_request_sessionid_get(blade_jsonrpc_request_t *bjsonrpcreq);
KS_DECLARE(cJSON *) blade_jsonrpc_request_message_get(blade_jsonrpc_request_t *bjsonrpcreq);
KS_DECLARE(const char *) blade_jsonrpc_request_messageid_get(blade_jsonrpc_request_t *bjsonrpcreq); KS_DECLARE(const char *) blade_jsonrpc_request_messageid_get(blade_jsonrpc_request_t *bjsonrpcreq);
KS_DECLARE(blade_jsonrpc_response_callback_t) blade_jsonrpc_request_callback_get(blade_jsonrpc_request_t *bjsonrpcreq); KS_DECLARE(blade_jsonrpc_response_callback_t) blade_jsonrpc_request_callback_get(blade_jsonrpc_request_t *bjsonrpcreq);
KS_DECLARE(ks_status_t) blade_jsonrpc_request_raw_create(ks_pool_t *pool, cJSON **json, cJSON **params, const char **id, const char *method); KS_DECLARE(ks_status_t) blade_jsonrpc_request_raw_create(ks_pool_t *pool, cJSON **json, cJSON **params, const char **id, const char *method);
...@@ -63,6 +65,11 @@ KS_DECLARE(ks_status_t) blade_jsonrpc_response_create(blade_jsonrpc_response_t * ...@@ -63,6 +65,11 @@ KS_DECLARE(ks_status_t) blade_jsonrpc_response_create(blade_jsonrpc_response_t *
cJSON *json); cJSON *json);
KS_DECLARE(ks_status_t) blade_jsonrpc_response_destroy(blade_jsonrpc_response_t **bjsonrpcresP); KS_DECLARE(ks_status_t) blade_jsonrpc_response_destroy(blade_jsonrpc_response_t **bjsonrpcresP);
KS_DECLARE(ks_status_t) blade_jsonrpc_response_raw_create(cJSON **json, cJSON **result, const char *id); KS_DECLARE(ks_status_t) blade_jsonrpc_response_raw_create(cJSON **json, cJSON **result, const char *id);
KS_DECLARE(blade_handle_t *) blade_jsonrpc_response_handle_get(blade_jsonrpc_response_t *bjsonrpcres);
KS_DECLARE(const char *) blade_jsonrpc_response_sessionid_get(blade_jsonrpc_response_t *bjsonrpcres);
KS_DECLARE(blade_jsonrpc_request_t *) blade_jsonrpc_response_request_get(blade_jsonrpc_response_t *bjsonrpcres);
KS_DECLARE(cJSON *) blade_jsonrpc_response_message_get(blade_jsonrpc_response_t *bjsonrpcres);
KS_DECLARE(ks_status_t) blade_jsonrpc_error_raw_create(cJSON **json, cJSON **error, const char *id, int32_t code, const char *message); KS_DECLARE(ks_status_t) blade_jsonrpc_error_raw_create(cJSON **json, cJSON **error, const char *id, int32_t code, const char *message);
KS_END_EXTERN_C KS_END_EXTERN_C
......
/*
* Copyright (c) 2017, Shane Bryldt
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _BLADE_PROTOCOL_H_
#define _BLADE_PROTOCOL_H_
#include <blade.h>
KS_BEGIN_EXTERN_C
KS_DECLARE(ks_status_t) blade_protocol_create(blade_protocol_t **bpP, ks_pool_t *pool, const char *name, const char *realm);
KS_DECLARE(ks_status_t) blade_protocol_destroy(blade_protocol_t **bpP);
KS_DECLARE(ks_hash_t *) blade_protocol_providers_get(blade_protocol_t *bp);
KS_DECLARE(ks_status_t) blade_protocol_providers_add(blade_protocol_t *bp, const char *nodeid);
KS_DECLARE(ks_status_t) blade_protocol_providers_remove(blade_protocol_t *bp, const char *nodeid);
KS_END_EXTERN_C
#endif
/* For Emacs:
* Local Variables:
* mode:c
* indent-tabs-mode:t
* tab-width:4
* c-basic-offset:4
* End:
* For VIM:
* vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:
*/
...@@ -43,9 +43,6 @@ KS_DECLARE(ks_status_t) blade_session_shutdown(blade_session_t *bs); ...@@ -43,9 +43,6 @@ KS_DECLARE(ks_status_t) blade_session_shutdown(blade_session_t *bs);
KS_DECLARE(blade_handle_t *) blade_session_handle_get(blade_session_t *bs); KS_DECLARE(blade_handle_t *) blade_session_handle_get(blade_session_t *bs);
KS_DECLARE(const char *) blade_session_id_get(blade_session_t *bs); KS_DECLARE(const char *) blade_session_id_get(blade_session_t *bs);
KS_DECLARE(blade_session_state_t) blade_session_state_get(blade_session_t *bs); KS_DECLARE(blade_session_state_t) blade_session_state_get(blade_session_t *bs);
KS_DECLARE(ks_status_t) blade_session_identity_add(blade_session_t *bs, const char *identity);
KS_DECLARE(ks_status_t) blade_session_identity_remove(blade_session_t *bs, const char *identity);
KS_DECLARE(ks_hash_t *) blade_session_identities_get(blade_session_t *bs);
KS_DECLARE(ks_status_t) blade_session_realm_add(blade_session_t *bs, const char *realm); KS_DECLARE(ks_status_t) blade_session_realm_add(blade_session_t *bs, const char *realm);
KS_DECLARE(ks_status_t) blade_session_realm_remove(blade_session_t *bs, const char *realm); KS_DECLARE(ks_status_t) blade_session_realm_remove(blade_session_t *bs, const char *realm);
KS_DECLARE(ks_hash_t *) blade_session_realms_get(blade_session_t *bs); KS_DECLARE(ks_hash_t *) blade_session_realms_get(blade_session_t *bs);
......
...@@ -48,16 +48,20 @@ KS_DECLARE(ks_status_t) blade_handle_shutdown(blade_handle_t *bh); ...@@ -48,16 +48,20 @@ KS_DECLARE(ks_status_t) blade_handle_shutdown(blade_handle_t *bh);
KS_DECLARE(ks_pool_t *) blade_handle_pool_get(blade_handle_t *bh); KS_DECLARE(ks_pool_t *) blade_handle_pool_get(blade_handle_t *bh);
KS_DECLARE(ks_thread_pool_t *) blade_handle_tpool_get(blade_handle_t *bh); KS_DECLARE(ks_thread_pool_t *) blade_handle_tpool_get(blade_handle_t *bh);
KS_DECLARE(ks_status_t) blade_handle_identity_register(blade_handle_t *bh, const char *identity); KS_DECLARE(ks_status_t) blade_handle_local_nodeid_set(blade_handle_t *bh, const char *nodeid);
KS_DECLARE(ks_status_t) blade_handle_identity_unregister(blade_handle_t *bh, const char *identity); KS_DECLARE(ks_bool_t) blade_handle_local_nodeid_compare(blade_handle_t *bh, const char *nodeid);
KS_DECLARE(const char *) blade_handle_master_nodeid_copy(blade_handle_t *bh, ks_pool_t *pool);
KS_DECLARE(ks_status_t) blade_handle_master_nodeid_set(blade_handle_t *bh, const char *nodeid);
KS_DECLARE(ks_bool_t) blade_handle_master_nodeid_compare(blade_handle_t *bh, const char *nodeid);
KS_DECLARE(ks_status_t) blade_handle_realm_register(blade_handle_t *bh, const char *realm); KS_DECLARE(ks_status_t) blade_handle_realm_register(blade_handle_t *bh, const char *realm);
KS_DECLARE(ks_status_t) blade_handle_realm_unregister(blade_handle_t *bh, const char *realm); KS_DECLARE(ks_status_t) blade_handle_realm_unregister(blade_handle_t *bh, const char *realm);
KS_DECLARE(ks_hash_t *) blade_handle_realms_get(blade_handle_t *bh); KS_DECLARE(ks_hash_t *) blade_handle_realms_get(blade_handle_t *bh);
KS_DECLARE(ks_status_t) blade_handle_route_add(blade_handle_t *bh, const char *identity, const char *id); KS_DECLARE(ks_status_t) blade_handle_route_add(blade_handle_t *bh, const char *nodeid, const char *sessionid);
KS_DECLARE(ks_status_t) blade_handle_route_remove(blade_handle_t *bh, const char *identity); KS_DECLARE(ks_status_t) blade_handle_route_remove(blade_handle_t *bh, const char *nodeid);
KS_DECLARE(blade_session_t *) blade_handle_route_lookup(blade_handle_t *bh, const char *identity); KS_DECLARE(blade_session_t *) blade_handle_route_lookup(blade_handle_t *bh, const char *nodeid);
KS_DECLARE(ks_status_t) blade_handle_transport_register(blade_transport_t *bt); KS_DECLARE(ks_status_t) blade_handle_transport_register(blade_transport_t *bt);
KS_DECLARE(ks_status_t) blade_handle_transport_unregister(blade_transport_t *bt); KS_DECLARE(ks_status_t) blade_handle_transport_unregister(blade_transport_t *bt);
...@@ -80,14 +84,14 @@ KS_DECLARE(blade_connection_t *) blade_handle_connections_lookup(blade_handle_t ...@@ -80,14 +84,14 @@ KS_DECLARE(blade_connection_t *) blade_handle_connections_lookup(blade_handle_t
KS_DECLARE(ks_status_t) blade_handle_sessions_add(blade_session_t *bs); KS_DECLARE(ks_status_t) blade_handle_sessions_add(blade_session_t *bs);
KS_DECLARE(ks_status_t) blade_handle_sessions_remove(blade_session_t *bs); KS_DECLARE(ks_status_t) blade_handle_sessions_remove(blade_session_t *bs);
KS_DECLARE(blade_session_t *) blade_handle_sessions_lookup(blade_handle_t *bh, const char *id); KS_DECLARE(blade_session_t *) blade_handle_sessions_lookup(blade_handle_t *bh, const char *id);
KS_DECLARE(blade_session_t *) blade_handle_sessions_upstream(blade_handle_t *bh);
KS_DECLARE(ks_status_t) blade_handle_upstream_set(blade_handle_t *bh, const char *id);
KS_DECLARE(void) blade_handle_sessions_send(blade_handle_t *bh, ks_list_t *sessions, const char *exclude, cJSON *json); KS_DECLARE(void) blade_handle_sessions_send(blade_handle_t *bh, ks_list_t *sessions, const char *exclude, cJSON *json);
KS_DECLARE(ks_status_t) blade_handle_session_state_callback_register(blade_handle_t *bh, void *data, blade_session_state_callback_t callback, const char **id); KS_DECLARE(ks_status_t) blade_handle_session_state_callback_register(blade_handle_t *bh, void *data, blade_session_state_callback_t callback, const char **id);
KS_DECLARE(ks_status_t) blade_handle_session_state_callback_unregister(blade_handle_t *bh, const char *id); KS_DECLARE(ks_status_t) blade_handle_session_state_callback_unregister(blade_handle_t *bh, const char *id);
KS_DECLARE(void) blade_handle_session_state_callbacks_execute(blade_session_t *bs, blade_session_state_condition_t condition); KS_DECLARE(void) blade_handle_session_state_callbacks_execute(blade_session_t *bs, blade_session_state_condition_t condition);
KS_DECLARE(ks_status_t) blade_protocol_publish(blade_handle_t *bh, const char *name, const char *realm);
KS_END_EXTERN_C KS_END_EXTERN_C
#endif #endif
......
...@@ -45,21 +45,18 @@ typedef struct blade_transport_callbacks_s blade_transport_callbacks_t; ...@@ -45,21 +45,18 @@ typedef struct blade_transport_callbacks_s blade_transport_callbacks_t;
typedef struct blade_jsonrpc_s blade_jsonrpc_t; typedef struct blade_jsonrpc_s blade_jsonrpc_t;
typedef struct blade_jsonrpc_request_s blade_jsonrpc_request_t; typedef struct blade_jsonrpc_request_s blade_jsonrpc_request_t;
typedef struct blade_jsonrpc_response_s blade_jsonrpc_response_t; typedef struct blade_jsonrpc_response_s blade_jsonrpc_response_t;
typedef struct blade_session_callbacks_s blade_session_callbacks_t;
typedef struct blade_connection_s blade_connection_t; typedef struct blade_connection_s blade_connection_t;
typedef struct blade_session_s blade_session_t; typedef struct blade_session_s blade_session_t;
typedef struct blade_application_s blade_application_t; typedef struct blade_session_callbacks_s blade_session_callbacks_t;
typedef struct blade_protocol_s blade_protocol_t;
typedef struct blade_protocol_realm_s blade_protocol_realm_t;
typedef struct blade_protocol_method_s blade_protocol_method_t;
typedef struct blade_datastore_s blade_datastore_t;
typedef ks_bool_t (*blade_jsonrpc_request_callback_t)(blade_jsonrpc_request_t *breq, void *data); typedef ks_bool_t (*blade_jsonrpc_request_callback_t)(blade_jsonrpc_request_t *breq, void *data);
typedef ks_bool_t (*blade_jsonrpc_response_callback_t)(blade_jsonrpc_response_t *bres); typedef ks_bool_t (*blade_jsonrpc_response_callback_t)(blade_jsonrpc_response_t *bres);
typedef ks_bool_t (*blade_datastore_fetch_callback_t)(blade_datastore_t *bds, const void *data, uint32_t data_length, void *userdata);
typedef enum { typedef enum {
BLADE_CONNECTION_STATE_NONE, BLADE_CONNECTION_STATE_NONE,
BLADE_CONNECTION_STATE_CLEANUP, BLADE_CONNECTION_STATE_CLEANUP,
......
blade: blade:
{ {
identity = "master1@yourdomain.com"; master:
{
enabled = true;
nodeid = "00000000-0000-0000-0000-000000000000";
realms = ( "mydomain.com" );
};
wss: wss:
{ {
endpoints: endpoints:
......
...@@ -85,6 +85,10 @@ int main(int argc, char **argv) ...@@ -85,6 +85,10 @@ int main(int argc, char **argv)
blade_identity_destroy(&target); blade_identity_destroy(&target);
ks_sleep_ms(5000); ks_sleep_ms(5000);
blade_protocol_publish(bh, "test", "mydomain.com");
ks_sleep_ms(5000);
} else loop(bh); } else loop(bh);
//blade_handle_session_state_callback_unregister(bh, session_state_callback_id); //blade_handle_session_state_callback_unregister(bh, session_state_callback_id);
......
...@@ -63,6 +63,7 @@ int main(int argc, char **argv) ...@@ -63,6 +63,7 @@ int main(int argc, char **argv)
//blade_module_t *mod_chat = NULL; //blade_module_t *mod_chat = NULL;
//blade_identity_t *id = NULL; //blade_identity_t *id = NULL;
const char *cfgpath = "blades.cfg"; const char *cfgpath = "blades.cfg";
const char *autoconnect = NULL;
ks_global_set_default_logger(KS_LOG_LEVEL_DEBUG); ks_global_set_default_logger(KS_LOG_LEVEL_DEBUG);
...@@ -71,6 +72,7 @@ int main(int argc, char **argv) ...@@ -71,6 +72,7 @@ int main(int argc, char **argv)
blade_handle_create(&bh); blade_handle_create(&bh);
//if (argc > 1) cfgpath = argv[1]; //if (argc > 1) cfgpath = argv[1];
if (argc > 1) autoconnect = argv[1];
config_init(&config); config_init(&config);
if (!config_read_file(&config, cfgpath)) { if (!config_read_file(&config, cfgpath)) {
...@@ -98,6 +100,21 @@ int main(int argc, char **argv) ...@@ -98,6 +100,21 @@ int main(int argc, char **argv)
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (autoconnect) {
blade_connection_t *bc = NULL;
blade_identity_t *target = NULL;
blade_identity_create(&target, blade_handle_pool_get(bh));
if (blade_identity_parse(target, autoconnect) == KS_STATUS_SUCCESS) blade_handle_connect(bh, &bc, target, NULL);
blade_identity_destroy(&target);
ks_sleep_ms(5000);
blade_protocol_publish(bh, "test", "mydomain.com");
}
loop(bh); loop(bh);
blade_handle_destroy(&bh); blade_handle_destroy(&bh);
......
blade: blade:
{ {
master:
{
enabled = true;
user = "00000000-0000-0000-0000-000000000000";
realms = ( "mydomain.com" );
};
transport: transport:
{ {
wss: wss:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论