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 a758929b46
commit da53d22261
No known key found for this signature in database
GPG Key ID: 58EEB209A0F2C366
3 changed files with 35 additions and 18 deletions

View File

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

View File

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

View File

@ -1,7 +1,7 @@
/*
* @Author : Linloir
* @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
*/
@ -24,6 +24,7 @@ enum TCPRequestType {
modifyProfile ('MODIFYPROFILE'), //Modify user profile
sendMessage ('SENDMSG'), //Send message
fetchMessage ('FETCHMSG'), //Fetch message
ackFetch ('ACKFETCH'), //Acknowledge message fetch
findFile ('FINDFILE'), //Find file by md5 before transmitting the file
fetchFile ('FETCHFILE'), //Fetch file and file md5 by message md5
searchUser ('SEARCHUSR'), //Search username and userid by username
@ -243,4 +244,15 @@ class FetchContactRequest extends TCPRequest {
@override
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
};
}