Skip to content

← العودة لمجلد init

📄 ملف registry.rs (مسجل الخدمات) ​

هذا الملف يمثل الذاكرة الحية لخادم init. يقوم بحفظ وتسجيل الخدمات ومنافذها بشكل سريع وفعال بدون أي حجز ديناميكي (No-Heap / Vec).

1. هيكل إدخال الخدمة (ServiceEntry) ​

rust
pub struct ServiceEntry {
    pub name:   [u8; 16],
    pub port:   usize,
    pub active: bool,
}

كل خدمة تُخزّن اسمها (كحد أقصى 16 بايت)، ورقم المنفذ الخاص بها، وحالتها (نشطة أم لا).

2. المسجل (ServiceRegistry) ​

يتم حجز مساحة لـ 16 خدمة بشكل مسبق وثابت (Static Allocation):

rust
pub struct ServiceRegistry {
    entries: [ServiceEntry; MAX_SERVICES], // MAX_SERVICES = 16
    count:   usize,
}

3. تقنية البحث (Lookup Match) ​

دالة البحث مصممة لتكون دقيقة جداً (Exact Match) لمنع التداخلات. إذا تم البحث عن log لن يتم إرجاع منفذ logger.

rust
pub fn lookup(&self, name: &[u8]) -> Option<usize> {
    let query_end = name.iter().position(|&b| b == 0).unwrap_or(name.len());
    let query = &name[..query_end.min(16)];

    self.entries[..self.count].iter().find(|e| {
        // ...
        stored == query // مطابقة تامة
    }).map(|e| e.port)
}

الدالة تقوم بقص الاسمين (المخزن والمطلوب) عند أول \0 ثم مقارنتهما، مما يضمن أماناً وموثوقية عالية عند توصيل الخدمات.

تم تطويره بحب بواسطة مجتمع Qtoom.