summaryrefslogtreecommitdiff
path: root/crates/vcs_actions/src/registry
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-10-13 14:17:51 +0800
committer魏曹先生 <1992414357@qq.com>2025-10-13 14:17:51 +0800
commitacf0804b5f9bdc2796d847919a8ae20103be600a (patch)
tree96eb75fad0d12e4a6c0c8e2148b555899602b540 /crates/vcs_actions/src/registry
parent67fb8ec01b351c6c9fd2af321166bb92250b1218 (diff)
feat: implement asynchronous action call system
- Add async callback support with proper argument passing - Implement remote action invocation via TCP connection - Add hello_world_action example demonstrating async communication - Improve ActionPool with type-safe async processing - Update client registry for remote action handling - Enhance ActionContext with better instance management - Support both local and remote action execution modes
Diffstat (limited to 'crates/vcs_actions/src/registry')
-rw-r--r--crates/vcs_actions/src/registry/client_registry.rs17
-rw-r--r--crates/vcs_actions/src/registry/server_registry.rs4
2 files changed, 12 insertions, 9 deletions
diff --git a/crates/vcs_actions/src/registry/client_registry.rs b/crates/vcs_actions/src/registry/client_registry.rs
index 56acdad..47fd7ee 100644
--- a/crates/vcs_actions/src/registry/client_registry.rs
+++ b/crates/vcs_actions/src/registry/client_registry.rs
@@ -2,13 +2,12 @@ use action_system::{action::ActionContext, action_pool::ActionPool};
use tcp_connection::error::TcpTargetError;
use crate::{
- actions::local_actions::register_set_upstream_vault_action,
- connection::protocol::RemoteActionInvoke,
+ actions::local_actions::register_hello_world_action, connection::protocol::RemoteActionInvoke,
};
fn register_actions(pool: &mut ActionPool) {
// Pool register here
- register_set_upstream_vault_action(pool);
+ register_hello_world_action(pool);
}
pub fn client_action_pool() -> ActionPool {
@@ -19,13 +18,16 @@ pub fn client_action_pool() -> ActionPool {
register_actions(&mut pool);
// Add process events
- pool.set_on_proc_begin(|ctx| Box::pin(on_proc_begin(ctx)));
+ pool.set_on_proc_begin(|ctx, args| Box::pin(on_proc_begin(ctx, args)));
// Return
pool
}
-async fn on_proc_begin(ctx: &mut ActionContext) -> Result<(), TcpTargetError> {
+async fn on_proc_begin(
+ ctx: &ActionContext,
+ _args: &(dyn std::any::Any + Send + Sync),
+) -> Result<(), TcpTargetError> {
// Is ctx remote
let is_remote = ctx.is_remote();
@@ -34,7 +36,7 @@ async fn on_proc_begin(ctx: &mut ActionContext) -> Result<(), TcpTargetError> {
let action_args_json = ctx.action_args_json().clone();
// Get instance
- let Some(instance) = ctx.instance_mut() else {
+ let Some(instance) = ctx.instance() else {
return Err(TcpTargetError::Unsupported(
"Missing ConnectionInstance in current context, this ActionPool does not support this call"
.to_string()));
@@ -49,7 +51,8 @@ async fn on_proc_begin(ctx: &mut ActionContext) -> Result<(), TcpTargetError> {
};
// Send
- instance.write_msgpack(msg).await?;
+ let mut instance = instance.lock().await;
+ instance.write_msgpack(&msg).await?;
}
// Return OK, wait for client to execute Action locally
diff --git a/crates/vcs_actions/src/registry/server_registry.rs b/crates/vcs_actions/src/registry/server_registry.rs
index 3ecc103..b449b68 100644
--- a/crates/vcs_actions/src/registry/server_registry.rs
+++ b/crates/vcs_actions/src/registry/server_registry.rs
@@ -1,9 +1,9 @@
use action_system::action_pool::ActionPool;
-use crate::actions::local_actions::register_set_upstream_vault_action;
+use crate::actions::local_actions::register_hello_world_action;
pub fn server_action_pool() -> ActionPool {
let mut pool = ActionPool::new();
- register_set_upstream_vault_action(&mut pool);
+ register_hello_world_action(&mut pool);
pool
}