aboutsummaryrefslogtreecommitdiff
path: root/jsonrpc/src/server/mod.rs
diff options
context:
space:
mode:
authorhozan23 <hozan23@karyontech.net>2024-06-30 20:03:02 +0200
committerhozan23 <hozan23@karyontech.net>2024-06-30 20:03:02 +0200
commit3c55168b72c022b618822c7993b7692f583506db (patch)
tree146c03f6cc19956ec0acfb7ba26a6202cb5a9647 /jsonrpc/src/server/mod.rs
parent2ec4d4a3c3779dc016c8437891f825a54a805808 (diff)
jsonrpc: remove redundant macro codes in the main crate and clean up
internal proc macros
Diffstat (limited to 'jsonrpc/src/server/mod.rs')
-rw-r--r--jsonrpc/src/server/mod.rs27
1 files changed, 17 insertions, 10 deletions
diff --git a/jsonrpc/src/server/mod.rs b/jsonrpc/src/server/mod.rs
index e2c3e3a..50a4a8e 100644
--- a/jsonrpc/src/server/mod.rs
+++ b/jsonrpc/src/server/mod.rs
@@ -64,20 +64,21 @@ pub struct Server {
}
impl Server {
- /// Returns the local endpoint.
- pub fn local_endpoint(&self) -> Result<Endpoint> {
- self.listener.local_endpoint().map_err(Error::from)
- }
-
- /// Starts the RPC server
+ /// Starts the RPC server. This will spawn a new task for the main accept loop,
+ /// which listens for incoming connections.
pub fn start(self: &Arc<Self>) {
- let on_complete = |result: TaskResult<Result<()>>| async move {
- if let TaskResult::Completed(Err(err)) = result {
- error!("Accept loop stopped: {err}");
+ // Handle the completion of the accept loop task
+ let on_complete = {
+ let this = self.clone();
+ |result: TaskResult<Result<()>>| async move {
+ if let TaskResult::Completed(Err(err)) = result {
+ error!("Main accept loop stopped: {err}");
+ this.shutdown().await;
+ }
}
};
- // Spawns a new task for each new incoming connection
+ // Spawns a new task for the main accept loop
self.task_group.spawn(
{
let this = self.clone();
@@ -100,6 +101,11 @@ impl Server {
);
}
+ /// Returns the local endpoint.
+ pub fn local_endpoint(&self) -> Result<Endpoint> {
+ self.listener.local_endpoint().map_err(Error::from)
+ }
+
/// Shuts down the RPC server
pub async fn shutdown(&self) {
self.task_group.cancel().await;
@@ -335,6 +341,7 @@ impl Server {
response
}
+ /// Initializes a new [`Server`] from the provided [`ServerConfig`]
async fn init(config: ServerConfig, ex: Option<Executor>) -> Result<Arc<Self>> {
let task_group = match ex {
Some(ex) => TaskGroup::with_executor(ex),