New Feature:

- Add API ACKFETCH to acknowledge fetch message done
This commit is contained in:
Linloir 2022-10-22 21:27:17 +08:00
parent c0ac46939e
commit a68ef5ba25
3 changed files with 35 additions and 18 deletions

View File

@ -1,7 +1,7 @@
/* /*
* @Author : Linloir * @Author : Linloir
* @Date : 2022-10-13 14:02:28 * @Date : 2022-10-13 14:02:28
* @LastEditTime : 2022-10-22 01:20:14 * @LastEditTime : 2022-10-22 21:08:39
* @Description : * @Description :
*/ */
@ -44,17 +44,15 @@ class HomeCubit extends Cubit<HomeState> {
tcpRepository.pushRequest(FetchMessageRequest( tcpRepository.pushRequest(FetchMessageRequest(
token: (await SharedPreferences.getInstance()).getInt('token') token: (await SharedPreferences.getInstance()).getInt('token')
)); ));
await for(var response in tcpRepository.responseStreamBroadcast) { // await for(var response in tcpRepository.responseStreamBroadcast) {
if(response.type == TCPResponseType.fetchMessage) { // if(response.type == TCPResponseType.fetchMessage) {
if(response.status == TCPResponseStatus.ok) { // if(response.status == TCPResponseStatus.ok) {
// response as FetchMessageResponse; // // response as FetchMessageResponse;
// localServiceRepository.storeMessages(response.messages); // // localServiceRepository.storeMessages(response.messages);
break; // break;
} // }
} // }
} // }
}).then((_) {
emit(state.copyWith(status: HomePageStatus.done));
}); });
} }
@ -71,19 +69,26 @@ class HomeCubit extends Cubit<HomeState> {
); );
} }
void _onTCPResponse(TCPResponse response) { void _onTCPResponse(TCPResponse response) async {
if(response.status == TCPResponseStatus.err) { if(response.status == TCPResponseStatus.err) {
return; return;
} }
switch(response.type) { switch(response.type) {
case TCPResponseType.forwardMessage: { case TCPResponseType.forwardMessage: {
response as ForwardMessageResponse; response as ForwardMessageResponse;
localServiceRepository.storeMessages([response.message]); await localServiceRepository.storeMessages([response.message]);
break; break;
} }
case TCPResponseType.fetchMessage: { case TCPResponseType.fetchMessage: {
response as FetchMessageResponse; response as FetchMessageResponse;
localServiceRepository.storeMessages(response.messages); await localServiceRepository.storeMessages(response.messages);
emit(state.copyWith(status: HomePageStatus.done));
if(response.messages.isNotEmpty) {
tcpRepository.pushRequest(AckFetchRequest(
timeStamp: response.messages[0].timeStamp,
token: (await SharedPreferences.getInstance()).getInt('token')
));
}
break; break;
} }
default: { default: {

View File

@ -1,7 +1,7 @@
/* /*
* @Author : Linloir * @Author : Linloir
* @Date : 2022-10-10 08:04:53 * @Date : 2022-10-10 08:04:53
* @LastEditTime : 2022-10-21 22:49:14 * @LastEditTime : 2022-10-22 20:43:39
* @Description : * @Description :
*/ */
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
@ -49,7 +49,7 @@ class SplashPage extends StatelessWidget {
return BlocProvider<InitializationCubit>( return BlocProvider<InitializationCubit>(
create: (context) { create: (context) {
return InitializationCubit( return InitializationCubit(
serverAddress: 'chat.linloir.cn', serverAddress: '192.168.43.155',
serverPort: 20706 serverPort: 20706
); );
}, },

View File

@ -1,7 +1,7 @@
/* /*
* @Author : Linloir * @Author : Linloir
* @Date : 2022-10-11 09:44:03 * @Date : 2022-10-11 09:44:03
* @LastEditTime : 2022-10-18 14:45:20 * @LastEditTime : 2022-10-22 21:01:35
* @Description : Abstract TCP request class * @Description : Abstract TCP request class
*/ */
@ -24,6 +24,7 @@ enum TCPRequestType {
modifyProfile ('MODIFYPROFILE'), //Modify user profile modifyProfile ('MODIFYPROFILE'), //Modify user profile
sendMessage ('SENDMSG'), //Send message sendMessage ('SENDMSG'), //Send message
fetchMessage ('FETCHMSG'), //Fetch message fetchMessage ('FETCHMSG'), //Fetch message
ackFetch ('ACKFETCH'), //Acknowledge message fetch
findFile ('FINDFILE'), //Find file by md5 before transmitting the file findFile ('FINDFILE'), //Find file by md5 before transmitting the file
fetchFile ('FETCHFILE'), //Fetch file and file md5 by message md5 fetchFile ('FETCHFILE'), //Fetch file and file md5 by message md5
searchUser ('SEARCHUSR'), //Search username and userid by username searchUser ('SEARCHUSR'), //Search username and userid by username
@ -243,4 +244,15 @@ class FetchContactRequest extends TCPRequest {
@override @override
Map<String, Object?> get body => {}; Map<String, Object?> get body => {};
}
class AckFetchRequest extends TCPRequest {
final int _timeStamp;
const AckFetchRequest({required int timeStamp, required int? token}): _timeStamp = timeStamp, super(type: TCPRequestType.ackFetch, token: token);
@override
Map<String, Object?> get body => {
'timestamp': _timeStamp
};
} }