Skip to content

Commit 793df84

Browse files
committed
feat: connect client and server
1 parent 3fd30cb commit 793df84

File tree

4 files changed

+37
-35
lines changed

4 files changed

+37
-35
lines changed

.github/workflows/rust.yml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ${{ matrix.os }}
1414
strategy:
1515
matrix:
16-
build: [stable, beta, nightly, macos, windows, msrv]
16+
build: [stable, beta, nightly]
1717
include:
1818
- build: stable
1919
os: ubuntu-latest
@@ -24,15 +24,7 @@ jobs:
2424
- build: nightly
2525
os: ubuntu-latest
2626
rust: nightly
27-
- build: macos
28-
os: macos-latest
29-
rust: stable
30-
- build: windows
31-
os: windows-latest
32-
rust: stable
33-
- build: msrv
34-
os: ubuntu-latest
35-
rust: stable
27+
3628
steps:
3729
- uses: actions/checkout@master
3830
- name: Install Rust

src/bin/kvs-client.rs

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use clap::{crate_authors, crate_version, Clap};
2-
use kvs::common::KvsEngine;
3-
use kvs::kvs_store::KvStore;
4-
use std::{net::SocketAddr, path::Path, process};
2+
use kvs::client::Client;
3+
use std::{net::SocketAddr, process};
54
#[derive(Clap)]
65
#[clap(version =crate_version!() , author = crate_authors!())]
76
struct Options {
@@ -29,30 +28,38 @@ struct KeyValue {
2928
}
3029
fn main() {
3130
let opts = Options::parse();
32-
let mut kvs = KvStore::open(Path::new("./db")).unwrap();
3331
match opts.subcmd {
34-
SubCommand::Get(m) => match kvs.get(m.key) {
35-
Ok(Some(value)) => {
36-
println!("{}", value);
32+
SubCommand::Get(m) => {
33+
let mut client = Client::connect(m.addr).expect("cannot connect to server");
34+
match client.get(m.key) {
35+
Ok(Some(value)) => {
36+
println!("{}", value);
37+
}
38+
_ => {
39+
println!("Key not found");
40+
process::exit(0);
41+
}
3742
}
38-
_ => {
39-
println!("Key not found");
40-
process::exit(0);
43+
}
44+
SubCommand::RM(m) => {
45+
let mut client = Client::connect(m.addr).expect("cannot connect to server");
46+
match client.remove(m.key) {
47+
Ok(_) => {}
48+
_ => {
49+
eprintln!("Key not found");
50+
process::exit(-1);
51+
}
4152
}
42-
},
43-
SubCommand::RM(m) => match kvs.remove(m.key) {
44-
Ok(_) => {}
45-
_ => {
46-
eprintln!("Key not found");
47-
process::exit(-1);
53+
}
54+
SubCommand::Set(m) => {
55+
let mut client = Client::connect(m.addr).expect("cannot connect to server");
56+
match client.set(m.key, m.value) {
57+
Ok(_) => {}
58+
Err(e) => {
59+
println!("{}", e);
60+
process::exit(-1);
61+
}
4862
}
49-
},
50-
SubCommand::Set(m) => match kvs.set(m.key, m.value) {
51-
Ok(_) => {}
52-
Err(e) => {
53-
println!("{}", e);
54-
process::exit(-1);
55-
}
56-
},
63+
}
5764
}
5865
}

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
mod client;
1+
pub mod client;
22
pub mod common;
33
mod database;
44
pub mod error;

src/server.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::common::KvsEngine;
22
use crate::error::Result;
33
use crate::net::{Request, Response};
4+
use crate::thread_pool::{QueueThreadPool, ThreadPool};
45
use serde_json::Deserializer;
56
use slog::{debug, error, info, Logger};
67
use std::io::{BufReader, BufWriter, Write};
@@ -15,12 +16,14 @@ impl<T: KvsEngine> Server<T> {
1516
}
1617

1718
pub fn serve(&mut self, addr: &SocketAddr, logger: &Logger) -> Result<()> {
19+
let pool = QueueThreadPool::new(10)?;
1820
let listener = TcpListener::bind(addr)?;
1921
for stream in listener.incoming() {
2022
self.handle_client(stream?, logger)?;
2123
}
2224
Ok(())
2325
}
26+
2427
fn handle_client(&mut self, stream: TcpStream, logger: &Logger) -> Result<()> {
2528
let peer_addr = stream.peer_addr()?;
2629
let reader = BufReader::new(&stream);

0 commit comments

Comments
 (0)