use crate::ports::Port;
#[derive(Debug, Clone)]
pub enum MessageType {
Version,
VerAck,
GetBlocks,
GetHeaders,
Tx,
Block,
GetAddr,
Addr,
Ping,
Pong,
TaprootSigRequest,
TaprootSigResponse,
}
#[derive(Debug, Clone)]
pub struct Message {
message_type: MessageType,
payload: Vec<u8>,
}
#[derive(Default)]
pub struct P2PPort {
connected: bool,
peers: Vec<String>,
}
impl P2PPort {
pub fn new() -> Self {
P2PPort {
connected: false,
peers: Vec::new(),
}
}
pub fn connect(&mut self) -> Result<(), String> {
self.connected = true;
Ok(())
}
pub fn disconnect(&mut self) {
self.connected = false;
}
pub fn add_peer(&mut self, peer_address: String) {
self.peers.push(peer_address);
}
pub fn get_peers(&self) -> &[String] {
&self.peers
}
pub fn send_message(&self, _message: Message) -> Result<(), String> {
if !self.connected {
return Err("Not connected".to_string());
}
Ok(())
}
}
impl Port for P2PPort {
fn name(&self) -> &'static str {
"p2p"
}
fn version(&self) -> &'static str {
"1.0.0"
}
fn is_connected(&self) -> bool {
self.connected
}
}