Event polling
not optimal but its tomorrow
This commit is contained in:
@@ -1,64 +1,14 @@
|
||||
// use durian::bincode_packet;
|
||||
// use crate::types::{Message, Room, User};
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct Greet {
|
||||
// pub id: u32
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct UserJoinedEvent {
|
||||
// pub user: User,
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct UserLeftEvent {
|
||||
// pub user: User,
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct NewMessageEvent {
|
||||
// pub message: Message,
|
||||
// }
|
||||
//
|
||||
// // #[bincode_packet]
|
||||
// // pub struct StartTypingEvent {
|
||||
// // pub user: User,
|
||||
// // pub room: String,
|
||||
// // }
|
||||
// //
|
||||
// // #[bincode_packet]
|
||||
// // pub struct StopTypingEvent {
|
||||
// // pub user: User,
|
||||
// // pub room: String,
|
||||
// // }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct NewRoomEvent {
|
||||
// pub room: Room,
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct DeleteRoomEvent {
|
||||
// pub roomid: String,
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct KickedUserEvent {
|
||||
// pub userid: String,
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct BannedUserEvent {
|
||||
// pub userid: String,
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct PromotedUserEvent {
|
||||
// pub userid: String,
|
||||
// }
|
||||
//
|
||||
// #[bincode_packet]
|
||||
// pub struct DemotedUserEvent {
|
||||
// pub userid: String,
|
||||
// }
|
||||
use crate::types::{Message, Room, User};
|
||||
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub enum Event {
|
||||
// UserJoined(User),
|
||||
// UserLeft(User),
|
||||
NewMessage(Message),
|
||||
NewRoom(Room),
|
||||
DeleteRoom(String),
|
||||
// KickedUser(KickedUser),
|
||||
// BannedUser(BannedUser),
|
||||
// PromotedUser(PromotedUser),
|
||||
// DemotedUser(DemotedUser),
|
||||
}
|
||||
@@ -25,6 +25,7 @@ pub struct RealmChatServer {
|
||||
pub db_pool: Pool<Sqlite>,
|
||||
pub typing_users: Vec<(String, String)>, //NOTE: user.userid, room.roomid
|
||||
pub cache: Cache<String, String>,
|
||||
pub events: Vec<(u32, Event)>,
|
||||
}
|
||||
|
||||
const FETCH_MESSAGE: &str = "SELECT message.*,
|
||||
@@ -46,6 +47,7 @@ impl RealmChatServer {
|
||||
.time_to_idle(Duration::from_secs(5*60))
|
||||
.time_to_live(Duration::from_secs(60*60))
|
||||
.build(),
|
||||
events: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,6 +219,18 @@ impl RealmChat for RealmChatServer {
|
||||
self.internal_is_user_owner(&userid).await
|
||||
}
|
||||
|
||||
async fn poll_events_since(self, _: Context, index: u32) -> Vec<(u32, Event)> {
|
||||
let mut events_to_send = Vec::new();
|
||||
|
||||
for (i, event) in self.events {
|
||||
if i > index {
|
||||
events_to_send.push((i, event));
|
||||
}
|
||||
}
|
||||
|
||||
events_to_send
|
||||
}
|
||||
|
||||
async fn join_server(self, _: Context, stoken: String, userid: String) -> Result<User, ErrorCode> {
|
||||
if !self.is_stoken_valid(&userid, &stoken).await {
|
||||
return Err(Unauthorized)
|
||||
|
||||
@@ -4,7 +4,7 @@ use sqlx::sqlite::SqliteRow;
|
||||
use tarpc::serde::{Deserialize, Serialize};
|
||||
|
||||
use realm_shared::types::ErrorCode;
|
||||
|
||||
use crate::events::Event;
|
||||
use crate::types::MessageData::*;
|
||||
|
||||
#[tarpc::service]
|
||||
@@ -14,7 +14,7 @@ pub trait RealmChat {
|
||||
async fn get_info() -> ServerInfo;
|
||||
async fn is_user_admin(stoken: String) -> bool;
|
||||
async fn is_user_owner(stoken: String) -> bool;
|
||||
|
||||
async fn poll_events_since(index: u32) -> Vec<(u32, Event)>;
|
||||
async fn join_server(stoken: String, userid: String) -> Result<User, ErrorCode>;
|
||||
async fn leave_server(stoken: String, userid: String) -> Result<(), ErrorCode>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user