use std::net; use std::ops::{Deref, DerefMut}; use nakamoto::LocalTime; use nakamoto_net as nakamoto; use nakamoto_net::{Io, Link}; use crate::address; use crate::collections::HashMap; use crate::crypto; use crate::service::routing; use crate::service::{Command, DisconnectReason, Event, Service}; use crate::storage::WriteStorage; use crate::wire::Wire; #[derive(Debug)] struct Peer { _addr: net::SocketAddr, } #[derive(Debug)] pub struct Transport { _peers: HashMap, inner: Wire, } impl Transport { pub fn new(inner: Wire) -> Self { Self { _peers: HashMap::default(), inner, } } } impl nakamoto::Protocol for Transport where R: routing::Store, T: WriteStorage + 'static, S: address::Store, G: crypto::Signer, { type Event = Event; type Command = Command; type DisconnectReason = DisconnectReason; fn initialize(&mut self, time: LocalTime) { self.inner.initialize(time) } fn tick(&mut self, now: nakamoto::LocalTime) { self.inner.tick(now) } fn wake(&mut self) { self.inner.wake() } fn command(&mut self, cmd: Self::Command) { self.inner.command(cmd) } fn attempted(&mut self, addr: &std::net::SocketAddr) { self.inner.attempted(addr) } fn connected( &mut self, addr: std::net::SocketAddr, local_addr: &std::net::SocketAddr, link: Link, ) { self.inner.connected(addr, local_addr, link) } fn disconnected( &mut self, addr: &std::net::SocketAddr, reason: nakamoto::DisconnectReason, ) { self.inner.disconnected(addr, reason) } fn received_bytes(&mut self, addr: &std::net::SocketAddr, bytes: &[u8]) { self.inner.received_bytes(addr, bytes) } } impl Iterator for Transport { type Item = Io; fn next(&mut self) -> Option { self.inner.next() } } impl Deref for Transport { type Target = Service; fn deref(&self) -> &Self::Target { &self.inner } } impl DerefMut for Transport { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner } }