diff --git a/src/runtime2/component/component_internet.rs b/src/runtime2/component/component_internet.rs index 8d2f67a13e88cf98e39c0edd0eddb4eb2043896c..decdae7dadc7d079f18c0af714a1f380dd820798 100644 --- a/src/runtime2/component/component_internet.rs +++ b/src/runtime2/component/component_internet.rs @@ -10,24 +10,24 @@ use super::consensus::*; use std::io::ErrorKind as IoErrorKind; -enum SocketState { +// ----------------------------------------------------------------------------- +// ComponentTcpClient +// ----------------------------------------------------------------------------- + +enum ClientSocketState { Connected(SocketTcpClient), Error, } -impl SocketState { +impl ClientSocketState { fn get_socket(&self) -> &SocketTcpClient { match self { - SocketState::Connected(v) => v, - SocketState::Error => unreachable!(), + ClientSocketState::Connected(v) => v, + ClientSocketState::Error => unreachable!(), } } } -// ----------------------------------------------------------------------------- -// ComponentTcpClient -// ----------------------------------------------------------------------------- - /// States from the point of view of the component that is connecting to this /// TCP component (i.e. from the point of view of attempting to interface with /// a socket). @@ -42,13 +42,14 @@ enum ClientSyncState { pub struct ComponentTcpClient { // Properties for the tcp socket - socket_state: SocketState, + socket_state: ClientSocketState, sync_state: ClientSyncState, poll_ticket: Option, inbox_main: InboxMain, inbox_backup: InboxBackup, pdl_input_port_id: PortId, // input from PDL, so transmitted over socket pdl_output_port_id: PortId, // output towards PDL, so received over socket + // Information about union tags, extracted from PDL input_union_send_tag_value: i64, input_union_receive_tag_value: i64, input_union_finish_tag_value: i64, @@ -76,7 +77,7 @@ impl Component for ComponentTcpClient { self.input_union_shutdown_tag_value = cmd_type.get_variant_tag_value(b"Shutdown").unwrap(); // Register socket for async events - if let SocketState::Connected(socket) = &self.socket_state { + if let ClientSocketState::Connected(socket) = &self.socket_state { let self_handle = sched_ctx.runtime.get_component_public(id); let poll_ticket = sched_ctx.polling.register(socket, self_handle, true, true) .expect("registering tcp component"); @@ -140,7 +141,7 @@ impl Component for ComponentTcpClient { CompMode::NonSync => { // When in non-sync mode match &mut self.socket_state { - SocketState::Connected(_socket) => { + ClientSocketState::Connected(_socket) => { if self.sync_state == ClientSyncState::FinishSyncThenQuit { // Previous request was to let the component shut down self.exec_state.set_as_start_exit(ExitReason::Termination); @@ -153,7 +154,7 @@ impl Component for ComponentTcpClient { } return CompScheduling::Immediate; }, - SocketState::Error => { + ClientSocketState::Error => { // Could potentially send an error message to the // connected component. self.exec_state.set_as_start_exit(ExitReason::ErrorNonSync); @@ -320,7 +321,7 @@ impl ComponentTcpClient { } return Self{ - socket_state: SocketState::Connected(socket.unwrap()), + socket_state: ClientSocketState::Connected(socket.unwrap()), sync_state: ClientSyncState::AwaitingCmd, poll_ticket: None, inbox_main: vec![None], @@ -389,3 +390,20 @@ impl ComponentTcpClient { // ComponentTcpListener // ----------------------------------------------------------------------------- +enum ListenerSocketState { + Connected(SocketTcpListener), + Error, +} + +pub struct ComponentTcpListener { + // Properties for the tcp socket + socket_state: ListenerSocketState, + poll_ticket: Option, + inbox_main: InboxMain, + inbox_backup: InboxBackup, + pdl_output_port_id: PortId, // output port, sends + // Information about union tags + output_struct_rx_index: i64, + output_struct_tx_index: i64, + // Generic component state +} \ No newline at end of file