Browse Source

broadcast self-update info

pull/18/head
Sun 4 years ago
parent
commit
a3ddf7b307
  1. 4
      README.md
  2. 4
      lib/apps/service/models.dart
  3. 16
      src/apps/wallet/rpc.rs
  4. 17
      src/layer.rs
  5. 6
      src/rpc.rs

4
README.md

@ -27,10 +27,10 @@ ESSE, positioned as an engine. The engine is coded in [**Rust**](https://github.
[Document](https://docs.cympletech.com/docs/introduction) [Document](https://docs.cympletech.com/docs/introduction)
## Install ## Install
### Use pre-compiled executable ### 🚀 Use pre-compiled executable
[Download](https://github.com/cympletech/esse/releases) [Download](https://github.com/cympletech/esse/releases)
### Compile from souce ### 🚲 Compile from souce
#### 1. Pre-installed #### 1. Pre-installed
- Rustup [install](https://rustup.rs/) - Rustup [install](https://rustup.rs/)
- Rust (Lastest Stable version) - Rust (Lastest Stable version)

4
lib/apps/service/models.dart

@ -14,9 +14,9 @@ const List<InnerService> INNER_SERVICES = [
InnerService.Wallet, InnerService.Wallet,
InnerService.Chat, InnerService.Chat,
InnerService.GroupChat, InnerService.GroupChat,
InnerService.Dao, //InnerService.Dao,
InnerService.Domain, InnerService.Domain,
InnerService.Cloud, //InnerService.Cloud,
InnerService.Jarvis, InnerService.Jarvis,
]; ];

16
src/apps/wallet/rpc.rs

@ -352,6 +352,8 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
let db = wallet_db(group_lock.base(), &gid)?; let db = wallet_db(group_lock.base(), &gid)?;
drop(group_lock); drop(group_lock);
let mut results = HandleResult::new();
let pass = if pass.len() > 0 { let pass = if pass.len() > 0 {
Some(pass.as_ref()) Some(pass.as_ref())
} else { } else {
@ -372,6 +374,7 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
}; };
address.insert(&db)?; address.insert(&db)?;
results.rpcs.push(address.to_rpc());
if address.main { if address.main {
let mut group_lock = state.group.write().await; let mut group_lock = state.group.write().await;
let a_db = account_db(group_lock.base())?; let a_db = account_db(group_lock.base())?;
@ -379,9 +382,13 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
account.wallet = address.chain.update_main(&address.address, &account.wallet); account.wallet = address.chain.update_main(&address.address, &account.wallet);
account.pub_height = account.pub_height + 1; account.pub_height = account.pub_height + 1;
account.update_info(&a_db)?; account.update_info(&a_db)?;
let user = group_lock.clone_user(&gid)?;
drop(group_lock); drop(group_lock);
// broadcast all friends.
state.layer.read().await.broadcast(user, &mut results);
} }
Ok(HandleResult::rpc(address.to_rpc())) Ok(results)
}, },
); );
@ -602,12 +609,19 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
let address = Address::get(&db, &id)?; let address = Address::get(&db, &id)?;
Address::main(&db, &id)?; Address::main(&db, &id)?;
let mut results = HandleResult::new();
let mut group_lock = state.group.write().await; let mut group_lock = state.group.write().await;
let account = group_lock.account_mut(&gid)?; let account = group_lock.account_mut(&gid)?;
account.wallet = address.chain.update_main(&address.address, &account.wallet); account.wallet = address.chain.update_main(&address.address, &account.wallet);
account.pub_height = account.pub_height + 1; account.pub_height = account.pub_height + 1;
account.update_info(&a_db)?; account.update_info(&a_db)?;
let user = group_lock.clone_user(&gid)?;
drop(group_lock); drop(group_lock);
// broadcast all friends.
state.layer.read().await.broadcast(user, &mut results);
Ok(HandleResult::new()) Ok(HandleResult::new())
}, },
); );

17
src/layer.rs

@ -5,11 +5,12 @@ use std::sync::Arc;
use tdn::types::{ use tdn::types::{
group::GroupId, group::GroupId,
message::SendType, message::SendType,
primitive::{Peer, PeerId, Result}, primitive::{HandleResult, Peer, PeerId, Result},
}; };
use tokio::sync::RwLock; use tokio::sync::RwLock;
use crate::apps::chat::chat_conn; use crate::account::User;
use crate::apps::chat::{chat_conn, LayerEvent as ChatLayerEvent};
use crate::apps::group::{group_conn, GROUP_ID}; use crate::apps::group::{group_conn, GROUP_ID};
use crate::group::Group; use crate::group::Group;
use crate::session::{Session, SessionType}; use crate::session::{Session, SessionType};
@ -168,6 +169,18 @@ impl Layer {
false false
} }
} }
pub fn broadcast(&self, user: User, results: &mut HandleResult) {
let gid = user.id;
let info = ChatLayerEvent::InfoRes(user);
let data = bincode::serialize(&info).unwrap_or(vec![]);
if let Some(running) = self.runnings.get(&gid) {
for (fgid, online) in &running.sessions {
let msg = SendType::Event(0, *online.online.addr(), data.clone());
results.layers.push((gid, *fgid, msg));
}
}
}
} }
/// online info. /// online info.

6
src/rpc.rs

@ -348,17 +348,21 @@ fn new_rpc_handler(
let mut group_lock = state.group.write().await; let mut group_lock = state.group.write().await;
group_lock.update_account(gid, name, avatar_bytes.clone())?; group_lock.update_account(gid, name, avatar_bytes.clone())?;
let user = group_lock.clone_user(&gid)?;
let mut results = HandleResult::new(); let mut results = HandleResult::new();
group_lock.broadcast( group_lock.broadcast(
&gid, &gid,
InnerEvent::UserInfo(name.to_owned(), avatar_bytes), InnerEvent::UserInfo(name.to_owned(), avatar_bytes.clone()),
0, 0,
0, 0,
&mut results, &mut results,
)?; )?;
drop(group_lock); drop(group_lock);
// broadcast all friends.
state.layer.read().await.broadcast(user, &mut results);
Ok(results) Ok(results)
}, },
); );

Loading…
Cancel
Save