relay-man 0.2.5

Peer to peer library
Documentation
use bytes_kman::TBytes;

use crate::common::packets::{NewRequestResponse, Packets, RequestResponse};

use super::{ClientStage, Connecting, RelayServer};

impl RelayServer {
    pub(crate) fn on_request_response(&mut self, index: usize, request_response: RequestResponse) {
        let mut to = None;
        for client in self.clients.iter() {
            if let ClientStage::Registered(rclient) = &client.stage {
                if rclient.adress == request_response.to {
                    for session in rclient.to_connect.iter() {
                        if session.session() == request_response.session {
                            to = Some(client.session);
                            break;
                        }
                    }
                }
            } else {
                return;
            }
        }

        let mut from = None;
        let mut uid = None;
        if let Some(client) = self.clients.get(index) {
            if let ClientStage::Registered(rclient) = &client.stage {
                from = Some(rclient.adress.clone());
                uid = Some(client.session);
            } else {
                return;
            }
        }

        let Some(from) = from else {return};
        let Some(to) = to else {return};
        let Some(uid) = uid else {return};

        for client in self.clients.iter_mut() {
            if let ClientStage::Registered(rclient) = &mut client.stage {
                if rclient.adress == request_response.to {
                    let pak = NewRequestResponse {
                        session: client.session,
                        from,
                        accepted: request_response.accepted,
                        secret: request_response.secret,
                    };
                    let mut bytes = Packets::NewRequestResponse(pak).to_bytes();
                    bytes.reverse();
                    let _ = client.conn.send(&bytes);
                    break;
                }
            }
        }

        if request_response.accepted {
            if let Some(client) = self.clients.get_mut(index) {
                if let ClientStage::Registered(rclient) = &mut client.stage {
                    rclient.to_connect.push(Connecting::Start(to))
                }
            }
        } else {
            for client in self.clients.iter_mut() {
                if let ClientStage::Registered(rclient) = &mut client.stage {
                    if client.session == to {
                        rclient
                            .to_connect
                            .retain(|to_conn| to_conn.session() != uid);
                        break;
                    }
                }
            }
        }
    }
}