- add: utils library

- add: packet-service to handle game client packets
- fix: health check for database-service
- fix: health check for auth-service
This commit is contained in:
2024-12-09 23:10:26 -05:00
parent 20e86dd117
commit e5c961d1b4
25 changed files with 1176 additions and 120 deletions

View File

@@ -0,0 +1,31 @@
use std::collections::VecDeque;
use std::sync::Arc;
use tokio::sync::{Semaphore, Mutex};
const MAX_PACKET_SIZE: usize = 1024;
pub struct BufferPool {
buffers: Mutex<VecDeque<Vec<u8>>>,
sem: Semaphore,
}
impl BufferPool {
pub fn new(pool_size: usize) -> Arc<Self> {
Arc::new(Self {
buffers: Mutex::new((0..pool_size).map(|_| vec![0u8; MAX_PACKET_SIZE]).collect()),
sem: Semaphore::new(pool_size),
})
}
pub async fn acquire(&self) -> Option<Vec<u8>> {
let _ = self.sem.acquire().await.ok()?;
let mut buffers = self.buffers.lock().await;
buffers.pop_front()
}
pub async fn release(&self, buffer: Vec<u8>) {
let mut buffers = self.buffers.lock().await;
buffers.push_back(buffer);
self.sem.add_permits(1);
}
}