Update backend protocol, skeleton backend project
This commit is contained in:
parent
78521f683e
commit
7c4d38549f
5 changed files with 98 additions and 2 deletions
1
back_end/Cargo.lock
generated
1
back_end/Cargo.lock
generated
|
@ -133,6 +133,7 @@ dependencies = [
|
||||||
name = "four_line_dropper_backend"
|
name = "four_line_dropper_backend"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"serde_json",
|
||||||
"tokio",
|
"tokio",
|
||||||
"warp",
|
"warp",
|
||||||
]
|
]
|
||||||
|
|
|
@ -8,3 +8,4 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
warp = "0.3"
|
warp = "0.3"
|
||||||
|
serde_json = "1.0"
|
||||||
|
|
48
back_end/src/json_handlers.rs
Normal file
48
back_end/src/json_handlers.rs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
use serde_json::Value;
|
||||||
|
|
||||||
|
pub fn handle_json(root: Value) -> Result<String, String> {
|
||||||
|
if let Some(Value::String(type_str)) = root.get("type") {
|
||||||
|
match type_str.as_str() {
|
||||||
|
"pairing_request" => handle_pairing_request(root),
|
||||||
|
"check_pairing" => handle_check_pairing(root),
|
||||||
|
"place_token" => handle_place_token(root),
|
||||||
|
"whose_turn" => handle_whose_turn(root),
|
||||||
|
"disconnect" => handle_disconnect(root),
|
||||||
|
"request_board_state" => handle_request_board_state(root),
|
||||||
|
"game_state" => handle_game_state(root),
|
||||||
|
_ => {
|
||||||
|
Err("{\"type\":\"invalid_type\"}".into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Err("{\"type\":\"invalid_json\"}".into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_pairing_request(root: Value) -> Result<String, String> {
|
||||||
|
Err("{\"type\":\"unimplemented\"}".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_check_pairing(root: Value) -> Result<String, String> {
|
||||||
|
Err("{\"type\":\"unimplemented\"}".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_place_token(root: Value) -> Result<String, String> {
|
||||||
|
Err("{\"type\":\"unimplemented\"}".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_whose_turn(root: Value) -> Result<String, String> {
|
||||||
|
Err("{\"type\":\"unimplemented\"}".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_disconnect(root: Value) -> Result<String, String> {
|
||||||
|
Err("{\"type\":\"unimplemented\"}".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_request_board_state(root: Value) -> Result<String, String> {
|
||||||
|
Err("{\"type\":\"unimplemented\"}".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_game_state(root: Value) -> Result<String, String> {
|
||||||
|
Err("{\"type\":\"unimplemented\"}".into())
|
||||||
|
}
|
|
@ -1,3 +1,24 @@
|
||||||
fn main() {
|
mod json_handlers;
|
||||||
println!("Hello, world!");
|
|
||||||
|
use serde_json::Value;
|
||||||
|
use warp::Filter;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let route = warp::body::content_length_limit(1024 * 32)
|
||||||
|
.and(warp::body::json())
|
||||||
|
.map(|json_value: Value| {
|
||||||
|
let result = json_handlers::handle_json(json_value);
|
||||||
|
if let Ok(result_str) = result {
|
||||||
|
result_str
|
||||||
|
} else if let Err(error_str) = result {
|
||||||
|
error_str
|
||||||
|
} else {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
warp::serve(route)
|
||||||
|
.run(([0,0,0,0], 1237))
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,3 +199,28 @@ of "opponent\_disconnected". Future requests will return "unknown\_id".
|
||||||
"status": "opponent_disconnected", // or "unknown_id"
|
"status": "opponent_disconnected", // or "unknown_id"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
8. Failure Response
|
||||||
|
|
||||||
|
When request "type" is not handled by the back-end, it returns with
|
||||||
|
"invalid\_type".
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"type": "invalid_type"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When JSON is missing a required value, it returns with "invalid\_json".
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"type": "invalid_json"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When the back-end hasn't yet implemented handling a specific type, it returns
|
||||||
|
"unimplemented".
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"type": "unimplemented"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in a new issue