mirror of
https://github.com/Linloir/Simple-TCP-Server.git
synced 2025-12-16 23:48:11 +08:00
Improvements & Feature:
- Add API ACKFETCH to update fetch history - Improve anti-exception performance
This commit is contained in:
parent
3e575110a9
commit
23a0633623
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-06 15:44:16
|
||||
* @LastEditTime : 2022-10-22 20:35:50
|
||||
* @LastEditTime : 2022-10-22 21:25:00
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
@ -38,7 +38,7 @@ void main(List<String> arguments) async {
|
||||
onError: (_) {
|
||||
print('[L] [EXCEPTION]-----------------------');
|
||||
print('[L] TCP Controller ran into exception');
|
||||
print('[L] Remote: ${controller.socket.remoteAddress}:${controller.socket.remotePort}');
|
||||
print('[L] socket: ${controller.socket.address}:${controller.socket.port}');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
@ -81,17 +81,38 @@ void main(List<String> arguments) async {
|
||||
switch(request.requestType) {
|
||||
case RequestType.checkState: {
|
||||
var response = await onCheckState(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.register: {
|
||||
var response = await onRegister(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.login: {
|
||||
var response = await onLogin(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.logout: {
|
||||
@ -101,17 +122,38 @@ void main(List<String> arguments) async {
|
||||
}
|
||||
case RequestType.profile: {
|
||||
var response = await onFetchProfile(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.modifyProfile: {
|
||||
var response = await onModifyProfile(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.modifyPassword: {
|
||||
var response = await onModifyPassword(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.sendMessage: {
|
||||
@ -183,32 +225,74 @@ void main(List<String> arguments) async {
|
||||
// );
|
||||
}
|
||||
var response = await onSendMessage(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.fetchMessage: {
|
||||
var response = await onFetchMessage(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.findFile: {
|
||||
var response = await onFindFile(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.fetchFile: {
|
||||
var response = await onFetchFile(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.searchUser: {
|
||||
var response = await onSearchUser(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.addContact: {
|
||||
var response = await onAddContact(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
var contactResponse = await onFetchContact(
|
||||
TCPRequest.fromData(
|
||||
type: RequestType.fetchContact,
|
||||
@ -222,12 +306,30 @@ void main(List<String> arguments) async {
|
||||
}
|
||||
case RequestType.fetchContact: {
|
||||
var response = await onFetchContact(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RequestType.ackFetch: {
|
||||
onAckFetch(request, socket);
|
||||
break;
|
||||
}
|
||||
case RequestType.unknown: {
|
||||
var response = await onUnknownRequest(request, socket);
|
||||
try {
|
||||
controller.outStream.add(response);
|
||||
} catch (e) {
|
||||
print('[E] [EXCEPTION]-----------------------');
|
||||
var token = controllerMap[controller];
|
||||
controllerMap.remove(controller);
|
||||
tokenMap[token]?.remove(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-06 16:15:01
|
||||
* @LastEditTime : 2022-10-20 20:58:57
|
||||
* @LastEditTime : 2022-10-22 21:08:27
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
@ -403,19 +403,19 @@ class DataBaseHelper {
|
||||
}).toList();
|
||||
|
||||
//Set new fetch history
|
||||
if(unfetchMsgQueryResult.isNotEmpty) {
|
||||
await _database.update(
|
||||
'histories',
|
||||
{
|
||||
'lastfetch': unfetchMsgQueryResult[0]['timestamp']
|
||||
},
|
||||
where: 'tokenid = ? and userid = ?',
|
||||
whereArgs: [
|
||||
tokenID,
|
||||
userID
|
||||
]
|
||||
);
|
||||
}
|
||||
// if(unfetchMsgQueryResult.isNotEmpty) {
|
||||
// await _database.update(
|
||||
// 'histories',
|
||||
// {
|
||||
// 'lastfetch': unfetchMsgQueryResult[0]['timestamp']
|
||||
// },
|
||||
// where: 'tokenid = ? and userid = ?',
|
||||
// whereArgs: [
|
||||
// tokenID,
|
||||
// userID
|
||||
// ]
|
||||
// );
|
||||
// }
|
||||
|
||||
//return result
|
||||
return unfetchMessages;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-08 20:52:48
|
||||
* @LastEditTime : 2022-10-15 00:40:24
|
||||
* @LastEditTime : 2022-10-22 20:56:15
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
@ -276,6 +276,14 @@ Future<TCPResponse> onFetchContact(TCPRequest request, Socket socket) async {
|
||||
}
|
||||
}
|
||||
|
||||
void onAckFetch(TCPRequest request, Socket socket) async {
|
||||
//Update Fetch Histories
|
||||
await DataBaseHelper().setFetchHistoryFor(
|
||||
tokenID: request.tokenID,
|
||||
newTimeStamp: request.body['timestamp'] as int,
|
||||
);
|
||||
}
|
||||
|
||||
Future<TCPResponse> onUnknownRequest(TCPRequest request, Socket socket) async {
|
||||
return TCPResponse(
|
||||
type: ResponseType.fromRequestType(request.requestType),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-08 15:10:04
|
||||
* @LastEditTime : 2022-10-22 20:30:36
|
||||
* @LastEditTime : 2022-10-22 21:20:57
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
@ -58,20 +58,21 @@ class TCPController {
|
||||
print('[L] Remote: ${socket.remoteAddress}:${socket.remotePort}');
|
||||
print('[L] Local: ${socket.address}:${socket.port}');
|
||||
Future(() async {
|
||||
try {
|
||||
await for(var request in socket) {
|
||||
_pullRequest(request);
|
||||
await Future.delayed(const Duration(microseconds: 0));
|
||||
}
|
||||
} catch (e) {
|
||||
_requestStreamController.addError(e);
|
||||
_responseStreamController.addError(e);
|
||||
}
|
||||
}).then((_) {
|
||||
print('[L] [CLOSED ]-----------------------');
|
||||
print('[L] Connection closed: ${socket.address}:${socket.port}<-${socket.remoteAddress}:${socket.remotePort}');
|
||||
print('[L] Connection closed: ${socket.address}:${socket.port}');
|
||||
_requestStreamController.close();
|
||||
_responseStreamController.close();
|
||||
}).onError((error, stackTrace) {
|
||||
print(error);
|
||||
_requestStreamController.addError(error ?? Error());
|
||||
_responseStreamController.addError(error ?? Error());
|
||||
},);
|
||||
});
|
||||
// socket.listen(
|
||||
// _pullRequest,
|
||||
// onError: (e) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-08 15:14:26
|
||||
* @LastEditTime : 2022-10-22 20:21:10
|
||||
* @LastEditTime : 2022-10-22 20:54:40
|
||||
* @Description :
|
||||
*/
|
||||
import 'dart:convert';
|
||||
@ -16,7 +16,7 @@ enum RequestType {
|
||||
modifyPassword('MODIFYPASSWD'), //Modify user password
|
||||
modifyProfile ('MODIFYPROFILE'), //Modify user profile
|
||||
sendMessage ('SENDMSG'), //Send message
|
||||
ackMessage ('ACKMSG'), //Ack forwarded messages, update fetch history
|
||||
ackFetch ('ACKFETCH'), //Ack fetched messages, update fetch history
|
||||
fetchMessage ('FETCHMSG'), //Fetch message
|
||||
findFile ('FINDFILE'), //Find file by md5 before transmitting the file
|
||||
fetchFile ('FETCHFILE'), //Fetch file and file md5 by message md5
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user