mirror of https://github.com/CympleTech/ESSE.git
6 changed files with 120 additions and 3 deletions
@ -0,0 +1,65 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
|
||||||
|
import 'package:esse/rpc.dart'; |
||||||
|
import 'package:esse/apps/group_chat/models.dart'; |
||||||
|
|
||||||
|
class GroupChatProvider extends ChangeNotifier { |
||||||
|
Map<int, int> groups = {}; |
||||||
|
|
||||||
|
GroupChatProvider() { |
||||||
|
// rpc. |
||||||
|
rpc.addListener('group-chat-list', _list, false); |
||||||
|
// rpc.addListener('group-chat-online', _online, false); |
||||||
|
// rpc.addListener('group-chat-offline', _online, false); |
||||||
|
rpc.addListener('group-chat-check', _check, false); |
||||||
|
rpc.addListener('group-chat-create', _create, false); |
||||||
|
// rpc.addListener('group-chat-update', _update, false); |
||||||
|
// rpc.addListener('group-chat-join', _join, true); |
||||||
|
// rpc.addListener('group-chat-agree', _agree, true); |
||||||
|
// rpc.addListener('group-chat-reject', _reject, false); |
||||||
|
// rpc.addListener('group-chat-member-join', _memberJoin, false); |
||||||
|
// rpc.addListener('group-chat-member-info', _memberInfo, false); |
||||||
|
// rpc.addListener('group-chat-member-leave', _memberLeave, false); |
||||||
|
// rpc.addListener('group-chat-member-online', _memberOnline, false); |
||||||
|
// rpc.addListener('group-chat-member-offline', _memberOffline, false); |
||||||
|
// rpc.addListener('group-chat-message-create', _messageCreate, true); |
||||||
|
// rpc.addListener('group-chat-message-delete', _messageDelete, false); |
||||||
|
// rpc.addListener('group-chat-message-delivery', _messageDelivery, false); |
||||||
|
} |
||||||
|
|
||||||
|
clear() { |
||||||
|
} |
||||||
|
|
||||||
|
updateActived() { |
||||||
|
this.clear(); |
||||||
|
|
||||||
|
// load groups. |
||||||
|
rpc.send('group-chat-list', []); |
||||||
|
} |
||||||
|
|
||||||
|
check(String addr) { |
||||||
|
rpc.send('group-chat-check', [addr]); |
||||||
|
} |
||||||
|
|
||||||
|
create() { |
||||||
|
rpc.send('group-chat-create', []); |
||||||
|
} |
||||||
|
|
||||||
|
_list(List params) { |
||||||
|
this.clear(); |
||||||
|
params.forEach((params) { |
||||||
|
// if (params.length == 6) { |
||||||
|
// this.devices[params[0]] = Device.fromList(params); |
||||||
|
// } |
||||||
|
}); |
||||||
|
notifyListeners(); |
||||||
|
} |
||||||
|
|
||||||
|
_check(List params) { |
||||||
|
// |
||||||
|
} |
||||||
|
|
||||||
|
_create(List params) { |
||||||
|
// |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,4 @@ |
|||||||
|
mod models; |
||||||
|
|
||||||
|
pub(crate) mod rpc; |
||||||
|
pub(crate) use rpc::new_rpc_handler; |
@ -0,0 +1,33 @@ |
|||||||
|
use group_chat_types::{Event, GroupConnect, GroupEvent, GroupInfo, GroupResult, GroupType}; |
||||||
|
use std::sync::Arc; |
||||||
|
use tdn::types::{ |
||||||
|
group::GroupId, |
||||||
|
message::SendType, |
||||||
|
primitive::{new_io_error, HandleResult, PeerAddr}, |
||||||
|
rpc::{json, rpc_response, RpcHandler, RpcParam}, |
||||||
|
}; |
||||||
|
|
||||||
|
//use crate::group::GroupEvent;
|
||||||
|
use crate::rpc::RpcState; |
||||||
|
|
||||||
|
pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) { |
||||||
|
handler.add_method("group-chat-echo", |_, params, _| async move { |
||||||
|
Ok(HandleResult::rpc(json!(params))) |
||||||
|
}); |
||||||
|
|
||||||
|
handler.add_method( |
||||||
|
"group-chat-check", |
||||||
|
|gid: GroupId, params: Vec<RpcParam>, _state: Arc<RpcState>| async move { |
||||||
|
let addr = PeerAddr::from_hex(params[0].as_str()?) |
||||||
|
.map_err(|_e| new_io_error("PeerAddr invalid!"))?; |
||||||
|
println!("addr: {}", addr.to_hex()); |
||||||
|
|
||||||
|
let data = postcard::to_allocvec(&GroupConnect::Check).unwrap_or(vec![]); |
||||||
|
Ok(HandleResult::layer( |
||||||
|
gid, |
||||||
|
gid, |
||||||
|
SendType::Connect(0, addr, None, None, data), |
||||||
|
)) |
||||||
|
}, |
||||||
|
); |
||||||
|
} |
Loading…
Reference in new issue