cargo fmt

This commit is contained in:
serxoz 2022-09-26 11:59:53 +02:00
parent 952acda755
commit cb8b9790f0
9 changed files with 104 additions and 109 deletions

View File

@ -6,8 +6,6 @@ use std::env;
pub fn establish_connection() -> PgConnection {
dotenv().ok();
let database_url = env::var("DATABASE_URL")
.expect("DATABASE_URL must be set");
PgConnection::establish(&database_url)
.expect(&format!("Error connecting to {}", database_url))
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
PgConnection::establish(&database_url).expect(&format!("Error connecting to {}", database_url))
}

View File

@ -1,19 +1,19 @@
use std::{env, io};
use tokio::io::AsyncWriteExt;
use tokio::net::{TcpListener, TcpStream};
use std::{env, io};
pub mod database;
pub mod models;
pub mod npc;
pub mod objects;
pub mod player;
pub mod rlib;
pub mod rlocation;
pub mod player;
pub mod objects;
pub mod schema;
pub mod models;
pub mod database;
pub mod npc;
// use crate::player::Player;
use crate::rlib::set_player;
use crate::player::update_player;
use crate::rlib::set_player;
#[tokio::main]
async fn main() -> io::Result<()> {
@ -26,14 +26,14 @@ async fn main() -> io::Result<()> {
loop {
let (socket, _) = listener.accept().await?;
tokio::spawn(procesar_socket(socket)); // tokio::spawn """"abre un novo fío""""
tokio::spawn(procesar_socket(socket)); // tokio::spawn """"abre un novo fío""""
}
}
async fn procesar_socket(mut socket: TcpStream) -> io::Result<()> {
// intro
socket.write_all(b"\x1B[2J").await?; // clear screen
socket.write_all(b"\x1B[1;1H").await?; // position on 1,1
socket.write_all(b"\x1B[2J").await?; // clear screen
socket.write_all(b"\x1B[1;1H").await?; // position on 1,1
let banner = "\n\n\
\n\
@ -50,10 +50,13 @@ async fn procesar_socket(mut socket: TcpStream) -> io::Result<()> {
let mut output: String;
let mut player = set_player(&mut socket).await;
let intro = format!("Bienvenido {}. Vamos a empezar a jugar... \n\n\
let intro = format!(
"Bienvenido {}. Vamos a empezar a jugar... \n\n\
Despiertas en la oscuridad con un fuerte dolor de cabeza. \n\
Un fuerte sonido de alarma machaca tus oídos. No ayuda nada a tu dolor de cabeza. \n\
Qué vas a hacer?", player.nombre);
Qué vas a hacer?",
player.nombre
);
socket.write_all(intro.as_bytes()).await?;
// main loop

View File

@ -1,5 +1,5 @@
use diesel::prelude::*;
use crate::schema::*;
use diesel::prelude::*;
#[derive(Queryable)]
#[diesel(table_name = location)]

View File

@ -1,22 +1,19 @@
use crate::database::establish_connection;
use crate::models::*;
use diesel::prelude::*;
use crate::database::establish_connection;
//get_npc_here trae da base de datos o npc polo nome e a pegatina da sala actual
pub fn get_npc_here(pegatina: String, nome: String) -> Result<Rnpc, diesel::result::Error> {
use crate::schema::npc::dsl::*;
use crate::schema::npc::dsl::*;
let conn = &mut establish_connection();
npc
.filter(location.eq(pegatina))
npc.filter(location.eq(pegatina))
.filter(nombre.eq(nome))
.first(conn)
}
// get_npcs trae da base de datos todos os npcs de unha localización
// get_npcs trae da base de datos todos os npcs de unha localización
pub fn get_npcs(pegatina: String) -> Result<Vec<Rnpc>, diesel::result::Error> {
use crate::schema::npc::dsl::*;
use crate::schema::npc::dsl::*;
let conn = &mut establish_connection();
npc
.filter(location.eq(pegatina))
.get_results(conn)
npc.filter(location.eq(pegatina)).get_results(conn)
}

View File

@ -1,10 +1,10 @@
use crate::database::establish_connection;
use crate::models::RObject;
use diesel::prelude::*;
use crate::database::establish_connection;
//get_object trae da base de datos un obxeto pola sua pegatina
//get_object trae da base de datos un obxeto pola sua pegatina
pub fn get_object(pegatina: String) -> Result<RObject, diesel::result::Error> {
use crate::schema::object::dsl::*;
use crate::schema::object::dsl::*;
let conn = &mut establish_connection();
object
.filter(tipo.eq("item"))
@ -12,9 +12,9 @@ pub fn get_object(pegatina: String) -> Result<RObject, diesel::result::Error> {
.first(conn)
}
// get_objects trae da base de datos todos os obxetos de unha localización
// get_objects trae da base de datos todos os obxetos de unha localización
pub fn get_objects(pegatina: String) -> Result<Vec<RObject>, diesel::result::Error> {
use crate::schema::object::dsl::*;
use crate::schema::object::dsl::*;
let conn = &mut establish_connection();
object
.filter(tipo.eq("item"))
@ -24,7 +24,7 @@ pub fn get_objects(pegatina: String) -> Result<Vec<RObject>, diesel::result::Err
//get_object_here trae da base de datos o obxeto polo nome e a pegatina da sala actual
pub fn get_object_here(pegatina: String, nome: String) -> Result<RObject, diesel::result::Error> {
use crate::schema::object::dsl::*;
use crate::schema::object::dsl::*;
let conn = &mut establish_connection();
object
.filter(location.eq(pegatina))
@ -33,8 +33,11 @@ pub fn get_object_here(pegatina: String, nome: String) -> Result<RObject, diesel
}
// actualiza a localización de un obxeto, devolve o número de rows afectados
pub fn update_object_location(pegatina: String, new_location: String) -> Result<usize, diesel::result::Error> {
use crate::schema::object::dsl::*;
pub fn update_object_location(
pegatina: String,
new_location: String,
) -> Result<usize, diesel::result::Error> {
use crate::schema::object::dsl::*;
// println!("{} {}", pegatina, new_location);
let conn = &mut establish_connection();
diesel::update(object.filter(tag.eq(pegatina)))
@ -43,17 +46,20 @@ pub fn update_object_location(pegatina: String, new_location: String) -> Result<
}
// actualiza as condiciós de un obxeto, devolve o número de rows afectados
pub fn update_object_conditions(pegatina: String, cond: Vec<Option<String>>) -> Result<usize, diesel::result::Error> {
use crate::schema::object::dsl::*;
pub fn update_object_conditions(
pegatina: String,
cond: Vec<Option<String>>,
) -> Result<usize, diesel::result::Error> {
use crate::schema::object::dsl::*;
let conn = &mut establish_connection();
diesel::update(object.filter(tag.eq(pegatina)))
.set(condiciones.eq(cond))
.execute(conn)
}
// get_salidas trae da base de datos todos os obxetos salida de unha localización
// get_salidas trae da base de datos todos os obxetos salida de unha localización
pub fn get_salidas(pegatina: String) -> Result<Vec<RObject>, diesel::result::Error> {
use crate::schema::object::dsl::*;
use crate::schema::object::dsl::*;
let conn = &mut establish_connection();
object
.filter(tipo.eq("salida"))
@ -63,7 +69,7 @@ pub fn get_salidas(pegatina: String) -> Result<Vec<RObject>, diesel::result::Err
//get_salidas_here trae da base de datos a salida polo nome e a pegatina da sala actual
pub fn get_salidas_here(pegatina: String, nome: String) -> Result<RObject, diesel::result::Error> {
use crate::schema::object::dsl::*;
use crate::schema::object::dsl::*;
let conn = &mut establish_connection();
object
.filter(tipo.eq("salida"))
@ -71,4 +77,3 @@ pub fn get_salidas_here(pegatina: String, nome: String) -> Result<RObject, diese
.filter(nombre.eq(nome))
.first(conn)
}

View File

@ -1,22 +1,22 @@
use crate::objects::{get_objects, get_object_here, update_object_location, update_object_conditions};
use crate::models::Player;
use crate::database::establish_connection;
use diesel::prelude::*;
use crate::models::Player;
use crate::npc::get_npc_here;
use crate::objects::{
get_object_here, get_objects, update_object_conditions, update_object_location,
};
use diesel::prelude::*;
use rand::Rng;
// get_player le o xogador polo nick
pub fn get_player(nome: String) -> Result<Player, diesel::result::Error> {
use crate::schema::player::dsl::*;
use crate::schema::player::dsl::*;
let conn = &mut establish_connection();
player
.filter(nombre.eq(nome))
.first(conn)
player.filter(nombre.eq(nome)).first(conn)
}
// create_player garda o xogador
pub fn create_player(newplayer: &Player) -> Result<usize, diesel::result::Error> {
use crate::schema::player;
pub fn create_player(newplayer: &Player) -> Result<usize, diesel::result::Error> {
use crate::schema::player;
let conn = &mut establish_connection();
diesel::insert_into(player::table)
@ -26,17 +26,17 @@ pub fn create_player(newplayer: &Player) -> Result<usize, diesel::result::Error>
// update_player actualiza o xogador
pub fn update_player(newplayer: &Player) -> Result<usize, diesel::result::Error> {
use crate::schema::player::dsl::*; // para ter o find no update
use crate::schema::player::dsl::*; // para ter o find no update
let conn = &mut establish_connection();
// FIXME: actualiza todos os rows...
diesel::update(player::find(player, &newplayer.tag))
.set(newplayer) // co trait AsChangeSet podese actualizar a struct enteira
.set(newplayer) // co trait AsChangeSet podese actualizar a struct enteira
.execute(conn)
}
// execute_search mostra os obxetos na ubicación do xogador
pub fn execute_search(player: &mut Player) -> String {
pub fn execute_search(player: &mut Player) -> String {
let mut output: String;
let current = &player.location;
let objetos = get_objects(current.to_string());
@ -44,9 +44,9 @@ pub fn execute_search(player: &mut Player) -> String {
if objetos.is_ok() && objetos.as_ref().unwrap().len() > 0 {
output = String::from("En esta sala encuentras:\n");
for objeto in objetos.unwrap() {
let mut nombre = objeto.nombre;
nombre.push_str("\n");
output.push_str(&nombre);
let mut nombre = objeto.nombre;
nombre.push_str("\n");
output.push_str(&nombre);
}
} else {
output = String::from("No encuentras ningún objeto en esta sala.")
@ -64,9 +64,9 @@ pub fn execute_inventory(player: &mut Player) -> String {
if objetos.is_ok() && objetos.as_ref().unwrap().len() > 0 {
output = String::from("Portas los siguientes objetos:\n");
for objeto in objetos.unwrap() {
let mut nombre = objeto.nombre;
nombre.push_str("\n");
output.push_str(&nombre);
let mut nombre = objeto.nombre;
nombre.push_str("\n");
output.push_str(&nombre);
}
} else {
output = String::from("No portas ningún objeto.")
@ -76,15 +76,14 @@ pub fn execute_inventory(player: &mut Player) -> String {
}
// execute_pick recolle un obxeto
pub fn execute_pick(player: &mut Player, nombre: &str) -> String {
pub fn execute_pick(player: &mut Player, nombre: &str) -> String {
let output: String;
let location = &player.location;
let obxeto = get_object_here(location.to_string(), nombre.to_string());
if obxeto.is_ok() {
let res = update_object_location(
obxeto.as_ref().unwrap().tag.clone(),
player.tag.to_string());
let res =
update_object_location(obxeto.as_ref().unwrap().tag.clone(), player.tag.to_string());
if res.is_ok() && res.unwrap() > 0 {
output = format!("{} ahora está en tu inventario.", obxeto.unwrap().nombre);
@ -107,7 +106,8 @@ pub fn execute_drop(player: &mut Player, nombre: &str) -> String {
if obxeto.is_ok() {
let res = update_object_location(
obxeto.as_ref().unwrap().tag.clone(),
player.location.to_string()); //tirao aquí
player.location.to_string(),
); //tirao aquí
if res.is_ok() && res.unwrap() > 0 {
output = format!("Tiras {}.", obxeto.unwrap().nombre);
@ -123,7 +123,7 @@ pub fn execute_drop(player: &mut Player, nombre: &str) -> String {
// execute_kill intenta matar un npc
pub fn execute_kill(player: &mut Player, nombre: &str) -> String {
let mut output= String::from("");
let mut output = String::from("");
let location = &player.location;
let npc = get_npc_here(location.to_string(), nombre.to_string());
@ -136,7 +136,10 @@ pub fn execute_kill(player: &mut Player, nombre: &str) -> String {
if tohit >= malo.ca {
let damage = rand::thread_rng().gen_range(1..6);
malo.hp = malo.hp - damage;
let tmp = format!("Golpeas a {} por {} de daño, le quedan {} pg.", malo.nombre, damage, malo.hp);
let tmp = format!(
"Golpeas a {} por {} de daño, le quedan {} pg.",
malo.nombre, damage, malo.hp
);
output = format!("{}\n{}", output, tmp);
} else {
let tmp = format!("No consigues golpear a {}.", malo.nombre);
@ -148,13 +151,16 @@ pub fn execute_kill(player: &mut Player, nombre: &str) -> String {
if tohit >= player.ca {
let damage = rand::thread_rng().gen_range(1..6);
player.hp = player.hp - damage;
let tmp = format!("{} te golpea por {} de daño, te quedan {} pg.", malo.nombre, damage, player.hp);
let tmp = format!(
"{} te golpea por {} de daño, te quedan {} pg.",
malo.nombre, damage, player.hp
);
output = format!("{}\n{}", output, tmp);
} else {
let tmp = format!("{} no consigue herirte.", malo.nombre);
output = format!("{}\n{}", output, tmp);
}
print!("{}",output); //FIXME si saco esto, non o concatena coa salida
print!("{}", output); //FIXME si saco esto, non o concatena coa salida
}
let resolucion: String;
@ -166,7 +172,6 @@ pub fn execute_kill(player: &mut Player, nombre: &str) -> String {
resolucion = String::from("No se que ha pasado. Alguien debería estar muerto.");
}
output = format!("{}\n{}", output, resolucion);
} else {
output = String::from("No encuentro lo que quieres matar.");
}

View File

@ -1,8 +1,8 @@
use tokio::net::TcpStream;
use tokio::io::{AsyncReadExt,AsyncWriteExt};
use crate::rlocation::{execute_go, execute_look};
use crate::player::*;
use crate::models::Player;
use crate::player::*;
use crate::rlocation::{execute_go, execute_look};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::TcpStream;
use uuid::Uuid;
pub struct Command {
@ -28,15 +28,15 @@ impl Command {
pub async fn set_player(socket: &mut TcpStream) -> Player {
// prompt
socket.write_all(b"\n").await.unwrap();
socket.write_all("Cuál es tu nombre?\n".as_bytes()).await.unwrap();
socket.write_all(b"\n").await.unwrap();
socket
.write_all("Cuál es tu nombre?\n".as_bytes())
.await
.unwrap();
socket.write_all(b"> ").await.unwrap();
let mut buf = vec![0; 1024];
let n = socket
.read(&mut buf)
.await
.unwrap();
let n = socket.read(&mut buf).await.unwrap();
let input_str = String::from_utf8(buf[0..n].to_vec()).unwrap();
@ -52,7 +52,7 @@ pub async fn set_player(socket: &mut TcpStream) -> Player {
if check_player.is_ok() {
player = check_player.unwrap();
} else {
player = Player{
player = Player {
tag: Uuid::new_v4().to_string(),
nombre: nick.to_string(),
descripcion: "humano, equipo básico".to_string(),
@ -71,14 +71,11 @@ pub async fn set_player(socket: &mut TcpStream) -> Player {
pub async fn get_input(socket: &mut TcpStream) -> Command {
// prompt
socket.write_all(b"\n").await.unwrap();
socket.write_all(b"\n").await.unwrap();
socket.write_all(b"> ").await.unwrap();
let mut buf = vec![0; 1024];
let n = socket
.read(&mut buf)
.await
.unwrap();
let n = socket.read(&mut buf).await.unwrap();
let input_str = String::from_utf8(buf[0..n].to_vec()).unwrap();

View File

@ -1,10 +1,9 @@
use crate::objects::{get_salidas, get_object_here, get_salidas_here};
use crate::npc::{get_npc_here, get_npcs};
use crate::objects::{get_object_here, get_salidas, get_salidas_here};
use crate::database::establish_connection;
use crate::models::*;
use diesel::prelude::*;
use crate::database::establish_connection;
pub fn execute_look(player: &mut Player, nombre: &str) -> String {
let mut output: String;
@ -21,10 +20,10 @@ pub fn execute_look(player: &mut Player, nombre: &str) -> String {
if salidas.is_ok() && salidas.as_ref().unwrap().len() > 0 {
output.push_str("\nSalidas:\n");
for salidas in salidas.unwrap() {
let mut nombre = "- ".to_string();
nombre.push_str(&salidas.nombre);
nombre.push_str("\n");
output.push_str(&nombre);
let mut nombre = "- ".to_string();
nombre.push_str(&salidas.nombre);
nombre.push_str("\n");
output.push_str(&nombre);
}
}
@ -34,13 +33,12 @@ pub fn execute_look(player: &mut Player, nombre: &str) -> String {
if npcs.is_ok() && npcs.as_ref().unwrap().len() > 0 {
output.push_str("\nTambién ves:\n");
for npc in npcs.as_ref().unwrap() {
let mut nombre = "- ".to_string();
nombre.push_str(&npc.nombre);
nombre.push_str("\n");
output.push_str(&nombre);
let mut nombre = "- ".to_string();
nombre.push_str(&npc.nombre);
nombre.push_str("\n");
output.push_str(&nombre);
}
}
} else {
output = String::from("Navengado el ether!");
}
@ -62,7 +60,7 @@ pub fn execute_look(player: &mut Player, nombre: &str) -> String {
output = String::from("Qué quieres mirar?");
}
return output
return output;
}
pub fn execute_go(player: &mut Player, coord: &str) -> String {
@ -82,7 +80,7 @@ pub fn execute_go(player: &mut Player, coord: &str) -> String {
"oeste" => nombre = "oeste".to_string(),
"arriba" => nombre = "arriba".to_string(),
"abajo" => nombre = "abajo".to_string(),
_ => nombre = "".to_string(),
_ => nombre = "".to_string(),
}
let tag: String;
@ -106,7 +104,6 @@ pub fn execute_go(player: &mut Player, coord: &str) -> String {
} else {
output = String::from("No existe esa salida.");
}
} else {
output = String::from("No entiendo a donde quieres ir. Debes elegir una coordenada correspondiente a las salidas de esta sala.");
}
@ -116,9 +113,7 @@ pub fn execute_go(player: &mut Player, coord: &str) -> String {
// get_location busca na base de datos a localización polo seu tag
pub fn get_location(pegatina: String) -> Result<RLocation, diesel::result::Error> {
use crate::schema::location::dsl::*;
use crate::schema::location::dsl::*;
let conn = &mut establish_connection();
location
.filter(tag.eq(pegatina))
.first(conn)
location.filter(tag.eq(pegatina)).first(conn)
}

View File

@ -45,9 +45,4 @@ diesel::table! {
}
}
diesel::allow_tables_to_appear_in_same_query!(
location,
npc,
object,
player,
);
diesel::allow_tables_to_appear_in_same_query!(location, npc, object, player,);