mirror of
https://github.com/Linloir/Simple-TCP-Client.git
synced 2025-12-18 17:28:11 +08:00
More codes
- TCP response model
This commit is contained in:
parent
239beb43b6
commit
f53debfd14
12
lib/repositories/common_models/json_encodable.dart
Normal file
12
lib/repositories/common_models/json_encodable.dart
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* @Author : Linloir
|
||||||
|
* @Date : 2022-10-11 15:18:49
|
||||||
|
* @LastEditTime : 2022-10-11 15:22:13
|
||||||
|
* @Description :
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class JSONEncodable {
|
||||||
|
const JSONEncodable();
|
||||||
|
|
||||||
|
Map<String, Object?> get jsonObject;
|
||||||
|
}
|
||||||
90
lib/repositories/common_models/message.dart
Normal file
90
lib/repositories/common_models/message.dart
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* @Author : Linloir
|
||||||
|
* @Date : 2022-10-11 10:30:05
|
||||||
|
* @LastEditTime : 2022-10-11 15:36:23
|
||||||
|
* @Description :
|
||||||
|
*/
|
||||||
|
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:crypto/crypto.dart';
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:tcp_client/repositories/common_models/json_encodable.dart';
|
||||||
|
import 'package:tcp_client/repositories/file_repository/models/local_file.dart';
|
||||||
|
|
||||||
|
enum MessageType {
|
||||||
|
plaintext('plaintext'),
|
||||||
|
file('file'),
|
||||||
|
image('image');
|
||||||
|
|
||||||
|
factory MessageType.fromStringLiteral(String value) {
|
||||||
|
return MessageType.values.firstWhere((element) => element._value == value);
|
||||||
|
}
|
||||||
|
const MessageType(String value): _value = value;
|
||||||
|
final String _value;
|
||||||
|
String get literal => _value;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Message extends JSONEncodable {
|
||||||
|
final int _userid;
|
||||||
|
final int _targetid;
|
||||||
|
final MessageType _contenttype;
|
||||||
|
final String _content;
|
||||||
|
final int _timestamp;
|
||||||
|
late final String _contentmd5;
|
||||||
|
final LocalFile? _payload;
|
||||||
|
|
||||||
|
Message({
|
||||||
|
required int userid,
|
||||||
|
required int targetid,
|
||||||
|
required MessageType contenttype,
|
||||||
|
required String content,
|
||||||
|
LocalFile? payload,
|
||||||
|
required int token
|
||||||
|
}):
|
||||||
|
_userid = userid,
|
||||||
|
_targetid = targetid,
|
||||||
|
_contenttype = contenttype,
|
||||||
|
_content = base64.encode(utf8.encode(content)),
|
||||||
|
_timestamp = DateTime.now().millisecondsSinceEpoch,
|
||||||
|
_payload = payload {
|
||||||
|
_contentmd5 = md5.convert(
|
||||||
|
utf8.encode(content)
|
||||||
|
..addAll(Uint8List(4)..buffer.asInt32List()[0] = userid)
|
||||||
|
..addAll(Uint8List(4)..buffer.asInt32List()[0] = targetid)
|
||||||
|
..addAll(Uint8List(4)..buffer.asInt32List()[0] = _timestamp)
|
||||||
|
).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
Message.fromJSONObject({
|
||||||
|
required Map<String, Object?> jsonObject,
|
||||||
|
LocalFile? payload
|
||||||
|
}):
|
||||||
|
_userid = jsonObject['userid'] as int,
|
||||||
|
_targetid = jsonObject['targetid'] as int,
|
||||||
|
_contenttype = MessageType.fromStringLiteral(jsonObject['contenttype'] as String),
|
||||||
|
_content = jsonObject['content'] as String,
|
||||||
|
_timestamp = jsonObject['timestamp'] as int,
|
||||||
|
_contentmd5 = jsonObject['md5encoded'] as String,
|
||||||
|
_payload = payload;
|
||||||
|
|
||||||
|
int get senderID => _userid;
|
||||||
|
int get recieverID => _targetid;
|
||||||
|
MessageType get type => _contenttype;
|
||||||
|
String get contentDecoded => utf8.decode(base64.decode(_content));
|
||||||
|
String get contentEncoded => _content;
|
||||||
|
String get contentmd5 => _contentmd5;
|
||||||
|
int get timeStamp => _timestamp;
|
||||||
|
LocalFile? get payload => _payload;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, Object?> get jsonObject => {
|
||||||
|
'userid': _userid,
|
||||||
|
'targetid': _targetid,
|
||||||
|
'contenttype': _contenttype.literal,
|
||||||
|
'content': _content,
|
||||||
|
'timestamp': _timestamp,
|
||||||
|
'md5Encoded': _contentmd5,
|
||||||
|
'filemd5': payload?.filemd5
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
* @Author : Linloir
|
|
||||||
* @Date : 2022-10-11 10:30:05
|
|
||||||
* @LastEditTime : 2022-10-11 10:30:12
|
|
||||||
* @Description :
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum MessageType {
|
|
||||||
plaintext('plaintext'),
|
|
||||||
file('file'),
|
|
||||||
image('image');
|
|
||||||
|
|
||||||
factory MessageType.fromStringLiteral(String value) {
|
|
||||||
return MessageType.values.firstWhere((element) => element._value == value);
|
|
||||||
}
|
|
||||||
const MessageType(String value): _value = value;
|
|
||||||
final String _value;
|
|
||||||
String get literal => _value;
|
|
||||||
}
|
|
||||||
44
lib/repositories/common_models/useridentity.dart
Normal file
44
lib/repositories/common_models/useridentity.dart
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* @Author : Linloir
|
||||||
|
* @Date : 2022-10-11 15:06:42
|
||||||
|
* @LastEditTime : 2022-10-11 15:39:38
|
||||||
|
* @Description :
|
||||||
|
*/
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:crypto/crypto.dart';
|
||||||
|
import 'package:tcp_client/repositories/common_models/json_encodable.dart';
|
||||||
|
|
||||||
|
class UserIdentity extends JSONEncodable {
|
||||||
|
final String _username;
|
||||||
|
final String _oldPasswd;
|
||||||
|
final String? _newPasswd;
|
||||||
|
|
||||||
|
UserIdentity({
|
||||||
|
required String username,
|
||||||
|
required String password,
|
||||||
|
String? newPassword
|
||||||
|
}):
|
||||||
|
_username = base64.encode(utf8.encode(username)),
|
||||||
|
_oldPasswd = md5.convert(password.codeUnits).toString(),
|
||||||
|
_newPasswd = newPassword != null ?
|
||||||
|
md5.convert(newPassword.codeUnits).toString() : null;
|
||||||
|
|
||||||
|
UserIdentity.fromJSONObject({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}):
|
||||||
|
_username = jsonObject['username'] as String,
|
||||||
|
_oldPasswd = jsonObject['passwd'] as String,
|
||||||
|
_newPasswd = jsonObject['newPasswd'] as String?;
|
||||||
|
|
||||||
|
String get userName => utf8.decode(base64.decode(_username));
|
||||||
|
String get password => _oldPasswd;
|
||||||
|
String? get newPassword => _newPasswd;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, Object?> get jsonObject => {
|
||||||
|
'username': _username,
|
||||||
|
'passwd': _oldPasswd,
|
||||||
|
'newPasswd': _newPasswd
|
||||||
|
};
|
||||||
|
}
|
||||||
41
lib/repositories/common_models/userinfo.dart
Normal file
41
lib/repositories/common_models/userinfo.dart
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* @Author : Linloir
|
||||||
|
* @Date : 2022-10-11 14:30:10
|
||||||
|
* @LastEditTime : 2022-10-11 15:39:13
|
||||||
|
* @Description :
|
||||||
|
*/
|
||||||
|
|
||||||
|
import 'package:tcp_client/repositories/common_models/json_encodable.dart';
|
||||||
|
|
||||||
|
class UserInfo extends JSONEncodable {
|
||||||
|
final int _userid;
|
||||||
|
final String _username;
|
||||||
|
final String? _avatar;
|
||||||
|
|
||||||
|
const UserInfo({
|
||||||
|
required int userid,
|
||||||
|
required String username,
|
||||||
|
String? avatar
|
||||||
|
}):
|
||||||
|
_userid = userid,
|
||||||
|
_username = username,
|
||||||
|
_avatar = avatar;
|
||||||
|
|
||||||
|
UserInfo.fromJSONObject({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}):
|
||||||
|
_userid = jsonObject['userid'] as int,
|
||||||
|
_username = jsonObject['username'] as String,
|
||||||
|
_avatar = jsonObject['avatar'] as String?;
|
||||||
|
|
||||||
|
int get userID => _userid;
|
||||||
|
String get userName => _username;
|
||||||
|
String? get avatarEncoded => _avatar;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, Object?> get jsonObject => {
|
||||||
|
'userid': _userid,
|
||||||
|
'username': _username,
|
||||||
|
'avatar': _avatar
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -1,6 +0,0 @@
|
|||||||
/*
|
|
||||||
* @Author : Linloir
|
|
||||||
* @Date : 2022-10-11 11:02:19
|
|
||||||
* @LastEditTime : 2022-10-11 11:02:19
|
|
||||||
* @Description :
|
|
||||||
*/
|
|
||||||
@ -1,16 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-11 09:44:03
|
* @Date : 2022-10-11 09:44:03
|
||||||
* @LastEditTime : 2022-10-11 11:37:13
|
* @LastEditTime : 2022-10-11 16:01:54
|
||||||
* @Description : Abstract TCP request class
|
* @Description : Abstract TCP request class
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export 'package:tcp_client/repositories/online_service_repository/models/tcp_request.dart';
|
export 'package:tcp_client/repositories/tcp_repository/models/tcp_request.dart';
|
||||||
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:crypto/crypto.dart';
|
import 'package:tcp_client/repositories/common_models/message.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:tcp_client/repositories/common_models/useridentity.dart';
|
||||||
import 'package:tcp_client/repositories/common_models/message_type.dart';
|
import 'package:tcp_client/repositories/common_models/userinfo.dart';
|
||||||
import 'package:tcp_client/repositories/file_repository/models/local_file.dart';
|
import 'package:tcp_client/repositories/file_repository/models/local_file.dart';
|
||||||
|
|
||||||
enum TCPRequestType {
|
enum TCPRequestType {
|
||||||
@ -68,43 +68,27 @@ class CheckStateRequest extends TCPRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class RegisterRequest extends TCPRequest {
|
class RegisterRequest extends TCPRequest {
|
||||||
final String _username;
|
final UserIdentity _identity;
|
||||||
final String _password;
|
|
||||||
|
|
||||||
RegisterRequest({
|
RegisterRequest({
|
||||||
required username,
|
required UserIdentity identity,
|
||||||
required password,
|
|
||||||
required token
|
required token
|
||||||
}):
|
}): _identity = identity, super(type: TCPRequestType.register, token: token);
|
||||||
_username = username,
|
|
||||||
_password = md5.convert(password.codeUnits).toString(),
|
|
||||||
super(type: TCPRequestType.register, token: token);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, Object?> get body => {
|
Map<String, Object?> get body => _identity.jsonObject;
|
||||||
'username': _username,
|
|
||||||
'passwd': _password
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class LoginRequest extends TCPRequest {
|
class LoginRequest extends TCPRequest {
|
||||||
final String _username;
|
final UserIdentity _identity;
|
||||||
final String _password;
|
|
||||||
|
|
||||||
LoginRequest({
|
LoginRequest({
|
||||||
required String username,
|
required UserIdentity identity,
|
||||||
required String password,
|
required token
|
||||||
required int token
|
}): _identity = identity, super(type: TCPRequestType.login, token: token);
|
||||||
}):
|
|
||||||
_username = username,
|
|
||||||
_password = md5.convert(password.codeUnits).toString(),
|
|
||||||
super(type: TCPRequestType.login, token: token);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, Object?> get body => {
|
Map<String, Object?> get body => _identity.jsonObject;
|
||||||
'username': _username,
|
|
||||||
'passwd': _password
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class LogoutRequest extends TCPRequest {
|
class LogoutRequest extends TCPRequest {
|
||||||
@ -122,97 +106,43 @@ class GetProfileRequest extends TCPRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ModifyPasswordRequest extends TCPRequest {
|
class ModifyPasswordRequest extends TCPRequest {
|
||||||
final String _username;
|
final UserIdentity _identity;
|
||||||
final String _oldPassword;
|
|
||||||
final String _newPassword;
|
|
||||||
|
|
||||||
ModifyPasswordRequest({
|
ModifyPasswordRequest({
|
||||||
required String username,
|
required UserIdentity identity,
|
||||||
required String oldPassword,
|
required token
|
||||||
required String newPassowrd,
|
}): _identity = identity, super(type: TCPRequestType.modifyPassword, token: token);
|
||||||
required int token
|
|
||||||
}):
|
|
||||||
_username = username,
|
|
||||||
_oldPassword = md5.convert(oldPassword.codeUnits).toString(),
|
|
||||||
_newPassword = md5.convert(newPassowrd.codeUnits).toString(),
|
|
||||||
super(type: TCPRequestType.modifyPassword, token: token);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, Object?> get body => {
|
Map<String, Object?> get body => _identity.jsonObject;
|
||||||
'username': _username,
|
|
||||||
'passwd': _oldPassword,
|
|
||||||
'newPasswd': _newPassword
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ModifyProfileRequest extends TCPRequest {
|
class ModifyProfileRequest extends TCPRequest {
|
||||||
final int _userid;
|
final UserInfo _userinfo;
|
||||||
final String _username;
|
|
||||||
final String _avatar;
|
|
||||||
|
|
||||||
const ModifyProfileRequest ({
|
const ModifyProfileRequest ({
|
||||||
required int userid, //Note: This can be fetched from local_service_repository
|
required UserInfo userInfo,
|
||||||
required String username,
|
|
||||||
required String avatar,
|
|
||||||
required int token
|
required int token
|
||||||
}):
|
}): _userinfo = userInfo, super(type: TCPRequestType.modifyProfile, token: token);
|
||||||
_userid = userid,
|
|
||||||
_username = username,
|
|
||||||
_avatar = avatar,
|
|
||||||
super(type: TCPRequestType.modifyProfile, token: token);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, Object?> get body => {
|
Map<String, Object?> get body => _userinfo.jsonObject;
|
||||||
'userid': _userid,
|
|
||||||
'username': _username,
|
|
||||||
'avatar': _avatar
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class SendMessageRequest extends TCPRequest {
|
class SendMessageRequest extends TCPRequest {
|
||||||
final int _userid;
|
final Message _message;
|
||||||
final int _targetid;
|
|
||||||
final MessageType _contenttype;
|
|
||||||
final String _content;
|
|
||||||
final int _timestamp;
|
|
||||||
late final String _contentmd5;
|
|
||||||
final LocalFile? _payload;
|
|
||||||
|
|
||||||
SendMessageRequest({
|
SendMessageRequest({
|
||||||
required int userid,
|
required Message message,
|
||||||
required int targetid,
|
|
||||||
required MessageType contenttype,
|
|
||||||
required String content,
|
|
||||||
LocalFile? payload,
|
|
||||||
required int token
|
required int token
|
||||||
}):
|
}):
|
||||||
_userid = userid,
|
_message = message,
|
||||||
_targetid = targetid,
|
super(type: TCPRequestType.sendMessage, token: token);
|
||||||
_contenttype = contenttype,
|
|
||||||
_content = base64.encode(utf8.encode(content)),
|
|
||||||
_timestamp = DateTime.now().millisecondsSinceEpoch,
|
|
||||||
_payload = payload,
|
|
||||||
super(type: TCPRequestType.sendMessage, token: token) {
|
|
||||||
_contentmd5 = md5.convert(
|
|
||||||
utf8.encode(content)
|
|
||||||
..addAll(Uint8List(4)..buffer.asInt32List()[0] = userid)
|
|
||||||
..addAll(Uint8List(4)..buffer.asInt32List()[0] = targetid)
|
|
||||||
..addAll(Uint8List(4)..buffer.asInt32List()[0] = _timestamp)
|
|
||||||
).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, Object?> get body => {
|
Map<String, Object?> get body => _message.jsonObject;
|
||||||
'userid': _userid,
|
|
||||||
'targetid': _targetid,
|
|
||||||
'contenttype': _contenttype.literal,
|
|
||||||
'content': _content,
|
|
||||||
'timestamp': _timestamp,
|
|
||||||
'md5Encoded': _contentmd5,
|
|
||||||
'filemd5': _payload?.filemd5
|
|
||||||
};
|
|
||||||
|
|
||||||
LocalFile? get payload => _payload;
|
Message get message => _message;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FetchMessageRequest extends TCPRequest {
|
class FetchMessageRequest extends TCPRequest {
|
||||||
246
lib/repositories/tcp_repository/models/tcp_response.dart
Normal file
246
lib/repositories/tcp_repository/models/tcp_response.dart
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
/*
|
||||||
|
* @Author : Linloir
|
||||||
|
* @Date : 2022-10-11 11:02:19
|
||||||
|
* @LastEditTime : 2022-10-11 16:00:53
|
||||||
|
* @Description :
|
||||||
|
*/
|
||||||
|
|
||||||
|
import 'package:tcp_client/repositories/common_models/message.dart';
|
||||||
|
import 'package:tcp_client/repositories/common_models/userinfo.dart';
|
||||||
|
import 'package:tcp_client/repositories/file_repository/models/local_file.dart';
|
||||||
|
|
||||||
|
enum TCPResponseType {
|
||||||
|
token ('TOKEN'), //Only exists when server is sending message
|
||||||
|
checkState ('STATE'), //Check login state for device token
|
||||||
|
register ('REGISTER'), //Register new user
|
||||||
|
login ('LOGIN'), //Login via username and password
|
||||||
|
logout ('LOGOUT'), //Logout for current device token
|
||||||
|
profile ('PROFILE'), //Fetch current logged in user profile
|
||||||
|
modifyPassword('MODIFYPASSWD'), //Modify user password
|
||||||
|
modifyProfile ('MODIFYPROFILE'), //Modify user profile
|
||||||
|
sendMessage ('SENDMSG'), //Send message
|
||||||
|
forwardMessage('FORWARDMSG'), //Forward message
|
||||||
|
fetchMessage ('FETCHMSG'), //Fetch message
|
||||||
|
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
|
||||||
|
addContact ('ADDCONTACT'), //Add one-way relation to a user
|
||||||
|
fetchContact ('FETCHCONTACT'), //Fetch all contacts, including requesting and pending
|
||||||
|
unknown ('UNKNOWN'); //Wrong command
|
||||||
|
|
||||||
|
const TCPResponseType(String value): _value = value;
|
||||||
|
final String _value;
|
||||||
|
String get value => _value;
|
||||||
|
|
||||||
|
//Construct the enum type by value
|
||||||
|
factory TCPResponseType.fromValue(String value) {
|
||||||
|
return TCPResponseType.values.firstWhere((element) => element._value == value, orElse: () => TCPResponseType.unknown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum TCPResponseStatus {
|
||||||
|
ok ('OK'),
|
||||||
|
err ('ERR'),
|
||||||
|
unknown ('UNKNOWN');
|
||||||
|
|
||||||
|
const TCPResponseStatus(String value): _value = value;
|
||||||
|
final String _value;
|
||||||
|
String get value => _value;
|
||||||
|
|
||||||
|
//Construct the enum type by value
|
||||||
|
factory TCPResponseStatus.fromValue(String value) {
|
||||||
|
return TCPResponseStatus.values.firstWhere((element) => element._value == value, orElse: () => TCPResponseStatus.unknown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class TCPResponse {
|
||||||
|
late final TCPResponseType _type;
|
||||||
|
late final TCPResponseStatus _status;
|
||||||
|
late final String? _info;
|
||||||
|
|
||||||
|
TCPResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}) {
|
||||||
|
_type = TCPResponseType.fromValue(jsonObject['response'] as String);
|
||||||
|
_status = TCPResponseStatus.fromValue(jsonObject['status'] as String);
|
||||||
|
_info = jsonObject['info'] as String?;
|
||||||
|
}
|
||||||
|
|
||||||
|
TCPResponseType get type => _type;
|
||||||
|
TCPResponseStatus get status => _status;
|
||||||
|
String? get info => _info;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SetTokenReponse extends TCPResponse {
|
||||||
|
final int _token;
|
||||||
|
|
||||||
|
SetTokenReponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}):
|
||||||
|
_token = (jsonObject['body'] as Map<String, Object?>)['tokenid'] as int,
|
||||||
|
super(jsonObject: jsonObject);
|
||||||
|
|
||||||
|
int get token => _token;
|
||||||
|
}
|
||||||
|
|
||||||
|
class CheckStateResponse extends TCPResponse {
|
||||||
|
late final UserInfo _userInfo;
|
||||||
|
|
||||||
|
CheckStateResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_userInfo = UserInfo.fromJSONObject(jsonObject: jsonObject['body'] as Map<String, Object?>);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserInfo get userInfo => _userInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
class RegisterResponse extends TCPResponse {
|
||||||
|
late final UserInfo _userInfo;
|
||||||
|
|
||||||
|
RegisterResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_userInfo = UserInfo.fromJSONObject(jsonObject: jsonObject['body'] as Map<String, Object?>);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserInfo get userInfo => _userInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
class LoginResponse extends TCPResponse {
|
||||||
|
late final UserInfo _userInfo;
|
||||||
|
|
||||||
|
LoginResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_userInfo = UserInfo.fromJSONObject(jsonObject: jsonObject['body'] as Map<String, Object?>);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserInfo get userInfo => _userInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
class LogoutResponse extends TCPResponse {
|
||||||
|
LogoutResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetProfileResponse extends TCPResponse {
|
||||||
|
late final UserInfo _userInfo;
|
||||||
|
|
||||||
|
GetProfileResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_userInfo = UserInfo.fromJSONObject(jsonObject: jsonObject['body'] as Map<String, Object?>);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserInfo get userInfo => _userInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ModifyPasswordResponse extends TCPResponse {
|
||||||
|
ModifyPasswordResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ModifyProfileResponse extends TCPResponse {
|
||||||
|
late final UserInfo _userInfo;
|
||||||
|
|
||||||
|
ModifyProfileResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_userInfo = UserInfo.fromJSONObject(jsonObject: jsonObject['body'] as Map<String, Object?>);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserInfo get userInfo => _userInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SendMessageResponse extends TCPResponse {
|
||||||
|
SendMessageResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ForwardMessageResponse extends TCPResponse {
|
||||||
|
late final Message _message;
|
||||||
|
|
||||||
|
ForwardMessageResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_message = Message.fromJSONObject(jsonObject: jsonObject['body'] as Map<String, Object?>);
|
||||||
|
}
|
||||||
|
|
||||||
|
Message get message => _message;
|
||||||
|
}
|
||||||
|
|
||||||
|
class FetchMessageResponse extends TCPResponse {
|
||||||
|
late final List<Message> _messages;
|
||||||
|
|
||||||
|
FetchMessageResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_messages = ((jsonObject['body'] as Map<String, Object?>)['messages'] as List)
|
||||||
|
.map((e) => Message.fromJSONObject(jsonObject: e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Message> get messages => _messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
class FindFileResponse extends TCPResponse {
|
||||||
|
FindFileResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject);
|
||||||
|
|
||||||
|
bool get foundIdentical => status == TCPResponseStatus.ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
class FetchFileResponse extends TCPResponse {
|
||||||
|
final LocalFile _payload;
|
||||||
|
|
||||||
|
FetchFileResponse({
|
||||||
|
required Map<String, Object?> jsonObject,
|
||||||
|
required LocalFile payload
|
||||||
|
}): _payload = payload, super(jsonObject: jsonObject);
|
||||||
|
|
||||||
|
LocalFile get payload => _payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SearchUserResponse extends TCPResponse {
|
||||||
|
late final UserInfo _userInfo;
|
||||||
|
|
||||||
|
SearchUserResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
_userInfo = UserInfo.fromJSONObject(jsonObject: jsonObject['body'] as Map<String, Object?>);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserInfo get userInfo => _userInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
class AddContactResponse extends TCPResponse {
|
||||||
|
AddContactResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
class FetchContactResponse extends TCPResponse {
|
||||||
|
late final List<UserInfo> _added;
|
||||||
|
late final List<UserInfo> _pending;
|
||||||
|
late final List<UserInfo> _requesting;
|
||||||
|
|
||||||
|
FetchContactResponse({
|
||||||
|
required Map<String, Object?> jsonObject
|
||||||
|
}): super(jsonObject: jsonObject) {
|
||||||
|
var body = jsonObject['body'] as Map<String, Object?>;
|
||||||
|
var rawAddedContacts = body['contacts'] as List;
|
||||||
|
var rawPendingContacts = body['pending'] as List;
|
||||||
|
var rawRequestingContacts = body['requesting'] as List;
|
||||||
|
_added = rawAddedContacts.map((e) => UserInfo.fromJSONObject(jsonObject: e)).toList();
|
||||||
|
_pending = rawPendingContacts.map((e) => UserInfo.fromJSONObject(jsonObject: e)).toList();
|
||||||
|
_requesting = rawRequestingContacts.map((e) => UserInfo.fromJSONObject(jsonObject: e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<UserInfo> get addedContacts => _added;
|
||||||
|
List<UserInfo> get pendingContacts => _pending;
|
||||||
|
List<UserInfo> get requestingContacts => _requesting;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user