Added database connection; #1
This commit is contained in:
parent
dc23f6ae60
commit
bb0942eef2
1
application/.gitignore
vendored
Normal file
1
application/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
dist
|
@ -6,3 +6,9 @@ edition = "2021"
|
||||
[dependencies]
|
||||
yew = { version = "0.21", features = ["csr"] }
|
||||
yew-router = "0.18.0"
|
||||
gloo-net = "0.5.0"
|
||||
futures = "0.3.30"
|
||||
serde_json = "1.0.113"
|
||||
serde = "1.0.196"
|
||||
log = "0.4.6"
|
||||
wasm-logger = "0.2.0"
|
||||
|
@ -1,3 +1,4 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use yew::prelude::*;
|
||||
use yew_router::prelude::*;
|
||||
|
||||
@ -6,6 +7,7 @@ use pages::*;
|
||||
|
||||
mod components;
|
||||
mod pages;
|
||||
mod util;
|
||||
|
||||
#[derive(Clone, Routable, PartialEq)]
|
||||
pub enum Route {
|
||||
@ -31,8 +33,52 @@ fn switch(route: Route) -> Html {
|
||||
}
|
||||
}
|
||||
|
||||
#[function_component(App)]
|
||||
fn app() -> Html {
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum MsgTypes {
|
||||
Users,
|
||||
Register,
|
||||
Message,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct WebSocketMessage {
|
||||
message_type: MsgTypes,
|
||||
data_array: Option<Vec<String>>,
|
||||
data: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Properties, Default)]
|
||||
struct AppProps;
|
||||
|
||||
struct App;
|
||||
|
||||
impl Component for App {
|
||||
type Message = ();
|
||||
type Properties = AppProps;
|
||||
|
||||
fn create(_ctx: &Context<Self>) -> Self {
|
||||
let wss = util::surrealdb::SurrealWebsocketService::new();
|
||||
|
||||
let message = WebSocketMessage {
|
||||
message_type: MsgTypes::Register,
|
||||
data: Some("Hi!".to_string()),
|
||||
data_array: None,
|
||||
};
|
||||
|
||||
if let Ok(_) = wss
|
||||
.tx
|
||||
.clone()
|
||||
.try_send(serde_json::to_string(&message).unwrap())
|
||||
{
|
||||
log::debug!("Message send successfully")
|
||||
}
|
||||
|
||||
App
|
||||
}
|
||||
|
||||
fn view(&self, _ctx: &Context<Self>) -> Html {
|
||||
html! {
|
||||
<BrowserRouter>
|
||||
<Navbar />
|
||||
@ -42,8 +88,10 @@ fn app() -> Html {
|
||||
<Footer />
|
||||
</BrowserRouter>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
wasm_logger::init(wasm_logger::Config::default());
|
||||
yew::Renderer::<App>::new().render();
|
||||
}
|
||||
|
1
application/src/util.rs
Normal file
1
application/src/util.rs
Normal file
@ -0,0 +1 @@
|
||||
pub mod surrealdb;
|
45
application/src/util/surrealdb.rs
Normal file
45
application/src/util/surrealdb.rs
Normal file
@ -0,0 +1,45 @@
|
||||
use futures::{channel::mpsc::Sender, stream::SplitSink, SinkExt, StreamExt};
|
||||
use gloo_net::websocket::{futures::WebSocket, Message};
|
||||
use yew::platform::spawn_local;
|
||||
|
||||
pub struct SurrealWebsocketService {
|
||||
pub tx: Sender<String>,
|
||||
}
|
||||
|
||||
impl SurrealWebsocketService {
|
||||
pub fn new() -> Self {
|
||||
let ws = WebSocket::open("ws://localhost:80/rpc").unwrap();
|
||||
let (mut write, mut read) = ws.split();
|
||||
|
||||
let (in_tx, mut in_rx) = futures::channel::mpsc::channel::<String>(1000);
|
||||
|
||||
spawn_local(async move {
|
||||
while let Some(s) = in_rx.next().await {
|
||||
log::debug!("got event from channel! {}", s);
|
||||
write.send(Message::Text(s)).await.unwrap();
|
||||
}
|
||||
});
|
||||
|
||||
spawn_local(async move {
|
||||
while let Some(msg) = read.next().await {
|
||||
match msg {
|
||||
Ok(Message::Text(data)) => {
|
||||
log::debug!("from websocket: {}", data);
|
||||
}
|
||||
Ok(Message::Bytes(b)) => {
|
||||
let decoded = std::str::from_utf8(&b);
|
||||
if let Ok(val) = decoded {
|
||||
log::debug!("from websocket: {}", val);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
log::error!("ws: {:?}", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
log::debug!("WebSocket closed");
|
||||
});
|
||||
|
||||
Self { tx: in_tx }
|
||||
}
|
||||
}
|
12
flake.nix
12
flake.nix
@ -28,13 +28,9 @@
|
||||
trunk
|
||||
dart-sass
|
||||
rust-analyzer
|
||||
openssl
|
||||
pkg-config
|
||||
cargo-insta
|
||||
llvmPackages_latest.llvm
|
||||
llvmPackages_latest.bintools
|
||||
zlib.out
|
||||
llvmPackages_latest.lld
|
||||
llvmPackages.clangNoLibc
|
||||
llvmPackages.lld
|
||||
dap
|
||||
(rust-bin.stable.latest.default.override {
|
||||
extensions= [ "rust-src" "rust-analyzer" ];
|
||||
targets = [ "wasm32-unknown-unknown" ];
|
||||
@ -44,6 +40,8 @@
|
||||
shellHook = ''
|
||||
alias grep=ripgrep
|
||||
export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin
|
||||
export CC=clang
|
||||
export CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_LINKER=lld
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user