From c2f8993d07f50585e1cf68adbd8ee54dc4099683 Mon Sep 17 00:00:00 2001 From: ntr Date: Tue, 11 Sep 2018 23:04:17 +1000 Subject: [PATCH 1/5] diesel --- .cargo/config | 3 ++ .env | 1 + Cargo.toml | 2 ++ WORKLOG.md | 7 ++-- diesel.toml | 5 +++ migrations/.gitkeep | 0 .../down.sql | 6 ++++ .../up.sql | 36 +++++++++++++++++++ .../2018-09-11-113648_create_lobbies/down.sql | 1 + .../2018-09-11-113648_create_lobbies/up.sql | 6 ++++ src/combat.rs | 18 ++++++---- src/db.rs | 13 +++++++ src/lib.rs | 6 ++++ src/main.rs | 6 ++++ src/models.rs | 9 +++++ src/schema.rs | 8 +++++ 16 files changed, 119 insertions(+), 8 deletions(-) create mode 100755 .cargo/config create mode 100755 .env mode change 100644 => 100755 WORKLOG.md create mode 100644 diesel.toml create mode 100644 migrations/.gitkeep create mode 100644 migrations/00000000000000_diesel_initial_setup/down.sql create mode 100644 migrations/00000000000000_diesel_initial_setup/up.sql create mode 100755 migrations/2018-09-11-113648_create_lobbies/down.sql create mode 100755 migrations/2018-09-11-113648_create_lobbies/up.sql create mode 100755 src/db.rs create mode 100755 src/lib.rs create mode 100755 src/models.rs create mode 100755 src/schema.rs diff --git a/.cargo/config b/.cargo/config new file mode 100755 index 00000000..3c3311fc --- /dev/null +++ b/.cargo/config @@ -0,0 +1,3 @@ +[target.x86_64-pc-windows-msvc.gnu] +rustc-link-search = ["C:\\Program Files\\PostgreSQL\\pg96\\lib"] + diff --git a/.env b/.env new file mode 100755 index 00000000..f42f5c28 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +DATABASE_URL=postgres://cryps:craftbeer@localhost/cryps diff --git a/Cargo.toml b/Cargo.toml index edbb45ab..98351e3e 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,3 +11,5 @@ serde_derive = "1" serde_cbor = "0.9" ws = "*" env_logger = "*" +diesel = { version = "1.0.0", features = ["postgres", "uuid"] } +dotenv = "0.9.0" diff --git a/WORKLOG.md b/WORKLOG.md old mode 100644 new mode 100755 index 557cfdf9..65aaa642 --- a/WORKLOG.md +++ b/WORKLOG.md @@ -1,10 +1,13 @@ * Battling - * Cryp Serialisation - * RPC * Logins * Cryp Ownership * Matchmaking + * Lobbies + * Create + * Join + * Resolve * Stats + * Missions * Cryp Generation * diff --git a/diesel.toml b/diesel.toml new file mode 100644 index 00000000..92267c82 --- /dev/null +++ b/diesel.toml @@ -0,0 +1,5 @@ +# For documentation on how to configure this file, +# see diesel.rs/guides/configuring-diesel-cli + +[print_schema] +file = "src/schema.rs" diff --git a/migrations/.gitkeep b/migrations/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/migrations/00000000000000_diesel_initial_setup/down.sql b/migrations/00000000000000_diesel_initial_setup/down.sql new file mode 100644 index 00000000..a9f52609 --- /dev/null +++ b/migrations/00000000000000_diesel_initial_setup/down.sql @@ -0,0 +1,6 @@ +-- This file was automatically created by Diesel to setup helper functions +-- and other internal bookkeeping. This file is safe to edit, any future +-- changes will be added to existing projects as new migrations. + +DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass); +DROP FUNCTION IF EXISTS diesel_set_updated_at(); diff --git a/migrations/00000000000000_diesel_initial_setup/up.sql b/migrations/00000000000000_diesel_initial_setup/up.sql new file mode 100644 index 00000000..d68895b1 --- /dev/null +++ b/migrations/00000000000000_diesel_initial_setup/up.sql @@ -0,0 +1,36 @@ +-- This file was automatically created by Diesel to setup helper functions +-- and other internal bookkeeping. This file is safe to edit, any future +-- changes will be added to existing projects as new migrations. + + + + +-- Sets up a trigger for the given table to automatically set a column called +-- `updated_at` whenever the row is modified (unless `updated_at` was included +-- in the modified columns) +-- +-- # Example +-- +-- ```sql +-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW()); +-- +-- SELECT diesel_manage_updated_at('users'); +-- ``` +CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$ +BEGIN + EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s + FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl); +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$ +BEGIN + IF ( + NEW IS DISTINCT FROM OLD AND + NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at + ) THEN + NEW.updated_at := current_timestamp; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; diff --git a/migrations/2018-09-11-113648_create_lobbies/down.sql b/migrations/2018-09-11-113648_create_lobbies/down.sql new file mode 100755 index 00000000..62b267e6 --- /dev/null +++ b/migrations/2018-09-11-113648_create_lobbies/down.sql @@ -0,0 +1 @@ +DROP TABLE lobbies; \ No newline at end of file diff --git a/migrations/2018-09-11-113648_create_lobbies/up.sql b/migrations/2018-09-11-113648_create_lobbies/up.sql new file mode 100755 index 00000000..c0e4cd3e --- /dev/null +++ b/migrations/2018-09-11-113648_create_lobbies/up.sql @@ -0,0 +1,6 @@ +CREATE TABLE lobbies ( + id uuid PRIMARY KEY, + a uuid NOT NULL, + b uuid, + data bytea +); diff --git a/src/combat.rs b/src/combat.rs index f0c9a1a1..d10ffbc9 100755 --- a/src/combat.rs +++ b/src/combat.rs @@ -91,16 +91,22 @@ pub fn test_battle() { #[cfg(test)] mod tests { - use *; + use super::*; #[test] fn pve_test() { - // let player = Cryp::new() - // .named("ca phe sua da".to_string()) - // .level(2) - // .create(); + let player = Cryp::new() + .named("ca phe sua da".to_string()) + .level(2) + .create(); - // levelling(player); + levelling(player); + return; + } + + #[test] + fn battle_test() { + test_battle(); return; } diff --git a/src/db.rs b/src/db.rs new file mode 100755 index 00000000..e68f8bab --- /dev/null +++ b/src/db.rs @@ -0,0 +1,13 @@ +use diesel::prelude::*; +use diesel::pg::PgConnection; +use dotenv::dotenv; +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)) +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100755 index 00000000..fb094dc4 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,6 @@ +extern crate uuid; +#[macro_use] +extern crate diesel; + +pub mod schema; +pub mod models; diff --git a/src/main.rs b/src/main.rs index 8e1b515b..4db11083 100755 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,10 @@ extern crate uuid; extern crate ws; extern crate env_logger; +#[macro_use] +extern crate diesel; +extern crate dotenv; + extern crate serde; extern crate serde_cbor; #[macro_use] @@ -14,6 +18,8 @@ mod net; mod combat; mod skill; mod rpc; +mod schema; +mod models; use net::{start}; diff --git a/src/models.rs b/src/models.rs new file mode 100755 index 00000000..f60baece --- /dev/null +++ b/src/models.rs @@ -0,0 +1,9 @@ +use diesel::sql_types::{Uuid,Bytea}; + +#[derive(Queryable)] +pub struct Lobby { + pub id: Uuid, + pub a: Uuid, + pub b: Uuid, + pub data: Bytea, +} \ No newline at end of file diff --git a/src/schema.rs b/src/schema.rs new file mode 100755 index 00000000..49615c42 --- /dev/null +++ b/src/schema.rs @@ -0,0 +1,8 @@ +table! { + lobbies (id) { + id -> Uuid, + a -> Uuid, + b -> Nullable, + data -> Nullable, + } +} From 53f9dec6893eaf3b6d836f44f72b3eae2eabbb28 Mon Sep 17 00:00:00 2001 From: ntr Date: Wed, 12 Sep 2018 19:48:21 +1000 Subject: [PATCH 2/5] forget diesel --- Cargo.toml | 2 +- src/db.rs | 13 ---------- src/lib.rs | 28 +++++++++++++++++++-- src/main.rs | 1 + src/models.rs | 23 +++++++++++++---- src/net.rs | 33 +++++++++++++++++++++--- src/rpc.rs | 69 +++++++++++++++++++++++++++++++++------------------ src/schema.rs | 15 ++++++++--- src/user.rs | 30 ++++++++++++++++++++++ 9 files changed, 161 insertions(+), 53 deletions(-) delete mode 100755 src/db.rs create mode 100644 src/user.rs diff --git a/Cargo.toml b/Cargo.toml index 98351e3e..a8336f98 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,5 +11,5 @@ serde_derive = "1" serde_cbor = "0.9" ws = "*" env_logger = "*" -diesel = { version = "1.0.0", features = ["postgres", "uuid"] } +diesel = { version = "1.0.0", features = ["postgres", "uuid", "r2d2", "sqlite"] } dotenv = "0.9.0" diff --git a/src/db.rs b/src/db.rs deleted file mode 100755 index e68f8bab..00000000 --- a/src/db.rs +++ /dev/null @@ -1,13 +0,0 @@ -use diesel::prelude::*; -use diesel::pg::PgConnection; -use dotenv::dotenv; -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)) -} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index fb094dc4..983100e6 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,30 @@ +extern crate rand; extern crate uuid; +extern crate ws; +extern crate env_logger; + #[macro_use] extern crate diesel; +extern crate dotenv; -pub mod schema; -pub mod models; +extern crate serde; +extern crate serde_cbor; +#[macro_use] +extern crate serde_derive; + +mod schema; +mod models; + +mod cryp; +mod battle; +mod net; +mod combat; +mod skill; +mod rpc; +mod user; + +use net::{start}; + +fn main() { + start() +} diff --git a/src/main.rs b/src/main.rs index 4db11083..66cc97e5 100755 --- a/src/main.rs +++ b/src/main.rs @@ -20,6 +20,7 @@ mod skill; mod rpc; mod schema; mod models; +mod user; use net::{start}; diff --git a/src/models.rs b/src/models.rs index f60baece..fc3d7fd8 100755 --- a/src/models.rs +++ b/src/models.rs @@ -1,9 +1,22 @@ -use diesel::sql_types::{Uuid,Bytea}; +use diesel::sql_types::Blob; #[derive(Queryable)] pub struct Lobby { - pub id: Uuid, - pub a: Uuid, - pub b: Uuid, - pub data: Bytea, + pub id: String, + pub a: String, + pub b: String, + pub data: Blob, +} + +#[derive(Serialize, Queryable)] +pub struct User { + pub id: String, + pub name: String, +} + +#[derive(Insertable)] +#[table_name = "users"] +pub struct NewUser { + pub id: String, + pub name: String, } \ No newline at end of file diff --git a/src/net.rs b/src/net.rs index f8688ae4..8397a2cf 100755 --- a/src/net.rs +++ b/src/net.rs @@ -1,11 +1,21 @@ -use cryp::{generate}; use ws::{listen, Handler, Sender, Result, Message, Handshake, CloseCode, Error}; -use rpc::{Rpc,RpcMessage}; use serde_cbor::{to_vec}; +use diesel::prelude::*; +// use diesel::pg::PgConnection; +use diesel::r2d2::{Pool, ConnectionManager}; +use dotenv::dotenv; +use std::env; + +use cryp::{generate}; +use rpc::{Rpc,RpcMessage}; + +pub type DbPool = Pool>; + struct Server { out: Sender, rpc: Rpc, + db: DbPool, } impl Handler for Server { @@ -15,7 +25,8 @@ impl Handler for Server { } fn on_message(&mut self, msg: Message) -> Result<()> { - let reply = self.rpc.receive(msg); + let db = self.db.get().expect("unable to get db connection"); + let reply = self.rpc.receive(msg, db); println!("{:?}", reply); self.out.send(reply.unwrap()) } @@ -36,5 +47,19 @@ impl Handler for Server { } pub fn start() { - listen("127.0.0.1:40000", |out| { Server { out, rpc: Rpc {} } }).unwrap(); + // dotenv().ok(); + + // let database_url = env::var("DATABASE_URL") + // .expect("DATABASE_URL must be set"); + + let manager = ConnectionManager::::new("/var/cryps/cryps.db"); + + // let manager = ConnectionManager::PgConnection::establish(&database_url) + // .expect(&format!("Error connecting to {}", database_url)) + + let pool = Pool::builder() + .build(manager) + .expect("Failed to create pool."); + + listen("127.0.0.1:40000", |out| { Server { out, rpc: Rpc {}, db: pool.clone() } }).unwrap(); } \ No newline at end of file diff --git a/src/rpc.rs b/src/rpc.rs index 6f8bb352..a1281093 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -4,22 +4,13 @@ use serde_cbor::{from_slice}; use serde_cbor::error::Error as CborError; use cryp::generate; +use net::{DbPool}; +use user::{create}; pub struct Rpc; -#[derive(Debug,Clone,Serialize,Deserialize)] -struct GenerateMsg { - method: String, - params: GenerateParams, -} - -#[derive(Debug,Clone,Serialize,Deserialize)] -pub struct GenerateParams { - pub level: u8, -} - impl Rpc { - pub fn receive(&self, msg: Message) -> StdResult, RpcError> { + pub fn receive(&self, msg: Message, db: DbPool) -> StdResult, RpcError> { // consume the ws data into bytes let data = msg.into_data(); @@ -36,6 +27,13 @@ impl Rpc { Err(_) => Err(RpcError::Parse), } }, + "account_create" => { + match from_slice::(&data) { + Ok(v) => Ok(create(v.params, db)), + Err(_) => Err(RpcError::Parse), + } + }, + _ => Err(RpcError::UnknownMethod), } }, @@ -55,15 +53,38 @@ pub enum RpcError { UnknownMethod, } -#[cfg(test)] -mod tests { - use super::*; - use serde_cbor::to_vec; - #[test] - fn rpc_parse() { - let rpc = Rpc {}; - let msg = GenerateMsg { method: "cryp_generate".to_string(), params: GenerateParams { level: 64 } }; - let v = to_vec(&msg).unwrap(); - let received = rpc.receive(Message::Binary(v)); - } -} \ No newline at end of file +#[derive(Debug,Clone,Serialize,Deserialize)] +struct GenerateMsg { + method: String, + params: GenerateParams, +} + +#[derive(Debug,Clone,Serialize,Deserialize)] +pub struct GenerateParams { + pub level: u8, +} + +#[derive(Debug,Clone,Serialize,Deserialize)] +struct AccountCreateMsg { + method: String, + params: AccountCreateParams, +} + +#[derive(Debug,Clone,Serialize,Deserialize)] +pub struct AccountCreateParams { + pub name: String, +} + + +// #[cfg(test)] +// mod tests { +// use super::*; +// use serde_cbor::to_vec; +// #[test] +// fn rpc_parse() { +// let rpc = Rpc {}; +// let msg = GenerateMsg { method: "cryp_generate".to_string(), params: GenerateParams { level: 64 } }; +// let v = to_vec(&msg).unwrap(); +// let received = rpc.receive(Message::Binary(v)); +// } +// } \ No newline at end of file diff --git a/src/schema.rs b/src/schema.rs index 49615c42..8dfaf551 100755 --- a/src/schema.rs +++ b/src/schema.rs @@ -1,8 +1,15 @@ table! { lobbies (id) { - id -> Uuid, - a -> Uuid, - b -> Nullable, - data -> Nullable, + id -> Text, + a -> Text, + b -> Nullable, + data -> Nullable, + } +} + +table! { + users (id) { + id -> Text, + name -> Text, } } diff --git a/src/user.rs b/src/user.rs new file mode 100644 index 00000000..984188e6 --- /dev/null +++ b/src/user.rs @@ -0,0 +1,30 @@ +use uuid::Uuid; + +use diesel; +use diesel::prelude::*; + +use net::{DbPool}; +use rpc::{AccountCreateParams}; + +use models; +use schema; + +pub fn create(params: AccountCreateParams, db: DbPool) -> Vec { + let uuid = format!("{}", Uuid::new_v4()); + let new_user = models::NewUser { + id: uuid, + name: params.name, + }; + + let conn: &SqliteConnection = &db.get().unwrap(); + + let user = diesel::insert_into(users) + .values(&new_user) + .get_result(conn) + .expect("Error saving user"); + + match to_vec(&level_two) { + Ok(v) => v, + Err(e) => panic!("couldn't serialize cryp"), + } +} From 8a7e6ce2719ca5318fd789ea97f7220ff106e0b4 Mon Sep 17 00:00:00 2001 From: ntr Date: Wed, 12 Sep 2018 20:44:40 +1000 Subject: [PATCH 3/5] sqlite --- Cargo.toml | 8 ++++++-- diesel.toml | 5 ----- src/lib.rs | 30 ------------------------------ src/main.rs | 10 +++++----- src/models.rs | 22 ---------------------- src/net.rs | 26 ++++++++------------------ src/rpc.rs | 4 ++-- src/schema.rs | 15 --------------- src/user.rs | 37 ++++++++++++++++++------------------- 9 files changed, 39 insertions(+), 118 deletions(-) delete mode 100644 diesel.toml delete mode 100755 src/lib.rs delete mode 100755 src/models.rs delete mode 100755 src/schema.rs diff --git a/Cargo.toml b/Cargo.toml index a8336f98..ba15b57b 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,10 @@ serde = "1" serde_derive = "1" serde_cbor = "0.9" ws = "*" -env_logger = "*" -diesel = { version = "1.0.0", features = ["postgres", "uuid", "r2d2", "sqlite"] } + dotenv = "0.9.0" +env_logger = "*" + +r2d2 = "0.8.2" +r2d2_sqlite = "0.6" +rusqlite = { version = "0.14.0", features = ["bundled"] } diff --git a/diesel.toml b/diesel.toml deleted file mode 100644 index 92267c82..00000000 --- a/diesel.toml +++ /dev/null @@ -1,5 +0,0 @@ -# For documentation on how to configure this file, -# see diesel.rs/guides/configuring-diesel-cli - -[print_schema] -file = "src/schema.rs" diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100755 index 983100e6..00000000 --- a/src/lib.rs +++ /dev/null @@ -1,30 +0,0 @@ -extern crate rand; -extern crate uuid; -extern crate ws; -extern crate env_logger; - -#[macro_use] -extern crate diesel; -extern crate dotenv; - -extern crate serde; -extern crate serde_cbor; -#[macro_use] -extern crate serde_derive; - -mod schema; -mod models; - -mod cryp; -mod battle; -mod net; -mod combat; -mod skill; -mod rpc; -mod user; - -use net::{start}; - -fn main() { - start() -} diff --git a/src/main.rs b/src/main.rs index 66cc97e5..29b79bba 100755 --- a/src/main.rs +++ b/src/main.rs @@ -3,9 +3,11 @@ extern crate uuid; extern crate ws; extern crate env_logger; -#[macro_use] -extern crate diesel; -extern crate dotenv; +// #[macro_use] +// extern crate dotenv; +extern crate r2d2; +extern crate r2d2_sqlite; +extern crate rusqlite; extern crate serde; extern crate serde_cbor; @@ -18,8 +20,6 @@ mod net; mod combat; mod skill; mod rpc; -mod schema; -mod models; mod user; use net::{start}; diff --git a/src/models.rs b/src/models.rs deleted file mode 100755 index fc3d7fd8..00000000 --- a/src/models.rs +++ /dev/null @@ -1,22 +0,0 @@ -use diesel::sql_types::Blob; - -#[derive(Queryable)] -pub struct Lobby { - pub id: String, - pub a: String, - pub b: String, - pub data: Blob, -} - -#[derive(Serialize, Queryable)] -pub struct User { - pub id: String, - pub name: String, -} - -#[derive(Insertable)] -#[table_name = "users"] -pub struct NewUser { - pub id: String, - pub name: String, -} \ No newline at end of file diff --git a/src/net.rs b/src/net.rs index 8397a2cf..7e408557 100755 --- a/src/net.rs +++ b/src/net.rs @@ -1,21 +1,19 @@ use ws::{listen, Handler, Sender, Result, Message, Handshake, CloseCode, Error}; use serde_cbor::{to_vec}; -use diesel::prelude::*; -// use diesel::pg::PgConnection; -use diesel::r2d2::{Pool, ConnectionManager}; -use dotenv::dotenv; -use std::env; +use r2d2::{Pool}; +use r2d2::{PooledConnection}; +use r2d2_sqlite::{SqliteConnectionManager}; + +pub type Db = PooledConnection; use cryp::{generate}; use rpc::{Rpc,RpcMessage}; -pub type DbPool = Pool>; - struct Server { out: Sender, rpc: Rpc, - db: DbPool, + db: Pool, } impl Handler for Server { @@ -47,19 +45,11 @@ impl Handler for Server { } pub fn start() { - // dotenv().ok(); - - // let database_url = env::var("DATABASE_URL") - // .expect("DATABASE_URL must be set"); - - let manager = ConnectionManager::::new("/var/cryps/cryps.db"); - - // let manager = ConnectionManager::PgConnection::establish(&database_url) - // .expect(&format!("Error connecting to {}", database_url)) + let manager = SqliteConnectionManager::file("/var/cryps/cryps.db"); let pool = Pool::builder() .build(manager) .expect("Failed to create pool."); listen("127.0.0.1:40000", |out| { Server { out, rpc: Rpc {}, db: pool.clone() } }).unwrap(); -} \ No newline at end of file +} diff --git a/src/rpc.rs b/src/rpc.rs index a1281093..de1f440e 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -3,14 +3,14 @@ use ws::{Message}; use serde_cbor::{from_slice}; use serde_cbor::error::Error as CborError; +use net::Db; use cryp::generate; -use net::{DbPool}; use user::{create}; pub struct Rpc; impl Rpc { - pub fn receive(&self, msg: Message, db: DbPool) -> StdResult, RpcError> { + pub fn receive(&self, msg: Message, db: Db) -> StdResult, RpcError> { // consume the ws data into bytes let data = msg.into_data(); diff --git a/src/schema.rs b/src/schema.rs deleted file mode 100755 index 8dfaf551..00000000 --- a/src/schema.rs +++ /dev/null @@ -1,15 +0,0 @@ -table! { - lobbies (id) { - id -> Text, - a -> Text, - b -> Nullable, - data -> Nullable, - } -} - -table! { - users (id) { - id -> Text, - name -> Text, - } -} diff --git a/src/user.rs b/src/user.rs index 984188e6..9889ccaf 100644 --- a/src/user.rs +++ b/src/user.rs @@ -1,29 +1,28 @@ +use serde_cbor::to_vec; use uuid::Uuid; -use diesel; -use diesel::prelude::*; - -use net::{DbPool}; +use net::Db; use rpc::{AccountCreateParams}; -use models; -use schema; +struct User { + name: String, + id: Uuid, +} -pub fn create(params: AccountCreateParams, db: DbPool) -> Vec { - let uuid = format!("{}", Uuid::new_v4()); - let new_user = models::NewUser { - id: uuid, - name: params.name, - }; +pub fn create(params: AccountCreateParams, db: Db) -> Vec { + let uuid = Uuid::new_v4(); + let new_user = User { + id: uuid, + name: params.name, + }; - let conn: &SqliteConnection = &db.get().unwrap(); + db.execute(" + CREATE TABLE user ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + )", &[]).unwrap(); - let user = diesel::insert_into(users) - .values(&new_user) - .get_result(conn) - .expect("Error saving user"); - - match to_vec(&level_two) { + match to_vec(&true) { Ok(v) => v, Err(e) => panic!("couldn't serialize cryp"), } From 7db60975fa52c2ff44716a3f7710340a493a601e Mon Sep 17 00:00:00 2001 From: ntr Date: Wed, 12 Sep 2018 20:57:22 +1000 Subject: [PATCH 4/5] it works, but maybe back to diesel --- src/user.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/user.rs b/src/user.rs index 9889ccaf..63f2254c 100644 --- a/src/user.rs +++ b/src/user.rs @@ -11,16 +11,16 @@ struct User { pub fn create(params: AccountCreateParams, db: Db) -> Vec { let uuid = Uuid::new_v4(); - let new_user = User { + let user = User { id: uuid, name: params.name, }; - db.execute(" - CREATE TABLE user ( - id TEXT PRIMARY KEY, - name TEXT NOT NULL, - )", &[]).unwrap(); + let entry = db.execute("INSERT INTO users (id, name) + VALUES (?1, ?2)", + &[&user.id.to_string(), &user.name]).unwrap(); + + println!("{:?}", entry); match to_vec(&true) { Ok(v) => v, From e1a267509744f0aabde63a125b7ecdba8c4cce3f Mon Sep 17 00:00:00 2001 From: ntr Date: Thu, 13 Sep 2018 17:19:51 +1000 Subject: [PATCH 5/5] mono --- client/.gitignore | 4 ++++ client/index.html | 5 +++++ client/index.js | 19 +++++++++++++++++++ client/package.json | 17 +++++++++++++++++ {migrations => ops}/.gitkeep | 0 .../down.sql | 0 .../up.sql | 0 .../2018-09-11-113648_create_lobbies/down.sql | 0 .../2018-09-11-113648_create_lobbies/up.sql | 0 {.cargo => server/.cargo}/config | 0 .env => server/.env | 0 .gitignore => server/.gitignore | 0 Cargo.toml => server/Cargo.toml | 0 DIARY.md => server/DIARY.md | 0 README.md => server/README.md | 0 WORKLOG.md => server/WORKLOG.md | 0 {src => server/src}/battle.rs | 0 {src => server/src}/combat.rs | 0 {src => server/src}/cryp.rs | 0 {src => server/src}/main.rs | 0 {src => server/src}/net.rs | 0 {src => server/src}/rpc.rs | 0 {src => server/src}/skill.rs | 0 {src => server/src}/user.rs | 0 24 files changed, 45 insertions(+) create mode 100644 client/.gitignore create mode 100755 client/index.html create mode 100755 client/index.js create mode 100755 client/package.json rename {migrations => ops}/.gitkeep (100%) rename {migrations => ops}/00000000000000_diesel_initial_setup/down.sql (100%) rename {migrations => ops}/00000000000000_diesel_initial_setup/up.sql (100%) rename {migrations => ops}/2018-09-11-113648_create_lobbies/down.sql (100%) rename {migrations => ops}/2018-09-11-113648_create_lobbies/up.sql (100%) rename {.cargo => server/.cargo}/config (100%) rename .env => server/.env (100%) rename .gitignore => server/.gitignore (100%) rename Cargo.toml => server/Cargo.toml (100%) rename DIARY.md => server/DIARY.md (100%) rename README.md => server/README.md (100%) rename WORKLOG.md => server/WORKLOG.md (100%) rename {src => server/src}/battle.rs (100%) rename {src => server/src}/combat.rs (100%) rename {src => server/src}/cryp.rs (100%) rename {src => server/src}/main.rs (100%) rename {src => server/src}/net.rs (100%) rename {src => server/src}/rpc.rs (100%) rename {src => server/src}/skill.rs (100%) rename {src => server/src}/user.rs (100%) diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 00000000..b06e564c --- /dev/null +++ b/client/.gitignore @@ -0,0 +1,4 @@ +package-lock.json +node_modules/ +dist/ +.cache/ diff --git a/client/index.html b/client/index.html new file mode 100755 index 00000000..5c065ceb --- /dev/null +++ b/client/index.html @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/client/index.js b/client/index.js new file mode 100755 index 00000000..196992d6 --- /dev/null +++ b/client/index.js @@ -0,0 +1,19 @@ +const cbor = require('borc'); +const assert = require('assert'); +// Create WebSocket connection. +const ws = new WebSocket('ws://localhost:40000'); +ws.binaryType = 'arraybuffer'; + +// Connection opened +ws.addEventListener('open', function (event) { + ws.send(cbor.encode({ method: 'cryp_generate', params: { level: 64 }})); + ws.send(cbor.encode({ method: 'account_create', params: { name: 'ntr' }})); +}); + +// Listen for messages +ws.addEventListener('message', function (event) { + console.log('Message from server ', event.data); + const blob = new Uint8Array(event.data); + const decoded = cbor.decodeAll(blob); + console.log(decoded[0]); +}); \ No newline at end of file diff --git a/client/package.json b/client/package.json new file mode 100755 index 00000000..62fd850d --- /dev/null +++ b/client/package.json @@ -0,0 +1,17 @@ +{ + "name": "cryps-client", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "parcel index.html", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "UNLICENSED", + "dependencies": { + "borc": "^2.0.3", + "cbor": "^4.1.1", + "parcel": "^1.9.7" + } +} diff --git a/migrations/.gitkeep b/ops/.gitkeep similarity index 100% rename from migrations/.gitkeep rename to ops/.gitkeep diff --git a/migrations/00000000000000_diesel_initial_setup/down.sql b/ops/00000000000000_diesel_initial_setup/down.sql similarity index 100% rename from migrations/00000000000000_diesel_initial_setup/down.sql rename to ops/00000000000000_diesel_initial_setup/down.sql diff --git a/migrations/00000000000000_diesel_initial_setup/up.sql b/ops/00000000000000_diesel_initial_setup/up.sql similarity index 100% rename from migrations/00000000000000_diesel_initial_setup/up.sql rename to ops/00000000000000_diesel_initial_setup/up.sql diff --git a/migrations/2018-09-11-113648_create_lobbies/down.sql b/ops/2018-09-11-113648_create_lobbies/down.sql similarity index 100% rename from migrations/2018-09-11-113648_create_lobbies/down.sql rename to ops/2018-09-11-113648_create_lobbies/down.sql diff --git a/migrations/2018-09-11-113648_create_lobbies/up.sql b/ops/2018-09-11-113648_create_lobbies/up.sql similarity index 100% rename from migrations/2018-09-11-113648_create_lobbies/up.sql rename to ops/2018-09-11-113648_create_lobbies/up.sql diff --git a/.cargo/config b/server/.cargo/config similarity index 100% rename from .cargo/config rename to server/.cargo/config diff --git a/.env b/server/.env similarity index 100% rename from .env rename to server/.env diff --git a/.gitignore b/server/.gitignore similarity index 100% rename from .gitignore rename to server/.gitignore diff --git a/Cargo.toml b/server/Cargo.toml similarity index 100% rename from Cargo.toml rename to server/Cargo.toml diff --git a/DIARY.md b/server/DIARY.md similarity index 100% rename from DIARY.md rename to server/DIARY.md diff --git a/README.md b/server/README.md similarity index 100% rename from README.md rename to server/README.md diff --git a/WORKLOG.md b/server/WORKLOG.md similarity index 100% rename from WORKLOG.md rename to server/WORKLOG.md diff --git a/src/battle.rs b/server/src/battle.rs similarity index 100% rename from src/battle.rs rename to server/src/battle.rs diff --git a/src/combat.rs b/server/src/combat.rs similarity index 100% rename from src/combat.rs rename to server/src/combat.rs diff --git a/src/cryp.rs b/server/src/cryp.rs similarity index 100% rename from src/cryp.rs rename to server/src/cryp.rs diff --git a/src/main.rs b/server/src/main.rs similarity index 100% rename from src/main.rs rename to server/src/main.rs diff --git a/src/net.rs b/server/src/net.rs similarity index 100% rename from src/net.rs rename to server/src/net.rs diff --git a/src/rpc.rs b/server/src/rpc.rs similarity index 100% rename from src/rpc.rs rename to server/src/rpc.rs diff --git a/src/skill.rs b/server/src/skill.rs similarity index 100% rename from src/skill.rs rename to server/src/skill.rs diff --git a/src/user.rs b/server/src/user.rs similarity index 100% rename from src/user.rs rename to server/src/user.rs