initial commit

This commit is contained in:
polygon 2024-03-27 11:43:11 +01:00 committed by polygon
parent 8522dd3f40
commit b08b6de26d
7 changed files with 1421 additions and 1 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/target

1336
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

6
Cargo.toml Normal file
View file

@ -0,0 +1,6 @@
[workspace]
members = ["api"]
resolver = "2"
[workspace.dev-dependencies]
cucumber = "0.20"
futures = "0.3.30"

View file

@ -1,3 +1,22 @@
# shoutcat
a chat protocol or something. We have no clue what we're doing, please help
- verteiltes netzwerk an servern
- shoutcat besteht aus einem verteilten netzwerk an servern die über das internet verbunden sind
- Jeder Node (server) trägt zur Gesamtfunktionalität des Netzwerkes bei und kann mit anderen Servern kommunizieren
- verbindungen werden über ein relay hergestellt (zunächst bereitgestellt von dem server von dem aus der chat initialisiert wurde)
- Kommunikation zwischen den Clients und dem Relay über das QUIC-Protokoll
- Raft als Distributed Consensus System
- Raft verhindert nicht dass ein node malicious ist, wird aber früher oder später einen konsistenten Zusant über alle Server erreichen und Trifft die Entscheidung welcher node leader an einem relay ist
- Jeder Server ist ein raft-node
- Bei Serverausfällen oÄ wählt Raft einen neuen Leader um Kontinuität zu gewährleisten
- Clients als Server
- Die Clients sollen auch als Server agieren können?
- Dentrales speichern / weitergeben von Daten via IPFS?
- Verbindungsaufbau:
- Ein Client initialisiert eine Verbindung zum Relay-Server um an Shoutcat netzwerk teilzunehmen
- Der Relayserver ermöglicht es den clients sich gegenseitig zu entdecken und nachrichten auszutauschen
- Nachrichtenaustausch
- Die clients können nachrichten senden und empfangen, das relay dient als vermittler
- die verbindung zum relay und übertragung der nachrichten passiert über das QUIC protokoll

13
api/Cargo.toml Normal file
View file

@ -0,0 +1,13 @@
[package]
name = "api"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
actix-web = "4.5.1"
anyhow = "1.0.81"
serde = "1.0.197"
uuid = {version = "1.8.0", features = ["v4"]}

31
api/src/endpoints.rs Normal file
View file

@ -0,0 +1,31 @@
use actix_web::{web, App, HttpServer, Responder, HttpResponse};
use serde::{Serialize, Deserialize};
use uuid::Uuid;
use std::sync::mutex;
use anyhow::Result;
#[derive(Debug, Serialize, Deserialize)]
struct User {
uuid: Uuid,
server: Server
}
#[derive(Debug, Serialize, Deserialize)]
struct Server {
address: String
}
#[derive(Debug, Serialize, Deserialize)]
struct Relay {
uuid: Uuid,
name: String,
members: Mutex<Vec<User>>
}
#[derive(Debug, Serialize, Deserialize, Default)]
struct AppState {
users: Mutex<Vec<User>>,
relays: Mutex<Vec<Relay>>
}

14
api/src/lib.rs Normal file
View file

@ -0,0 +1,14 @@
pub fn add(left: usize, right: usize) -> usize {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}