From 31a292e8d021a047bed8ed33e5512bbeaac61c04 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Mon, 8 Apr 2024 10:22:12 +0200 Subject: [PATCH] Umbau MQTT --- assets/json/bootstrap_response.json | 6 + lib/model/rank.dart | 41 + lib/model/rank.g.dart | 1086 +++++++++++++++++ .../messages/refresh_badges_message.dart | 4 + lib/tools/mqtt_core.dart | 42 +- pubspec.yaml | 2 +- 6 files changed, 1160 insertions(+), 21 deletions(-) create mode 100644 assets/json/bootstrap_response.json create mode 100644 lib/model/rank.dart create mode 100644 lib/model/rank.g.dart create mode 100644 lib/tools/messages/refresh_badges_message.dart diff --git a/assets/json/bootstrap_response.json b/assets/json/bootstrap_response.json new file mode 100644 index 0000000..3209fdd --- /dev/null +++ b/assets/json/bootstrap_response.json @@ -0,0 +1,6 @@ +{ + "broker": "mqtt://18.156.72.225:1883", + "id": "100/1/104400", + "to_server": "/appserver/to_server/", + "from_server": "/appserver/from_server/" +} \ No newline at end of file diff --git a/lib/model/rank.dart b/lib/model/rank.dart new file mode 100644 index 0000000..a2f852d --- /dev/null +++ b/lib/model/rank.dart @@ -0,0 +1,41 @@ +import 'package:isar/isar.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'rank.g.dart'; + +@collection +@JsonSerializable() +class Ranking { + late Id id; + + late String zip; + + late String area; + + late int time; + + late List vehicles; + + Ranking(); + + factory Ranking.fromJson(Map json) => _$RankingFromJson(json); + + Map toJson() => _$RankingToJson(this); +} + +@embedded +@JsonSerializable() +class Vehicle { + late int id; + + late int type; + + @JsonKey(name: 'self', defaultValue: false) + late bool? self; + + Vehicle(); + + factory Vehicle.fromJson(Map json) => _$VehicleFromJson(json); + + Map toJson() => _$VehicleToJson(this); +} diff --git a/lib/model/rank.g.dart b/lib/model/rank.g.dart new file mode 100644 index 0000000..a92b507 --- /dev/null +++ b/lib/model/rank.g.dart @@ -0,0 +1,1086 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'rank.dart'; + +// ************************************************************************** +// IsarCollectionGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +extension GetRankingCollection on Isar { + IsarCollection get rankings => this.collection(); +} + +const RankingSchema = CollectionSchema( + name: r'Ranking', + id: 923686411839286896, + properties: { + r'area': PropertySchema( + id: 0, + name: r'area', + type: IsarType.string, + ), + r'time': PropertySchema( + id: 1, + name: r'time', + type: IsarType.long, + ), + r'vehicles': PropertySchema( + id: 2, + name: r'vehicles', + type: IsarType.objectList, + target: r'Vehicle', + ), + r'zip': PropertySchema( + id: 3, + name: r'zip', + type: IsarType.string, + ) + }, + estimateSize: _rankingEstimateSize, + serialize: _rankingSerialize, + deserialize: _rankingDeserialize, + deserializeProp: _rankingDeserializeProp, + idName: r'id', + indexes: {}, + links: {}, + embeddedSchemas: {r'Vehicle': VehicleSchema}, + getId: _rankingGetId, + getLinks: _rankingGetLinks, + attach: _rankingAttach, + version: '3.1.0+1', +); + +int _rankingEstimateSize( + Ranking object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.area.length * 3; + bytesCount += 3 + object.vehicles.length * 3; + { + final offsets = allOffsets[Vehicle]!; + for (var i = 0; i < object.vehicles.length; i++) { + final value = object.vehicles[i]; + bytesCount += VehicleSchema.estimateSize(value, offsets, allOffsets); + } + } + bytesCount += 3 + object.zip.length * 3; + return bytesCount; +} + +void _rankingSerialize( + Ranking object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeString(offsets[0], object.area); + writer.writeLong(offsets[1], object.time); + writer.writeObjectList( + offsets[2], + allOffsets, + VehicleSchema.serialize, + object.vehicles, + ); + writer.writeString(offsets[3], object.zip); +} + +Ranking _rankingDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Ranking(); + object.area = reader.readString(offsets[0]); + object.id = id; + object.time = reader.readLong(offsets[1]); + object.vehicles = reader.readObjectList( + offsets[2], + VehicleSchema.deserialize, + allOffsets, + Vehicle(), + ) ?? + []; + object.zip = reader.readString(offsets[3]); + return object; +} + +P _rankingDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readString(offset)) as P; + case 1: + return (reader.readLong(offset)) as P; + case 2: + return (reader.readObjectList( + offset, + VehicleSchema.deserialize, + allOffsets, + Vehicle(), + ) ?? + []) as P; + case 3: + return (reader.readString(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +Id _rankingGetId(Ranking object) { + return object.id; +} + +List> _rankingGetLinks(Ranking object) { + return []; +} + +void _rankingAttach(IsarCollection col, Id id, Ranking object) { + object.id = id; +} + +extension RankingQueryWhereSort on QueryBuilder { + QueryBuilder anyId() { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(const IdWhereClause.any()); + }); + } +} + +extension RankingQueryWhere on QueryBuilder { + QueryBuilder idEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); + }); + } + + QueryBuilder idNotEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + if (query.whereSort == Sort.asc) { + return query + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ) + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ); + } else { + return query + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ) + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ); + } + }); + } + + QueryBuilder idGreaterThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: include), + ); + }); + } + + QueryBuilder idLessThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: include), + ); + }); + } + + QueryBuilder idBetween( + Id lowerId, + Id upperId, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); + }); + } +} + +extension RankingQueryFilter + on QueryBuilder { + QueryBuilder areaEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'area', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'area', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'area', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'area', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'area', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'area', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'area', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'area', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder areaIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'area', + value: '', + )); + }); + } + + QueryBuilder areaIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'area', + value: '', + )); + }); + } + + QueryBuilder idEqualTo(Id value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idGreaterThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idLessThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idBetween( + Id lower, + Id upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder timeEqualTo(int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'time', + value: value, + )); + }); + } + + QueryBuilder timeGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'time', + value: value, + )); + }); + } + + QueryBuilder timeLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'time', + value: value, + )); + }); + } + + QueryBuilder timeBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'time', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder vehiclesLengthEqualTo( + int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'vehicles', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder vehiclesIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'vehicles', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder vehiclesIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'vehicles', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder vehiclesLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'vehicles', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + vehiclesLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'vehicles', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder vehiclesLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'vehicles', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + + QueryBuilder zipEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'zip', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'zip', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'zip', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'zip', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'zip', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'zip', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'zip', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'zip', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder zipIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'zip', + value: '', + )); + }); + } + + QueryBuilder zipIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'zip', + value: '', + )); + }); + } +} + +extension RankingQueryObject + on QueryBuilder { + QueryBuilder vehiclesElement( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'vehicles'); + }); + } +} + +extension RankingQueryLinks + on QueryBuilder {} + +extension RankingQuerySortBy on QueryBuilder { + QueryBuilder sortByArea() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'area', Sort.asc); + }); + } + + QueryBuilder sortByAreaDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'area', Sort.desc); + }); + } + + QueryBuilder sortByTime() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'time', Sort.asc); + }); + } + + QueryBuilder sortByTimeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'time', Sort.desc); + }); + } + + QueryBuilder sortByZip() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'zip', Sort.asc); + }); + } + + QueryBuilder sortByZipDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'zip', Sort.desc); + }); + } +} + +extension RankingQuerySortThenBy + on QueryBuilder { + QueryBuilder thenByArea() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'area', Sort.asc); + }); + } + + QueryBuilder thenByAreaDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'area', Sort.desc); + }); + } + + QueryBuilder thenById() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.asc); + }); + } + + QueryBuilder thenByIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.desc); + }); + } + + QueryBuilder thenByTime() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'time', Sort.asc); + }); + } + + QueryBuilder thenByTimeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'time', Sort.desc); + }); + } + + QueryBuilder thenByZip() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'zip', Sort.asc); + }); + } + + QueryBuilder thenByZipDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'zip', Sort.desc); + }); + } +} + +extension RankingQueryWhereDistinct + on QueryBuilder { + QueryBuilder distinctByArea( + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'area', caseSensitive: caseSensitive); + }); + } + + QueryBuilder distinctByTime() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'time'); + }); + } + + QueryBuilder distinctByZip( + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'zip', caseSensitive: caseSensitive); + }); + } +} + +extension RankingQueryProperty + on QueryBuilder { + QueryBuilder idProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'id'); + }); + } + + QueryBuilder areaProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'area'); + }); + } + + QueryBuilder timeProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'time'); + }); + } + + QueryBuilder, QQueryOperations> vehiclesProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'vehicles'); + }); + } + + QueryBuilder zipProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'zip'); + }); + } +} + +// ************************************************************************** +// IsarEmbeddedGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const VehicleSchema = Schema( + name: r'Vehicle', + id: -21624847921258799, + properties: { + r'id': PropertySchema( + id: 0, + name: r'id', + type: IsarType.long, + ), + r'self': PropertySchema( + id: 1, + name: r'self', + type: IsarType.bool, + ), + r'type': PropertySchema( + id: 2, + name: r'type', + type: IsarType.long, + ) + }, + estimateSize: _vehicleEstimateSize, + serialize: _vehicleSerialize, + deserialize: _vehicleDeserialize, + deserializeProp: _vehicleDeserializeProp, +); + +int _vehicleEstimateSize( + Vehicle object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + return bytesCount; +} + +void _vehicleSerialize( + Vehicle object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeLong(offsets[0], object.id); + writer.writeBool(offsets[1], object.self); + writer.writeLong(offsets[2], object.type); +} + +Vehicle _vehicleDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Vehicle(); + object.id = reader.readLong(offsets[0]); + object.self = reader.readBoolOrNull(offsets[1]); + object.type = reader.readLong(offsets[2]); + return object; +} + +P _vehicleDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readLong(offset)) as P; + case 1: + return (reader.readBoolOrNull(offset)) as P; + case 2: + return (reader.readLong(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension VehicleQueryFilter + on QueryBuilder { + QueryBuilder idEqualTo(int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder selfIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'self', + )); + }); + } + + QueryBuilder selfIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'self', + )); + }); + } + + QueryBuilder selfEqualTo( + bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'self', + value: value, + )); + }); + } + + QueryBuilder typeEqualTo(int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'type', + value: value, + )); + }); + } + + QueryBuilder typeGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'type', + value: value, + )); + }); + } + + QueryBuilder typeLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'type', + value: value, + )); + }); + } + + QueryBuilder typeBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'type', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } +} + +extension VehicleQueryObject + on QueryBuilder {} + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +Ranking _$RankingFromJson(Map json) => Ranking() + ..id = json['id'] as int + ..zip = json['zip'] as String + ..area = json['area'] as String + ..time = json['time'] as int + ..vehicles = (json['vehicles'] as List) + .map((e) => Vehicle.fromJson(e as Map)) + .toList(); + +Map _$RankingToJson(Ranking instance) => { + 'id': instance.id, + 'zip': instance.zip, + 'area': instance.area, + 'time': instance.time, + 'vehicles': instance.vehicles, + }; + +Vehicle _$VehicleFromJson(Map json) => Vehicle() + ..id = json['id'] as int + ..type = json['type'] as int + ..self = json['self'] as bool? ?? false; + +Map _$VehicleToJson(Vehicle instance) => { + 'id': instance.id, + 'type': instance.type, + 'self': instance.self, + }; diff --git a/lib/tools/messages/refresh_badges_message.dart b/lib/tools/messages/refresh_badges_message.dart new file mode 100644 index 0000000..fb61c3e --- /dev/null +++ b/lib/tools/messages/refresh_badges_message.dart @@ -0,0 +1,4 @@ + +class RefreshBadgesMessage { + RefreshBadgesMessage(); +} \ No newline at end of file diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index 8bc6b26..e2ba519 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -97,14 +97,14 @@ class MqttCore { _mqttClient = MqttServerClient.withPort(_brokerUri, clientId, _brokerPort); _mqttClient.logging(on: false); - _mqttClient.keepAlivePeriod = 20; - _mqttClient.autoReconnect = false; + _mqttClient.keepAlivePeriod = 5; + _mqttClient.disconnectOnNoResponsePeriod = 10; + _mqttClient.autoReconnect = true; _mqttClient.onDisconnected = _clientDisconnected; + _mqttClient.onAutoReconnect = _clientDisconnected; + _mqttClient.onAutoReconnected = _clientConnected; _mqttClient.connectionMessage = MqttConnectMessage() .withClientIdentifier(await Util.getAppUuid()) - .withWillQos(MqttQos.atMostOnce) - .withWillTopic('willTopic') - .withWillMessage('willMessage') .authenticateAs("app", "apppwd"); await _mqttClient.connect(); @@ -121,13 +121,9 @@ class MqttCore { Util.logInfo('Verbindung zum MQTT-Broker fehlgeschlagen!'); MessageService().publish(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected)); - - _startReconnectTimer(); } } catch (ex) { - _startReconnectTimer(); - Util.logInfo('Verbindung zum MQTT-Broker fehlgeschlagen!: $ex'); MessageService().publish(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected)); @@ -350,7 +346,7 @@ class MqttCore { publishBinary(topic, gzipBytes!); } - void _startReconnectTimer() { + void _startBootstrapReconnectTimer() { connectionState = ConnectionStateEnum.notConnected; if (!_disconnectInProgress) { @@ -371,17 +367,23 @@ class MqttCore { } void _clientDisconnected() { - connectionState = ConnectionStateEnum.notConnected; - - _cancelTrackTimer(); - Util.logInfo("_clientDisconnected called"); - MessageService().publish(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected)); + connectionState = ConnectionStateEnum.notConnected; - if (!_disconnectInProgress) { - _startReconnectTimer(); - } + _startTrackTimer(); + + MessageService().publish(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected)); + } + + void _clientConnected() { + Util.logInfo("_clientDisconnected called"); + + connectionState = ConnectionStateEnum.connected; + + _initSession(); + + MessageService().publish(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.connected)); } void _processBootstrap() async { @@ -405,7 +407,7 @@ class MqttCore { var jsonMap = handshakeMessage.toJson(); var json = jsonEncode(jsonMap); - var uri = "https://init-x.assecutor.de/bootstrap?get_mqtt_broker=$json"; + String uri = "https://init-x.assecutor.de/bootstrap?get_mqtt_broker=$json"; Util.logInfo("Bootstrap request: $uri"); var response = await http.get(Uri.parse(uri)); @@ -421,7 +423,7 @@ class MqttCore { _connectToBroker(); } catch (ex) { - _startReconnectTimer(); + _startBootstrapReconnectTimer(); } } diff --git a/pubspec.yaml b/pubspec.yaml index 8e6dba2..d021e06 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 220.0.0+11 +version: 221.0.0+12 environment: sdk: '>=2.19.6 <3.0.0'