diff --git a/network/abstract/src/lib.rs b/network/abstract/src/lib.rs index 9560461..3ecaa3b 100644 --- a/network/abstract/src/lib.rs +++ b/network/abstract/src/lib.rs @@ -6,7 +6,7 @@ pub trait Address: Sized { pub trait NetworkContext { type Address: Address; - fn run_ping_eventloop(ctx: impl ServersContext); + fn run_ping_eventloop(ctx: &mut impl ServersContext); } pub trait ServersContext { @@ -20,5 +20,5 @@ pub trait ServersContext { pub trait NetworkScope { type R; - fn run(self, network: impl NetworkContext) -> Self::R; + fn run(self, network: &mut impl NetworkContext) -> Self::R; } diff --git a/network/windows/src/entry_point.rs b/network/windows/src/entry_point.rs index 43586a4..8928571 100644 --- a/network/windows/src/entry_point.rs +++ b/network/windows/src/entry_point.rs @@ -1,9 +1,11 @@ use super::errors::throw_from_windows_err_code; +use crate::network_context::WinSocksContext; +use bgtu_networks_2_network_abstract::NetworkScope; use std::mem::uninitialized; +use windows::core::w; use windows::Win32::Networking::WinSock::{ SOCKET_ERROR, WSACleanup, WSADATA, WSAGetLastError, WSAStartup, }; -use bgtu_networks_2_network_abstract::NetworkScope; struct WinSocksDefer {} @@ -47,10 +49,9 @@ impl Drop for WinSocksDefer { } } - - -pub fn winsocks_scope_2_2(scope: impl NetworkScope) -> R { - let ws = WinSocksDefer::startup((2,2)); - scope.run(todo!()); - let _ = ws; +pub fn winsocks_scope_2_2(scope: S) -> S::R { + let ws = WinSocksDefer::startup((2, 2)); + let r = scope.run(&mut WinSocksContext {}); + drop(ws); + return r; } diff --git a/network/windows/src/lib.rs b/network/windows/src/lib.rs index 0b70039..65a86b1 100644 --- a/network/windows/src/lib.rs +++ b/network/windows/src/lib.rs @@ -4,5 +4,6 @@ mod task; mod eventloop; mod allocator; mod entry_point; +mod network_context; pub use entry_point::winsocks_scope_2_2; \ No newline at end of file diff --git a/network/windows/src/network_context.rs b/network/windows/src/network_context.rs new file mode 100644 index 0000000..b32a2b1 --- /dev/null +++ b/network/windows/src/network_context.rs @@ -0,0 +1,15 @@ +use bgtu_networks_2_network_abstract::{NetworkContext, ServersContext}; +use crate::address::WindowsAddressKnown; +use crate::eventloop::run_eventloop; + +pub(crate) struct WinSocksContext {} + +impl NetworkContext for WinSocksContext { + type Address = WindowsAddressKnown; + + fn run_ping_eventloop(ctx: &mut impl ServersContext) { + unsafe { + run_eventloop(ctx); + } + } +} \ No newline at end of file