veilid/veilid-flutter/lib/veilid_state.dart

240 lines
6.2 KiB
Dart
Raw Normal View History

2023-05-29 19:24:57 +00:00
import 'dart:typed_data';
import 'package:change_case/change_case.dart';
2023-07-05 22:48:06 +00:00
import 'package:freezed_annotation/freezed_annotation.dart';
2023-05-29 19:24:57 +00:00
import 'veilid.dart';
2023-07-05 22:48:06 +00:00
part 'veilid_state.freezed.dart';
part 'veilid_state.g.dart';
2023-05-29 19:24:57 +00:00
//////////////////////////////////////
/// AttachmentState
enum AttachmentState {
detached,
attaching,
attachedWeak,
attachedGood,
attachedStrong,
fullyAttached,
overAttached,
detaching;
2023-07-25 05:04:22 +00:00
factory AttachmentState.fromJson(dynamic j) =>
AttachmentState.values.byName((j as String).toCamelCase());
2023-07-30 19:57:06 +00:00
String toJson() => name.toPascalCase();
2023-05-29 19:24:57 +00:00
}
//////////////////////////////////////
/// VeilidLogLevel
enum VeilidLogLevel {
error,
warn,
info,
debug,
trace;
2023-07-25 05:04:22 +00:00
factory VeilidLogLevel.fromJson(dynamic j) =>
VeilidLogLevel.values.byName((j as String).toCamelCase());
2023-07-30 19:57:06 +00:00
String toJson() => name.toPascalCase();
2023-05-29 19:24:57 +00:00
}
////////////
2023-07-05 22:48:06 +00:00
@freezed
class LatencyStats with _$LatencyStats {
const factory LatencyStats({
required TimestampDuration fastest,
required TimestampDuration average,
required TimestampDuration slowest,
}) = _LatencyStats;
2023-07-25 05:04:22 +00:00
factory LatencyStats.fromJson(dynamic json) =>
_$LatencyStatsFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
////////////
2023-07-05 22:48:06 +00:00
@freezed
class TransferStats with _$TransferStats {
const factory TransferStats({
required BigInt total,
required BigInt maximum,
required BigInt average,
required BigInt minimum,
}) = _TransferStats;
2023-07-25 05:04:22 +00:00
factory TransferStats.fromJson(dynamic json) =>
_$TransferStatsFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
////////////
2023-07-05 22:48:06 +00:00
@freezed
class TransferStatsDownUp with _$TransferStatsDownUp {
const factory TransferStatsDownUp({
required TransferStats down,
required TransferStats up,
}) = _TransferStatsDownUp;
2023-07-25 05:04:22 +00:00
factory TransferStatsDownUp.fromJson(dynamic json) =>
_$TransferStatsDownUpFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
////////////
2023-07-05 22:48:06 +00:00
@freezed
class RPCStats with _$RPCStats {
const factory RPCStats({
required int messagesSent,
required int messagesRcvd,
required int questionsInFlight,
required Timestamp? lastQuestion,
required Timestamp? lastSeenTs,
required Timestamp? firstConsecutiveSeenTs,
required int recentLostAnswers,
required int failedToSend,
}) = _RPCStats;
2023-07-25 05:04:22 +00:00
factory RPCStats.fromJson(dynamic json) =>
_$RPCStatsFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
////////////
2023-07-05 22:48:06 +00:00
@freezed
class PeerStats with _$PeerStats {
const factory PeerStats({
required Timestamp timeAdded,
required RPCStats rpcStats,
2023-07-30 19:57:06 +00:00
required TransferStatsDownUp transfer,
LatencyStats? latency,
2023-07-05 22:48:06 +00:00
}) = _PeerStats;
2023-07-25 05:04:22 +00:00
factory PeerStats.fromJson(dynamic json) =>
_$PeerStatsFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
////////////
2023-07-05 22:48:06 +00:00
@freezed
class PeerTableData with _$PeerTableData {
const factory PeerTableData({
required List<TypedKey> nodeIds,
required String peerAddress,
required PeerStats peerStats,
}) = _PeerTableData;
2023-07-25 05:04:22 +00:00
factory PeerTableData.fromJson(dynamic json) =>
_$PeerTableDataFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
//////////////////////////////////////
/// VeilidUpdate
2023-07-06 03:53:08 +00:00
@Freezed(unionKey: 'kind', unionValueCase: FreezedUnionCase.pascal)
sealed class VeilidUpdate with _$VeilidUpdate {
const factory VeilidUpdate.log({
required VeilidLogLevel logLevel,
required String message,
String? backtrace,
}) = VeilidLog;
const factory VeilidUpdate.appMessage({
2024-03-17 14:54:37 +00:00
@Uint8ListJsonConverter.jsIsArray() required Uint8List message,
2023-07-30 19:57:06 +00:00
TypedKey? sender,
2024-03-08 05:17:38 +00:00
String? routeId,
2023-07-06 03:53:08 +00:00
}) = VeilidAppMessage;
const factory VeilidUpdate.appCall({
2024-03-17 14:54:37 +00:00
@Uint8ListJsonConverter.jsIsArray() required Uint8List message,
2023-07-30 19:57:06 +00:00
required String callId,
TypedKey? sender,
2024-03-08 05:17:38 +00:00
String? routeId,
2023-07-06 03:53:08 +00:00
}) = VeilidAppCall;
const factory VeilidUpdate.attachment(
{required AttachmentState state,
required bool publicInternetReady,
required bool localNetworkReady}) = VeilidUpdateAttachment;
const factory VeilidUpdate.network(
{required bool started,
required BigInt bpsDown,
required BigInt bpsUp,
required List<PeerTableData> peers}) = VeilidUpdateNetwork;
const factory VeilidUpdate.config({
required VeilidConfig config,
}) = VeilidUpdateConfig;
const factory VeilidUpdate.routeChange({
required List<String> deadRoutes,
required List<String> deadRemoteRoutes,
}) = VeilidUpdateRouteChange;
const factory VeilidUpdate.valueChange({
required TypedKey key,
required List<ValueSubkeyRange> subkeys,
required int count,
required ValueData? value,
2023-07-06 03:53:08 +00:00
}) = VeilidUpdateValueChange;
2024-02-16 16:19:26 +00:00
factory VeilidUpdate.fromJson(dynamic json) =>
_$VeilidUpdateFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
//////////////////////////////////////
/// VeilidStateAttachment
2023-07-06 03:53:08 +00:00
@freezed
class VeilidStateAttachment with _$VeilidStateAttachment {
const factory VeilidStateAttachment(
{required AttachmentState state,
required bool publicInternetReady,
required bool localNetworkReady}) = _VeilidStateAttachment;
2023-07-25 05:04:22 +00:00
factory VeilidStateAttachment.fromJson(dynamic json) =>
_$VeilidStateAttachmentFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
//////////////////////////////////////
/// VeilidStateNetwork
2023-07-06 03:53:08 +00:00
@freezed
class VeilidStateNetwork with _$VeilidStateNetwork {
const factory VeilidStateNetwork(
{required bool started,
required BigInt bpsDown,
required BigInt bpsUp,
required List<PeerTableData> peers}) = _VeilidStateNetwork;
2023-07-25 05:04:22 +00:00
factory VeilidStateNetwork.fromJson(dynamic json) =>
_$VeilidStateNetworkFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
//////////////////////////////////////
/// VeilidStateConfig
2023-07-06 03:53:08 +00:00
@freezed
class VeilidStateConfig with _$VeilidStateConfig {
const factory VeilidStateConfig({
required VeilidConfig config,
}) = _VeilidStateConfig;
2023-05-29 19:24:57 +00:00
2023-07-25 05:04:22 +00:00
factory VeilidStateConfig.fromJson(dynamic json) =>
_$VeilidStateConfigFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}
//////////////////////////////////////
/// VeilidState
2023-07-06 03:53:08 +00:00
@freezed
class VeilidState with _$VeilidState {
const factory VeilidState({
required VeilidStateAttachment attachment,
required VeilidStateNetwork network,
required VeilidStateConfig config,
}) = _VeilidState;
2023-07-25 05:04:22 +00:00
factory VeilidState.fromJson(dynamic json) =>
_$VeilidStateFromJson(json as Map<String, dynamic>);
2023-05-29 19:24:57 +00:00
}