From 3f9a6af5926024b771891c9b41a0ad918d79f968 Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Sun, 31 Mar 2024 18:35:33 -0400 Subject: [PATCH] Add generics to InternalServiceConnector --- citadel-internal-service-connector/Cargo.toml | 5 +- .../src/{util.rs => connector.rs} | 50 ++++----------- .../src/io_interface/in_memory.rs | 10 +-- .../src/io_interface/mod.rs | 13 ++++ .../src/io_interface/tcp.rs | 62 +++++++++++++++++++ citadel-internal-service-connector/src/lib.rs | 4 +- citadel-internal-service-types/src/lib.rs | 2 + citadel-internal-service-types/src/service.rs | 1 + .../src/io_interface/tcp.rs | 37 ----------- .../{io_interface/mod.rs => kernel/ext.rs} | 26 ++------ citadel-internal-service/src/kernel/mod.rs | 58 ++++++++++++++--- .../src/kernel/requests/connect.rs | 2 +- .../src/kernel/requests/disconnect.rs | 2 +- .../requests/file/delete_virtual_file.rs | 2 +- .../src/kernel/requests/file/download.rs | 2 +- .../requests/file/respond_file_transfer.rs | 2 +- .../src/kernel/requests/file/upload.rs | 2 +- .../requests/get_account_information.rs | 2 +- .../src/kernel/requests/get_sessions.rs | 2 +- .../src/kernel/requests/group/create.rs | 2 +- .../src/kernel/requests/group/end.rs | 2 +- .../requests/group/group_list_groups.rs | 2 +- .../src/kernel/requests/group/invite.rs | 2 +- .../src/kernel/requests/group/kick.rs | 2 +- .../src/kernel/requests/group/leave.rs | 2 +- .../src/kernel/requests/group/message.rs | 2 +- .../src/kernel/requests/group/request_join.rs | 2 +- .../kernel/requests/group/respond_request.rs | 2 +- .../kernel/requests/local_db/clear_all_kv.rs | 2 +- .../src/kernel/requests/local_db/delete_kv.rs | 2 +- .../kernel/requests/local_db/get_all_kv.rs | 2 +- .../src/kernel/requests/local_db/get_kv.rs | 2 +- .../src/kernel/requests/local_db/set_kv.rs | 2 +- .../src/kernel/requests/message.rs | 2 +- .../src/kernel/requests/mod.rs | 2 +- .../src/kernel/requests/peer/connect.rs | 2 +- .../src/kernel/requests/peer/disconnect.rs | 2 +- .../src/kernel/requests/peer/list_all.rs | 2 +- .../kernel/requests/peer/list_registered.rs | 2 +- .../src/kernel/requests/peer/register.rs | 2 +- .../src/kernel/requests/register.rs | 2 +- .../src/kernel/responses/disconnect.rs | 2 +- .../kernel/responses/group_channel_created.rs | 2 +- .../src/kernel/responses/group_event.rs | 2 +- .../src/kernel/responses/mod.rs | 2 +- .../responses/object_transfer_handle.rs | 2 +- .../src/kernel/responses/peer_event.rs | 2 +- citadel-internal-service/src/lib.rs | 1 - citadel-internal-service/tests/common/mod.rs | 7 ++- citadel-internal-service/tests/service.rs | 2 +- 50 files changed, 198 insertions(+), 152 deletions(-) rename citadel-internal-service-connector/src/{util.rs => connector.rs} (57%) rename {citadel-internal-service => citadel-internal-service-connector}/src/io_interface/in_memory.rs (85%) create mode 100644 citadel-internal-service-connector/src/io_interface/mod.rs create mode 100644 citadel-internal-service-connector/src/io_interface/tcp.rs create mode 100644 citadel-internal-service-types/src/service.rs delete mode 100644 citadel-internal-service/src/io_interface/tcp.rs rename citadel-internal-service/src/{io_interface/mod.rs => kernel/ext.rs} (78%) diff --git a/citadel-internal-service-connector/Cargo.toml b/citadel-internal-service-connector/Cargo.toml index f5365cd..5bd69d3 100644 --- a/citadel-internal-service-connector/Cargo.toml +++ b/citadel-internal-service-connector/Cargo.toml @@ -11,4 +11,7 @@ tokio = { workspace = true, features = ["net", "rt", "macros"] } tokio-util = { workspace = true, features = ["codec"] } bincode2 = { workspace = true } serde = { workspace = true } -futures = { workspace = true, features = ["alloc"] } \ No newline at end of file +futures = { workspace = true, features = ["alloc"] } +uuid = { workspace = true } +citadel_logging = { workspace = true } +async-trait = "0.1.79" \ No newline at end of file diff --git a/citadel-internal-service-connector/src/util.rs b/citadel-internal-service-connector/src/connector.rs similarity index 57% rename from citadel-internal-service-connector/src/util.rs rename to citadel-internal-service-connector/src/connector.rs index 642cd78..4d81e59 100644 --- a/citadel-internal-service-connector/src/util.rs +++ b/citadel-internal-service-connector/src/connector.rs @@ -1,56 +1,28 @@ use crate::codec::SerializingCodec; +use crate::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServicePayload, InternalServiceRequest, InternalServiceResponse, }; -use futures::stream::{SplitSink, SplitStream}; use futures::{Sink, Stream, StreamExt}; use std::pin::Pin; use std::task::{Context, Poll}; -use tokio::net::{TcpStream, ToSocketAddrs}; +use tokio::net::TcpStream; use tokio_util::codec::{Decoder, Framed, LengthDelimitedCodec}; -pub struct InternalServiceConnector { - pub sink: WrappedSink, - pub stream: WrappedStream, +pub struct InternalServiceConnector { + pub sink: WrappedSink, + pub stream: WrappedStream, } -pub struct WrappedStream { - inner: SplitStream>>, +pub struct WrappedStream { + pub inner: T::Stream, } -pub struct WrappedSink { - inner: SplitSink< - Framed>, - InternalServicePayload, - >, +pub struct WrappedSink { + pub inner: T::Sink, } -impl InternalServiceConnector { - pub async fn connect(addr: T) -> Result> { - let conn = TcpStream::connect(addr).await?; - let (sink, mut stream) = wrap_tcp_conn(conn).split(); - let greeter_packet = stream - .next() - .await - .ok_or("Failed to receive greeting packet")??; - if matches!( - greeter_packet, - InternalServicePayload::Response(InternalServiceResponse::ServiceConnectionAccepted(_)) - ) { - let stream = WrappedStream { inner: stream }; - let sink = WrappedSink { inner: sink }; - Ok(Self { sink, stream }) - } else { - Err("Failed to receive greeting packet")? - } - } - - pub fn split(self) -> (WrappedSink, WrappedStream) { - (self.sink, self.stream) - } -} - -impl Stream for WrappedStream { +impl Stream for WrappedStream { type Item = InternalServiceResponse; fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { @@ -63,7 +35,7 @@ impl Stream for WrappedStream { } } -impl Sink for WrappedSink { +impl Sink for WrappedSink { type Error = std::io::Error; fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { diff --git a/citadel-internal-service/src/io_interface/in_memory.rs b/citadel-internal-service-connector/src/io_interface/in_memory.rs similarity index 85% rename from citadel-internal-service/src/io_interface/in_memory.rs rename to citadel-internal-service-connector/src/io_interface/in_memory.rs index 8deb96d..8464cd0 100644 --- a/citadel-internal-service/src/io_interface/in_memory.rs +++ b/citadel-internal-service-connector/src/io_interface/in_memory.rs @@ -1,13 +1,13 @@ use crate::io_interface::IOInterface; +use async_trait::async_trait; use citadel_internal_service_types::InternalServicePayload; -use citadel_sdk::async_trait; use futures::Sink; use std::pin::Pin; use std::task::{Context, Poll}; pub struct InMemoryInterface { - sink: Option>, - stream: Option>, + pub sink: Option>, + pub stream: Option>, } #[async_trait] @@ -25,7 +25,7 @@ impl IOInterface for InMemoryInterface { } } -pub struct InMemorySink(futures::channel::mpsc::UnboundedSender); +pub struct InMemorySink(pub futures::channel::mpsc::UnboundedSender); impl Sink for InMemorySink { type Error = std::io::Error; @@ -58,7 +58,7 @@ impl Sink for InMemorySink { } } -pub struct InMemoryStream(futures::channel::mpsc::UnboundedReceiver); +pub struct InMemoryStream(pub futures::channel::mpsc::UnboundedReceiver); impl futures::Stream for InMemoryStream { type Item = std::io::Result; diff --git a/citadel-internal-service-connector/src/io_interface/mod.rs b/citadel-internal-service-connector/src/io_interface/mod.rs new file mode 100644 index 0000000..8c4a14f --- /dev/null +++ b/citadel-internal-service-connector/src/io_interface/mod.rs @@ -0,0 +1,13 @@ +use async_trait::async_trait; +use citadel_internal_service_types::InternalServicePayload; +use futures::{Sink, Stream}; + +pub mod in_memory; +pub mod tcp; + +#[async_trait] +pub trait IOInterface: Sized + Send + 'static { + type Sink: Sink + Unpin + Send + 'static; + type Stream: Stream> + Unpin + Send + 'static; + async fn next_connection(&mut self) -> Option<(Self::Sink, Self::Stream)>; +} diff --git a/citadel-internal-service-connector/src/io_interface/tcp.rs b/citadel-internal-service-connector/src/io_interface/tcp.rs new file mode 100644 index 0000000..5a4a58a --- /dev/null +++ b/citadel-internal-service-connector/src/io_interface/tcp.rs @@ -0,0 +1,62 @@ +use crate::codec::SerializingCodec; +use crate::connector::{wrap_tcp_conn, InternalServiceConnector, WrappedSink, WrappedStream}; +use crate::io_interface::IOInterface; +use async_trait::async_trait; +use citadel_internal_service_types::{InternalServicePayload, InternalServiceResponse}; +use futures::stream::{SplitSink, SplitStream}; +use futures::StreamExt; +use tokio::net::{TcpListener, TcpStream, ToSocketAddrs}; +use tokio_util::codec::Framed; + +pub struct TcpIOInterface { + pub listener: TcpListener, +} + +impl TcpIOInterface { + pub async fn new(bind_address: T) -> std::io::Result { + let listener = TcpListener::bind(bind_address).await?; + Ok(Self { listener }) + } +} + +impl InternalServiceConnector { + pub async fn connect(addr: T) -> Result> { + let conn = TcpStream::connect(addr).await?; + let (sink, mut stream) = wrap_tcp_conn(conn).split(); + let greeter_packet = stream + .next() + .await + .ok_or("Failed to receive greeting packet")??; + if matches!( + greeter_packet, + InternalServicePayload::Response(InternalServiceResponse::ServiceConnectionAccepted(_)) + ) { + let stream = WrappedStream { inner: stream }; + let sink = WrappedSink { inner: sink }; + Ok(Self { sink, stream }) + } else { + Err("Failed to receive greeting packet")? + } + } + + pub fn split(self) -> (WrappedSink, WrappedStream) { + (self.sink, self.stream) + } +} + +#[async_trait] +impl IOInterface for TcpIOInterface { + type Sink = SplitSink< + Framed>, + InternalServicePayload, + >; + type Stream = SplitStream>>; + + async fn next_connection(&mut self) -> Option<(Self::Sink, Self::Stream)> { + self.listener + .accept() + .await + .ok() + .map(|(stream, _)| wrap_tcp_conn(stream).split()) + } +} diff --git a/citadel-internal-service-connector/src/lib.rs b/citadel-internal-service-connector/src/lib.rs index 7b141df..807ab56 100644 --- a/citadel-internal-service-connector/src/lib.rs +++ b/citadel-internal-service-connector/src/lib.rs @@ -1,2 +1,4 @@ pub mod codec; -pub mod util; +pub mod connector; + +pub mod io_interface; diff --git a/citadel-internal-service-types/src/lib.rs b/citadel-internal-service-types/src/lib.rs index cdef49b..7dfdcbf 100644 --- a/citadel-internal-service-types/src/lib.rs +++ b/citadel-internal-service-types/src/lib.rs @@ -11,6 +11,8 @@ use std::path::PathBuf; use std::time::Duration; use uuid::Uuid; +pub mod service; + #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ConnectSuccess { pub cid: u64, diff --git a/citadel-internal-service-types/src/service.rs b/citadel-internal-service-types/src/service.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/citadel-internal-service-types/src/service.rs @@ -0,0 +1 @@ + diff --git a/citadel-internal-service/src/io_interface/tcp.rs b/citadel-internal-service/src/io_interface/tcp.rs deleted file mode 100644 index f4e78b3..0000000 --- a/citadel-internal-service/src/io_interface/tcp.rs +++ /dev/null @@ -1,37 +0,0 @@ -use crate::io_interface::IOInterface; -use citadel_internal_service_connector::codec::SerializingCodec; -use citadel_internal_service_connector::util::wrap_tcp_conn; -use citadel_internal_service_types::InternalServicePayload; -use citadel_sdk::async_trait; -use futures::stream::{SplitSink, SplitStream}; -use futures::StreamExt; -use tokio::net::{TcpListener, TcpStream, ToSocketAddrs}; -use tokio_util::codec::Framed; - -pub struct TcpIOInterface { - pub(crate) listener: TcpListener, -} - -impl TcpIOInterface { - pub async fn new(bind_address: T) -> std::io::Result { - let listener = TcpListener::bind(bind_address).await?; - Ok(Self { listener }) - } -} - -#[async_trait] -impl IOInterface for TcpIOInterface { - type Sink = SplitSink< - Framed>, - InternalServicePayload, - >; - type Stream = SplitStream>>; - - async fn next_connection(&mut self) -> Option<(Self::Sink, Self::Stream)> { - self.listener - .accept() - .await - .ok() - .map(|(stream, _)| wrap_tcp_conn(stream).split()) - } -} diff --git a/citadel-internal-service/src/io_interface/mod.rs b/citadel-internal-service/src/kernel/ext.rs similarity index 78% rename from citadel-internal-service/src/io_interface/mod.rs rename to citadel-internal-service/src/kernel/ext.rs index dc04962..b079cef 100644 --- a/citadel-internal-service/src/io_interface/mod.rs +++ b/citadel-internal-service/src/kernel/ext.rs @@ -1,28 +1,18 @@ -use crate::kernel::{send_to_kernel, sink_send_payload, CitadelWorkspaceService, Connection}; +use crate::kernel::{send_to_kernel, sink_send_payload, Connection}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServicePayload, InternalServiceRequest, InternalServiceResponse, ServiceConnectionAccepted, }; use citadel_logging::{error, info, warn}; -use citadel_sdk::async_trait; -use futures::{Sink, Stream, StreamExt}; +use futures::StreamExt; use std::collections::HashMap; -use std::net::SocketAddr; use std::sync::Arc; -use tcp::TcpIOInterface; use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender}; use tokio::sync::Mutex; use uuid::Uuid; -pub mod in_memory; -pub mod tcp; - -#[async_trait] -pub trait IOInterface: Sized + Send + 'static { - type Sink: Sink + Unpin + Send + 'static; - type Stream: Stream> + Unpin + Send + 'static; - async fn next_connection(&mut self) -> Option<(Self::Sink, Self::Stream)>; - +pub trait IOInterfaceExt: IOInterface { #[allow(clippy::too_many_arguments)] fn spawn_connection_handler( &mut self, @@ -84,10 +74,4 @@ pub trait IOInterface: Sized + Send + 'static { } } -impl CitadelWorkspaceService { - pub async fn new_tcp( - bind_address: SocketAddr, - ) -> std::io::Result> { - Ok(TcpIOInterface::new(bind_address).await?.into()) - } -} +impl IOInterfaceExt for T {} diff --git a/citadel-internal-service/src/kernel/mod.rs b/citadel-internal-service/src/kernel/mod.rs index 1625457..b0c56a4 100644 --- a/citadel-internal-service/src/kernel/mod.rs +++ b/citadel-internal-service/src/kernel/mod.rs @@ -1,5 +1,13 @@ -use crate::io_interface::IOInterface; +use crate::kernel::ext::IOInterfaceExt; use crate::kernel::requests::{handle_request, HandledRequestResult}; +use citadel_internal_service_connector::connector::{ + InternalServiceConnector, WrappedSink, WrappedStream, +}; +use citadel_internal_service_connector::io_interface::in_memory::{ + InMemoryInterface, InMemorySink, InMemoryStream, +}; +use citadel_internal_service_connector::io_interface::tcp::TcpIOInterface; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::*; use citadel_logging::{error, info, warn}; use citadel_sdk::prefabs::ClientServerRemote; @@ -9,11 +17,13 @@ use citadel_sdk::prelude::*; use futures::stream::StreamExt; use futures::{Sink, SinkExt}; use std::collections::HashMap; +use std::net::SocketAddr; use std::sync::Arc; use tokio::sync::mpsc::UnboundedSender; use tokio::sync::Mutex; use uuid::Uuid; +pub(crate) mod ext; pub(crate) mod requests; pub(crate) mod responses; @@ -56,18 +66,52 @@ impl CitadelWorkspaceService { } } +impl CitadelWorkspaceService { + pub async fn new_tcp( + bind_address: SocketAddr, + ) -> std::io::Result> { + Ok(TcpIOInterface::new(bind_address).await?.into()) + } +} + +impl CitadelWorkspaceService { + /// Generates an in-memory service connector and kernel. This is useful for programs that do not need + /// networking to connect between the application and the internal service + pub fn new_in_memory() -> ( + InternalServiceConnector, + CitadelWorkspaceService, + ) { + let (tx_to_consumer, rx_from_consumer) = futures::channel::mpsc::unbounded(); + let (tx_to_svc, rx_from_svc) = futures::channel::mpsc::unbounded(); + let connector = InternalServiceConnector { + sink: WrappedSink { + inner: InMemorySink(tx_to_svc), + }, + stream: WrappedStream { + inner: InMemoryStream(rx_from_svc), + }, + }; + let kernel = InMemoryInterface { + sink: Some(tx_to_consumer), + stream: Some(rx_from_consumer), + } + .into(); + (connector, kernel) + } +} + #[allow(dead_code)] pub struct Connection { - sink_to_server: PeerChannelSendHalf, - client_server_remote: ClientServerRemote, - peers: HashMap, + pub sink_to_server: PeerChannelSendHalf, + pub client_server_remote: ClientServerRemote, + pub peers: HashMap, pub(crate) associated_tcp_connection: Uuid, - c2s_file_transfer_handlers: HashMap>, - groups: HashMap, + pub c2s_file_transfer_handlers: HashMap>, + pub groups: HashMap, } #[allow(dead_code)] -struct PeerConnection { +pub struct PeerConnection { sink: PeerChannelSendHalf, remote: PeerRemote, handler_map: HashMap>, diff --git a/citadel-internal-service/src/kernel/requests/connect.rs b/citadel-internal-service/src/kernel/requests/connect.rs index 0b97c3d..e22d9a9 100644 --- a/citadel-internal-service/src/kernel/requests/connect.rs +++ b/citadel-internal-service/src/kernel/requests/connect.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::{create_client_server_remote, CitadelWorkspaceService, Connection}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ ConnectFailure, InternalServiceRequest, InternalServiceResponse, MessageNotification, }; diff --git a/citadel-internal-service/src/kernel/requests/disconnect.rs b/citadel-internal-service/src/kernel/requests/disconnect.rs index 5ed1b8c..0d38082 100644 --- a/citadel-internal-service/src/kernel/requests/disconnect.rs +++ b/citadel-internal-service/src/kernel/requests/disconnect.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ DisconnectFailure, DisconnectNotification, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/file/delete_virtual_file.rs b/citadel-internal-service/src/kernel/requests/file/delete_virtual_file.rs index 61a0b95..6c55a06 100644 --- a/citadel-internal-service/src/kernel/requests/file/delete_virtual_file.rs +++ b/citadel-internal-service/src/kernel/requests/file/delete_virtual_file.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ DeleteVirtualFileFailure, DeleteVirtualFileSuccess, InternalServiceRequest, InternalServiceResponse, diff --git a/citadel-internal-service/src/kernel/requests/file/download.rs b/citadel-internal-service/src/kernel/requests/file/download.rs index bb788d6..ad44787 100644 --- a/citadel-internal-service/src/kernel/requests/file/download.rs +++ b/citadel-internal-service/src/kernel/requests/file/download.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ DownloadFileFailure, DownloadFileSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/file/respond_file_transfer.rs b/citadel-internal-service/src/kernel/requests/file/respond_file_transfer.rs index 50b8573..faf0482 100644 --- a/citadel-internal-service/src/kernel/requests/file/respond_file_transfer.rs +++ b/citadel-internal-service/src/kernel/requests/file/respond_file_transfer.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::{spawn_tick_updater, CitadelWorkspaceService}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ FileTransferStatusNotification, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/file/upload.rs b/citadel-internal-service/src/kernel/requests/file/upload.rs index 4bdcf56..52aaf4e 100644 --- a/citadel-internal-service/src/kernel/requests/file/upload.rs +++ b/citadel-internal-service/src/kernel/requests/file/upload.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, SendFileRequestFailure, SendFileRequestSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/get_account_information.rs b/citadel-internal-service/src/kernel/requests/get_account_information.rs index bebbc08..cfa2385 100644 --- a/citadel-internal-service/src/kernel/requests/get_account_information.rs +++ b/citadel-internal-service/src/kernel/requests/get_account_information.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ AccountInformation, Accounts, InternalServiceRequest, InternalServiceResponse, PeerSessionInformation, diff --git a/citadel-internal-service/src/kernel/requests/get_sessions.rs b/citadel-internal-service/src/kernel/requests/get_sessions.rs index 2ede82c..875074f 100644 --- a/citadel-internal-service/src/kernel/requests/get_sessions.rs +++ b/citadel-internal-service/src/kernel/requests/get_sessions.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GetSessionsResponse, InternalServiceRequest, InternalServiceResponse, PeerSessionInformation, SessionInformation, diff --git a/citadel-internal-service/src/kernel/requests/group/create.rs b/citadel-internal-service/src/kernel/requests/group/create.rs index 7916762..6c55822 100644 --- a/citadel-internal-service/src/kernel/requests/group/create.rs +++ b/citadel-internal-service/src/kernel/requests/group/create.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::{spawn_group_channel_receiver, HandledRequestResult}; use crate::kernel::{CitadelWorkspaceService, GroupConnection}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupCreateFailure, GroupCreateSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/group/end.rs b/citadel-internal-service/src/kernel/requests/group/end.rs index c7d512f..8e655dd 100644 --- a/citadel-internal-service/src/kernel/requests/group/end.rs +++ b/citadel-internal-service/src/kernel/requests/group/end.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupEndFailure, GroupEndSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/group/group_list_groups.rs b/citadel-internal-service/src/kernel/requests/group/group_list_groups.rs index b661abc..7ff7e69 100644 --- a/citadel-internal-service/src/kernel/requests/group/group_list_groups.rs +++ b/citadel-internal-service/src/kernel/requests/group/group_list_groups.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupListGroupsFailure, GroupListGroupsSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/group/invite.rs b/citadel-internal-service/src/kernel/requests/group/invite.rs index b660c3e..7902b0f 100644 --- a/citadel-internal-service/src/kernel/requests/group/invite.rs +++ b/citadel-internal-service/src/kernel/requests/group/invite.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupInviteFailure, GroupInviteSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/group/kick.rs b/citadel-internal-service/src/kernel/requests/group/kick.rs index ba114f6..fead833 100644 --- a/citadel-internal-service/src/kernel/requests/group/kick.rs +++ b/citadel-internal-service/src/kernel/requests/group/kick.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupKickFailure, GroupKickSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/group/leave.rs b/citadel-internal-service/src/kernel/requests/group/leave.rs index 497b28c..ad8bc9f 100644 --- a/citadel-internal-service/src/kernel/requests/group/leave.rs +++ b/citadel-internal-service/src/kernel/requests/group/leave.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupLeaveFailure, GroupLeaveSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/group/message.rs b/citadel-internal-service/src/kernel/requests/group/message.rs index 60ab0b0..68cb7c6 100644 --- a/citadel-internal-service/src/kernel/requests/group/message.rs +++ b/citadel-internal-service/src/kernel/requests/group/message.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupMessageFailure, GroupMessageSuccess, InternalServiceRequest, InternalServiceResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/group/request_join.rs b/citadel-internal-service/src/kernel/requests/group/request_join.rs index 42e99d8..0e1d435 100644 --- a/citadel-internal-service/src/kernel/requests/group/request_join.rs +++ b/citadel-internal-service/src/kernel/requests/group/request_join.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupRequestJoinFailure, GroupRequestJoinSuccess, InternalServiceRequest, InternalServiceResponse, diff --git a/citadel-internal-service/src/kernel/requests/group/respond_request.rs b/citadel-internal-service/src/kernel/requests/group/respond_request.rs index 3a93d2b..296debf 100644 --- a/citadel-internal-service/src/kernel/requests/group/respond_request.rs +++ b/citadel-internal-service/src/kernel/requests/group/respond_request.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::{spawn_group_channel_receiver, HandledRequestResult}; use crate::kernel::{CitadelWorkspaceService, GroupConnection}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupRespondRequestFailure, GroupRespondRequestSuccess, InternalServiceRequest, InternalServiceResponse, diff --git a/citadel-internal-service/src/kernel/requests/local_db/clear_all_kv.rs b/citadel-internal-service/src/kernel/requests/local_db/clear_all_kv.rs index f19d144..7bf99e8 100644 --- a/citadel-internal-service/src/kernel/requests/local_db/clear_all_kv.rs +++ b/citadel-internal-service/src/kernel/requests/local_db/clear_all_kv.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, LocalDBClearAllKVFailure, LocalDBClearAllKVSuccess, diff --git a/citadel-internal-service/src/kernel/requests/local_db/delete_kv.rs b/citadel-internal-service/src/kernel/requests/local_db/delete_kv.rs index 25d222e..72e5e4f 100644 --- a/citadel-internal-service/src/kernel/requests/local_db/delete_kv.rs +++ b/citadel-internal-service/src/kernel/requests/local_db/delete_kv.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, LocalDBDeleteKVFailure, LocalDBDeleteKVSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/local_db/get_all_kv.rs b/citadel-internal-service/src/kernel/requests/local_db/get_all_kv.rs index a12a7f1..0f373c1 100644 --- a/citadel-internal-service/src/kernel/requests/local_db/get_all_kv.rs +++ b/citadel-internal-service/src/kernel/requests/local_db/get_all_kv.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, LocalDBGetAllKVFailure, LocalDBGetAllKVSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/local_db/get_kv.rs b/citadel-internal-service/src/kernel/requests/local_db/get_kv.rs index c0b29df..63a9ea1 100644 --- a/citadel-internal-service/src/kernel/requests/local_db/get_kv.rs +++ b/citadel-internal-service/src/kernel/requests/local_db/get_kv.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, LocalDBGetKVFailure, LocalDBGetKVSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/local_db/set_kv.rs b/citadel-internal-service/src/kernel/requests/local_db/set_kv.rs index 999b045..b0feb5e 100644 --- a/citadel-internal-service/src/kernel/requests/local_db/set_kv.rs +++ b/citadel-internal-service/src/kernel/requests/local_db/set_kv.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, LocalDBSetKVFailure, LocalDBSetKVSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/message.rs b/citadel-internal-service/src/kernel/requests/message.rs index c8fb7bf..362a013 100644 --- a/citadel-internal-service/src/kernel/requests/message.rs +++ b/citadel-internal-service/src/kernel/requests/message.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, MessageSendFailure, MessageSendSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/mod.rs b/citadel-internal-service/src/kernel/requests/mod.rs index 1ccefbe..806713b 100644 --- a/citadel-internal-service/src/kernel/requests/mod.rs +++ b/citadel-internal-service/src/kernel/requests/mod.rs @@ -4,7 +4,7 @@ use citadel_internal_service_types::*; use citadel_logging::info; use citadel_logging::tracing::log; -use crate::io_interface::IOInterface; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_sdk::prelude::*; use futures::StreamExt; use std::collections::HashMap; diff --git a/citadel-internal-service/src/kernel/requests/peer/connect.rs b/citadel-internal-service/src/kernel/requests/peer/connect.rs index 715e1ed..1f92b14 100644 --- a/citadel-internal-service/src/kernel/requests/peer/connect.rs +++ b/citadel-internal-service/src/kernel/requests/peer/connect.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, MessageNotification, PeerConnectFailure, PeerConnectSuccess, diff --git a/citadel-internal-service/src/kernel/requests/peer/disconnect.rs b/citadel-internal-service/src/kernel/requests/peer/disconnect.rs index 7b72802..791484e 100644 --- a/citadel-internal-service/src/kernel/requests/peer/disconnect.rs +++ b/citadel-internal-service/src/kernel/requests/peer/disconnect.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, PeerDisconnectFailure, PeerDisconnectSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/peer/list_all.rs b/citadel-internal-service/src/kernel/requests/peer/list_all.rs index 089c44c..685df84 100644 --- a/citadel-internal-service/src/kernel/requests/peer/list_all.rs +++ b/citadel-internal-service/src/kernel/requests/peer/list_all.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, ListAllPeersFailure, ListAllPeersResponse, }; diff --git a/citadel-internal-service/src/kernel/requests/peer/list_registered.rs b/citadel-internal-service/src/kernel/requests/peer/list_registered.rs index 5ab4632..064b0c7 100644 --- a/citadel-internal-service/src/kernel/requests/peer/list_registered.rs +++ b/citadel-internal-service/src/kernel/requests/peer/list_registered.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::HandledRequestResult; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, ListRegisteredPeersFailure, ListRegisteredPeersResponse, PeerSessionInformation, diff --git a/citadel-internal-service/src/kernel/requests/peer/register.rs b/citadel-internal-service/src/kernel/requests/peer/register.rs index 64f2573..ab24c07 100644 --- a/citadel-internal-service/src/kernel/requests/peer/register.rs +++ b/citadel-internal-service/src/kernel/requests/peer/register.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::{handle_request, HandledRequestResult}; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, PeerRegisterFailure, PeerRegisterSuccess, }; diff --git a/citadel-internal-service/src/kernel/requests/register.rs b/citadel-internal-service/src/kernel/requests/register.rs index 94aa96f..78b7599 100644 --- a/citadel-internal-service/src/kernel/requests/register.rs +++ b/citadel-internal-service/src/kernel/requests/register.rs @@ -1,6 +1,6 @@ -use crate::io_interface::IOInterface; use crate::kernel::requests::{handle_request, HandledRequestResult}; use crate::kernel::CitadelWorkspaceService; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{InternalServiceRequest, InternalServiceResponse}; use citadel_logging::info; use citadel_sdk::prelude::ProtocolRemoteExt; diff --git a/citadel-internal-service/src/kernel/responses/disconnect.rs b/citadel-internal-service/src/kernel/responses/disconnect.rs index a3263c8..0904c50 100644 --- a/citadel-internal-service/src/kernel/responses/disconnect.rs +++ b/citadel-internal-service/src/kernel/responses/disconnect.rs @@ -1,5 +1,5 @@ -use crate::io_interface::IOInterface; use crate::kernel::{send_response_to_tcp_client, CitadelWorkspaceService}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{DisconnectNotification, InternalServiceResponse}; use citadel_sdk::prelude::{Disconnect, NetworkError, VirtualTargetType}; diff --git a/citadel-internal-service/src/kernel/responses/group_channel_created.rs b/citadel-internal-service/src/kernel/responses/group_channel_created.rs index 6503337..4273202 100644 --- a/citadel-internal-service/src/kernel/responses/group_channel_created.rs +++ b/citadel-internal-service/src/kernel/responses/group_channel_created.rs @@ -1,7 +1,7 @@ -use crate::io_interface::IOInterface; use crate::kernel::{ requests, send_response_to_tcp_client, CitadelWorkspaceService, GroupConnection, }; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{GroupChannelCreateSuccess, InternalServiceResponse}; use citadel_sdk::prelude::{GroupChannelCreated, NetworkError}; diff --git a/citadel-internal-service/src/kernel/responses/group_event.rs b/citadel-internal-service/src/kernel/responses/group_event.rs index 3b67486..7a9322e 100644 --- a/citadel-internal-service/src/kernel/responses/group_event.rs +++ b/citadel-internal-service/src/kernel/responses/group_event.rs @@ -1,5 +1,5 @@ -use crate::io_interface::IOInterface; use crate::kernel::{send_response_to_tcp_client, CitadelWorkspaceService}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ GroupDisconnectNotification, GroupEndNotification, GroupInviteNotification, GroupJoinRequestNotification, GroupLeaveNotification, GroupMemberStateChangeNotification, diff --git a/citadel-internal-service/src/kernel/responses/mod.rs b/citadel-internal-service/src/kernel/responses/mod.rs index 7e19e06..8ea7f24 100644 --- a/citadel-internal-service/src/kernel/responses/mod.rs +++ b/citadel-internal-service/src/kernel/responses/mod.rs @@ -1,6 +1,6 @@ use crate::kernel::CitadelWorkspaceService; -use crate::io_interface::IOInterface; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_logging::info; use citadel_sdk::prelude::{NetworkError, NodeResult}; diff --git a/citadel-internal-service/src/kernel/responses/object_transfer_handle.rs b/citadel-internal-service/src/kernel/responses/object_transfer_handle.rs index a85b340..90c5b20 100644 --- a/citadel-internal-service/src/kernel/responses/object_transfer_handle.rs +++ b/citadel-internal-service/src/kernel/responses/object_transfer_handle.rs @@ -1,5 +1,5 @@ -use crate::io_interface::IOInterface; use crate::kernel::{send_response_to_tcp_client, spawn_tick_updater, CitadelWorkspaceService}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{FileTransferRequestNotification, InternalServiceResponse}; use citadel_logging::info; use citadel_sdk::prelude::{NetworkError, ObjectTransferHandle, ObjectTransferOrientation}; diff --git a/citadel-internal-service/src/kernel/responses/peer_event.rs b/citadel-internal-service/src/kernel/responses/peer_event.rs index f739460..894dd4b 100644 --- a/citadel-internal-service/src/kernel/responses/peer_event.rs +++ b/citadel-internal-service/src/kernel/responses/peer_event.rs @@ -1,5 +1,5 @@ -use crate::io_interface::IOInterface; use crate::kernel::{send_response_to_tcp_client, CitadelWorkspaceService}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ DisconnectNotification, InternalServiceResponse, PeerConnectNotification, PeerRegisterNotification, diff --git a/citadel-internal-service/src/lib.rs b/citadel-internal-service/src/lib.rs index 897b429..c3af9f7 100644 --- a/citadel-internal-service/src/lib.rs +++ b/citadel-internal-service/src/lib.rs @@ -1,2 +1 @@ -pub mod io_interface; pub mod kernel; diff --git a/citadel-internal-service/tests/common/mod.rs b/citadel-internal-service/tests/common/mod.rs index 52e044c..5efd320 100644 --- a/citadel-internal-service/tests/common/mod.rs +++ b/citadel-internal-service/tests/common/mod.rs @@ -1,6 +1,7 @@ #![allow(dead_code)] use citadel_internal_service::kernel::CitadelWorkspaceService; -use citadel_internal_service_connector::util::{InternalServiceConnector, WrappedSink}; +use citadel_internal_service_connector::connector::{InternalServiceConnector, WrappedSink}; +use citadel_internal_service_connector::io_interface::IOInterface; use citadel_internal_service_types::{ FileTransferTickNotification, InternalServiceRequest, InternalServiceResponse, PeerConnectNotification, PeerConnectSuccess, PeerRegisterNotification, PeerRegisterSuccess, @@ -430,8 +431,8 @@ pub fn spawn_services(futures_to_spawn: Vec) { tokio::task::spawn(services_to_spawn); } -pub async fn send( - sink: &mut WrappedSink, +pub async fn send( + sink: &mut WrappedSink, command: InternalServiceRequest, ) -> Result<(), Box> { sink.send(command).await?; diff --git a/citadel-internal-service/tests/service.rs b/citadel-internal-service/tests/service.rs index 9f8158b..ec82efc 100644 --- a/citadel-internal-service/tests/service.rs +++ b/citadel-internal-service/tests/service.rs @@ -8,7 +8,7 @@ mod tests { spawn_services, test_kv_for_service, InternalServicesFutures, RegisterAndConnectItems, }; use citadel_internal_service::kernel::CitadelWorkspaceService; - use citadel_internal_service_connector::util::InternalServiceConnector; + use citadel_internal_service_connector::connector::InternalServiceConnector; use citadel_internal_service_types::{ InternalServiceRequest, InternalServiceResponse, MessageNotification, MessageSendSuccess, };