diff options
| author | omagdy <omar.professional8777@gmail.com> | 2025-07-22 07:12:55 +0300 |
|---|---|---|
| committer | omagdy <omar.professional8777@gmail.com> | 2025-07-22 07:12:55 +0300 |
| commit | 257330132dacc2e754a858c342be1ef2a1105c8f (patch) | |
| tree | c3958d37ab411da866dbff1cbf06cfc73ec058b9 /src/main.rs | |
| parent | 7e7ad6f35e32810f2083c0a78afe1e38c1c9f5f0 (diff) | |
| download | redis-rust-257330132dacc2e754a858c342be1ef2a1105c8f.tar.xz redis-rust-257330132dacc2e754a858c342be1ef2a1105c8f.zip | |
feat: Configure listening port throught command line arguments
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/src/main.rs b/src/main.rs index e82527e..5fdd6c3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -57,37 +57,39 @@ fn handle_client(mut stream: TcpStream, cache: SharedCache, config: SharedConfig } fn main() -> std::io::Result<()> { - let listener = TcpListener::bind("127.0.0.1:6379").unwrap(); let cache: SharedCache = Arc::new(Mutex::new(HashMap::new())); let mut config: SharedConfig = Arc::new(None); - - spawn_cleanup_thread(cache.clone()); + let mut port = "6379".to_string(); match Config::new() { Ok(conf) => { if let Some(conf) = conf { let mut cache = cache.lock().unwrap(); + let dir = conf.dir.clone().unwrap_or("".to_string()); + let dbfilename = conf.dbfilename.clone().unwrap_or("".to_string()); + port = conf.port.clone().unwrap_or("6379".to_string()); + if let Ok(rdb_file) = RDBFile::read(dir, dbfilename) { + if let Some(rdb) = rdb_file { + let hash_table = &rdb.databases.get(&0).unwrap().hash_table; - let dir = conf.dir.clone().unwrap(); - let dbfilename = conf.dbfilename.clone().unwrap(); - if let Some(rdb_file) = RDBFile::read(dir, dbfilename).unwrap() { - let hash_table = &rdb_file.databases.get(&0).unwrap().hash_table; - - for (key, db_entry) in hash_table.iter() { - let value = match &db_entry.value { - RedisValue::String(data) => String::from_utf8(data.clone()).unwrap(), - RedisValue::Integer(data) => data.to_string(), - _ => { - unreachable!() - } - }; - let expires_at = if let Some(key_expiry) = &db_entry.expiry { - Some(key_expiry.timestamp) - } else { - None - }; - let cache_entry = CacheEntry { value, expires_at }; - cache.insert(String::from_utf8(key.clone()).unwrap(), cache_entry); + for (key, db_entry) in hash_table.iter() { + let value = match &db_entry.value { + RedisValue::String(data) => { + String::from_utf8(data.clone()).unwrap() + } + RedisValue::Integer(data) => data.to_string(), + _ => { + unreachable!() + } + }; + let expires_at = if let Some(key_expiry) = &db_entry.expiry { + Some(key_expiry.timestamp) + } else { + None + }; + let cache_entry = CacheEntry { value, expires_at }; + cache.insert(String::from_utf8(key.clone()).unwrap(), cache_entry); + } } } config = Arc::new(Some(conf)); @@ -99,6 +101,10 @@ fn main() -> std::io::Result<()> { } } + let listener = TcpListener::bind(format!("127.0.0.1:{}", port)).unwrap(); + + spawn_cleanup_thread(cache.clone()); + for stream in listener.incoming() { match stream { Ok(stream) => { |
