Skip to content

Commit

Permalink
feat(ipc): add result id to messages
Browse files Browse the repository at this point in the history
  • Loading branch information
chicoxyzzy committed Jul 14, 2023
1 parent 3f85982 commit 18b9e79
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 2 deletions.
1 change: 0 additions & 1 deletion api/internal/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,6 @@ class RuntimeXHRPostQueue extends ConcurrentQueue {
params = {}
}

params = { ...params, id }
const options = { responseType: 'arraybuffer' }
const result = await ipc.request('post', { id }, options)

Expand Down
2 changes: 1 addition & 1 deletion api/ipc.js
Original file line number Diff line number Diff line change
Expand Up @@ -864,7 +864,7 @@ export class Result {
const err = maybeMakeError(result?.err || maybeError || null, Result.from)
const data = !err && result?.data !== null && result?.data !== undefined
? result.data?.data ?? result.data
: (!err ? result?.err ?? result : null)
: (!err && !id && !result?.source ? result?.err ?? result : null)

const source = result?.source || maybeSource || null
const headers = result?.headers || maybeHeaders || null
Expand Down
43 changes: 43 additions & 0 deletions include/socket/extension.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,22 @@ extern "C" {
bool retained
);

/**
*/
SOCKET_RUNTIME_EXTENSION_EXPORT
bool sapi_context_set_data (
sapi_context_t* context,
const void* data
);

/**
*/
SOCKET_RUNTIME_EXTENSION_EXPORT
bool sapi_message (
sapi_context_t* context,
const void* data
);

/**
* Queues `callback` to be called sometime in the future for a `context`.
* @param context - An extension context
Expand Down Expand Up @@ -1047,6 +1063,15 @@ extern "C" {
const char* headers
);

SOCKET_RUNTIME_EXTENSION_EXPORT
bool sapi_ipc_send_bytes_with_result (
sapi_context_t* ctx,
sapi_ipc_result_t* result,
unsigned int size,
unsigned char* bytes,
const char* headers
);

/**
* Map a named route to a callback with optional use data for a given
* extension context. Routes must "reply" with a result to respond to an
Expand Down Expand Up @@ -1321,6 +1346,24 @@ extern "C" {
const char *name
);

/**
* TODO
*/
SOCKET_RUNTIME_EXTENSION_EXPORT
sapi_ipc_message_t* sapi_ipc_message_clone (
sapi_context_t* context,
const sapi_ipc_message_t* message
);

/**
* TODO
*/
SOCKET_RUNTIME_EXTENSION_EXPORT
sapi_ipc_result_t* sapi_ipc_result_clone (
sapi_context_t* context,
const sapi_ipc_result_t* result
);

#if defined(__cplusplus)
};
#endif
Expand Down
9 changes: 9 additions & 0 deletions src/extension/context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ sapi_context_t* sapi_context_create (
return context;
}

bool sapi_context_set_data (
sapi_context_t* ctx,
const void* data
) {
if (ctx == nullptr) return false;
ctx->data = data;
return true;
}

bool sapi_context_dispatch (
sapi_context_t* ctx,
const void* data,
Expand Down
5 changes: 5 additions & 0 deletions src/extension/extension.cc
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@ namespace SSC {
const char*
);

template sapi_ipc_message_t*
SSC::Extension::Context::Memory::alloc<sapi_ipc_message_t> (
sapi_ipc_message_t
);

Extension::Context::Context (const Extension* extension) {
this->extension = extension;
this->router = extension->context.router;
Expand Down
46 changes: 46 additions & 0 deletions src/extension/ipc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,30 @@ bool sapi_ipc_send_bytes (
return ctx->router->send(result.seq, result.str(), post);
}

bool sapi_ipc_send_bytes_with_result (
sapi_context_t* ctx,
sapi_ipc_result_t* result,
unsigned int size,
unsigned char* bytes,
const char* headers
) {
if (!ctx || !ctx->router || !bytes || !size || !result) {
return false;
}

auto post = SSC::Post {
.id = 0,
.ttl = 0,
.body = new char[size]{0},
.length = size,
.headers =headers ? headers : ""
};

memcpy(post.body, bytes, size);

return ctx->router->send(result->seq, result->str(), post);
}

bool sapi_ipc_send_json (
sapi_context_t* ctx,
sapi_ipc_message_t* message,
Expand Down Expand Up @@ -322,6 +346,26 @@ const char* sapi_ipc_message_get (
return value.c_str();
}

sapi_ipc_message_t* sapi_ipc_message_clone (
sapi_context_t* context,
const sapi_ipc_message_t* message
) {
if (message == nullptr) return nullptr;
if (context == nullptr) return nullptr;

return context->memory.alloc<sapi_ipc_message_t>(*message);
}

sapi_ipc_result_t* sapi_ipc_result_clone (
sapi_context_t* context,
const sapi_ipc_result_t* result
) {
if (result == nullptr) return nullptr;
if (context == nullptr) return nullptr;

return context->memory.alloc<sapi_ipc_result_t>(context, *result);
}

void sapi_ipc_result_set_seq (sapi_ipc_result_t* result, const char* seq) {
if (result && seq) {
result->seq = seq;
Expand All @@ -338,6 +382,8 @@ void sapi_ipc_result_set_message (
) {
if (result && message) {
result->message = *message;
result->source = message->name;
result->seq = message->seq;
}
}

Expand Down
1 change: 1 addition & 0 deletions src/ipc/ipc.hh
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ namespace SSC::IPC {
Post post;

Result () = default;
Result (const Result&) = default;
Result (const JSON::Any);
Result (const Err error);
Result (const Data data);
Expand Down

0 comments on commit 18b9e79

Please sign in to comment.