From 766dbcce0cebfad29dd37770c2dc8bfc5577d8ac Mon Sep 17 00:00:00 2001 From: Joshua Higgins Date: Tue, 25 Jun 2024 23:27:19 -0400 Subject: [PATCH] Start of some implementations switching to MySQL at some point, no need for another new and different syntax --- server/src/server.rs | 94 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 2 deletions(-) diff --git a/server/src/server.rs b/server/src/server.rs index bb307e5..6714f3b 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -1,14 +1,104 @@ use std::net::SocketAddr; +use std::sync::Arc; use futures::future; use futures::future::Ready; +use surrealdb::engine::remote::ws::Client; +use surrealdb::{Error, Response, Surreal}; use tarpc::context::Context; -use crate::types::{Message, RealmChat, Room, ErrorCode, User}; +use crate::types::{Message, RealmChat, Room, ErrorCode, User, Record}; #[derive(Clone)] -pub struct RealmChatServer(pub SocketAddr); +pub struct RealmChatServer { + pub socket: SocketAddr, + pub db: Arc>, +} + +impl RealmChatServer { + pub fn new(socket: SocketAddr, db: Arc>) -> RealmChatServer { + RealmChatServer { + socket, + db, + } + } +} impl RealmChat for RealmChatServer { fn test(self, context: Context, name: String) -> Ready { future::ready(format!("Hello, {name}!")) } + + async fn send_message(self, context: Context, message: Message) -> Result { + let created: surrealdb::Result> = self.db + .create(message.room.roomid.clone()) + .content(message.clone()) + .await; + + //TODO: Tell everyone + + match created { + Ok(ids) => Ok(message), + Err(_) => Err(ErrorCode::Error), + } + } + + async fn start_typing(self, context: Context) -> ErrorCode { + todo!() + } + + async fn stop_typing(self, context: Context) -> ErrorCode { + todo!() + } + + async fn keep_typing(self, context: Context) -> ErrorCode { + todo!() + } + + async fn get_message_from_guid(self, context: Context, guid: String) -> Result { + todo!() + } + + async fn get_messages_since(self, context: Context, time: u64) -> Result, ErrorCode> { + todo!() + } + + async fn get_rooms(self, context: Context) -> Result, ErrorCode> { + let result: surrealdb::Result> = self.db.select("room").await; + + match result { + Ok(rooms) => Ok(rooms), + Err(_) => Err(ErrorCode::Error), + } + } + + async fn get_room(self, context: Context, roomid: String) -> Result { + todo!() + } + + async fn get_user(self, context: Context, userid: String) -> Result { + todo!() + } + + async fn get_joined_users(self, context: Context) -> Result, ErrorCode> { + let result: surrealdb::Result> = self.db.select("user").await; + + match result { + Ok(users) => Ok(users), + Err(_) => Err(ErrorCode::Error), + } + } + + async fn get_online_users(self, context: Context) -> Result, ErrorCode> { + let result: surrealdb::Result = self.db.query("SELECT * FROM user WHERE online = true").await; //TODO: We're switching to MySQL + + match result { + Ok(mut response) => { + let users: Result, Error> = response.take(0); + match users { + Ok(vec) => Ok(vec), + Err(_) => Err(ErrorCode::Error), + } + }, + Err(_) => Err(ErrorCode::Error), + } + } } \ No newline at end of file