Browse Source

connected and check to group chat

pull/18/head
Sun 4 years ago
parent
commit
c2b03e5b3d
  1. 17
      lib/apps/group_chat/add.dart
  2. 65
      lib/apps/group_chat/provider.dart
  3. 2
      lib/main.dart
  4. 2
      src/apps.rs
  5. 4
      src/apps/group_chat/mod.rs
  6. 33
      src/apps/group_chat/rpc.rs

17
lib/apps/group_chat/add.dart

@ -18,6 +18,7 @@ import 'package:esse/provider.dart'; @@ -18,6 +18,7 @@ import 'package:esse/provider.dart';
import 'package:esse/apps/chat/models.dart';
import 'package:esse/apps/chat/provider.dart';
import 'package:esse/apps/group_chat/provider.dart';
class GroupAddPage extends StatefulWidget {
final String id;
@ -51,6 +52,8 @@ class _GroupAddPageState extends State<GroupAddPage> { @@ -51,6 +52,8 @@ class _GroupAddPageState extends State<GroupAddPage> {
bool _groupNeedAgree = false;
bool _groupHasKey = true;
bool _groupHasNeedAgree = true;
bool _addrOnline = false;
bool _addrChecked = false;
// 0 => encrypted, 1 => common, 2 => open.
Widget _groupTypeWidget(String text, int value, ColorScheme color) {
@ -85,6 +88,14 @@ class _GroupAddPageState extends State<GroupAddPage> { @@ -85,6 +88,14 @@ class _GroupAddPageState extends State<GroupAddPage> {
//
}
_checkGroupAddr() {
String addr = _createAddrController.text;
if (addr.substring(0, 2) == '0x') {
addr = addr.substring(2);
}
context.read<GroupChatProvider>().check(addr);
}
_scanCallback(bool isOk, String app, List params) {
Navigator.of(context).pop();
if (isOk && app == 'add-group' && params.length == 3) {
@ -307,13 +318,13 @@ class _GroupAddPageState extends State<GroupAddPage> { @@ -307,13 +318,13 @@ class _GroupAddPageState extends State<GroupAddPage> {
onChanged: (v) {
if (v.length > 0) {
setState(() {
//this._addrChecked = true;
_addrChecked = true;
});
}
}),
),
),
//if (this._addrOnline)
if (_addrOnline)
Container(
padding: const EdgeInsets.only(left: 8.0),
child: Icon(Icons.cloud_done_rounded,
@ -323,7 +334,7 @@ class _GroupAddPageState extends State<GroupAddPage> { @@ -323,7 +334,7 @@ class _GroupAddPageState extends State<GroupAddPage> {
Container(
width: 100.0,
child: InkWell(
//onTap: this._addrChecked ? _checkAddrOnline : null,
onTap: _addrChecked ? _checkGroupAddr : null,
child: Container(
height: 45.0,
decoration: BoxDecoration(

65
lib/apps/group_chat/provider.dart

@ -0,0 +1,65 @@ @@ -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) {
//
}
}

2
lib/main.dart

@ -14,6 +14,7 @@ import 'package:esse/provider.dart'; @@ -14,6 +14,7 @@ import 'package:esse/provider.dart';
import 'package:esse/apps/device/provider.dart';
import 'package:esse/apps/chat/provider.dart';
import 'package:esse/apps/assistant/provider.dart';
import 'package:esse/apps/group_chat/provider.dart';
void coreServer() async {
final path = await homeDir();
@ -42,6 +43,7 @@ void main() { @@ -42,6 +43,7 @@ void main() {
ChangeNotifierProvider(create: (_) => DeviceProvider()),
ChangeNotifierProvider(create: (_) => ChatProvider()),
ChangeNotifierProvider(create: (_) => AssistantProvider()),
ChangeNotifierProvider(create: (_) => GroupChatProvider()),
],
child: MyApp(),
));

2
src/apps.rs

@ -11,6 +11,7 @@ pub(crate) mod chat; @@ -11,6 +11,7 @@ pub(crate) mod chat;
pub(crate) mod device;
pub(crate) mod domain;
pub(crate) mod file;
pub(crate) mod group_chat;
pub(crate) fn app_rpc_inject(handler: &mut RpcHandler<RpcState>) {
device::new_rpc_handler(handler);
@ -18,6 +19,7 @@ pub(crate) fn app_rpc_inject(handler: &mut RpcHandler<RpcState>) { @@ -18,6 +19,7 @@ pub(crate) fn app_rpc_inject(handler: &mut RpcHandler<RpcState>) {
assistant::new_rpc_handler(handler);
domain::new_rpc_handler(handler);
file::new_rpc_handler(handler);
group_chat::new_rpc_handler(handler);
}
pub(crate) fn _app_layer_handle(

4
src/apps/group_chat/mod.rs

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
mod models;
pub(crate) mod rpc;
pub(crate) use rpc::new_rpc_handler;

33
src/apps/group_chat/rpc.rs

@ -0,0 +1,33 @@ @@ -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…
Cancel
Save