📄 ملف 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 ثم مقارنتهما، مما يضمن أماناً وموثوقية عالية عند توصيل الخدمات.