Skip to content

Commit

Permalink
Use string for vector definition, use sequential
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed Sep 18, 2024
1 parent 137b973 commit d30a5ed
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 38 deletions.
28 changes: 0 additions & 28 deletions api/lib/src/models/table.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,8 @@ import 'vector.dart';

part 'table.mapper.dart';

class VectorMapHook extends MappingHook {
const VectorMapHook();

@override
Object? beforeDecode(Object? value) {
if (value is! List<dynamic>) {
return value;
}
return Map.fromEntries(value.map((entry) => MapEntry(entry, entry)));
}

@override
Object? afterEncode(Object? value) {
if (value is! Map) {
return value;
}
return value.entries.map((entry) {
final key = entry.key;
final value = entry.value;
return {
if (key is Map) ...key,
if (value is Map) ...value,
};
}).toList();
}
}

@MappableClass()
class GameTable with GameTableMappable {
@MappableField(hook: VectorMapHook())
final Map<VectorDefinition, TableCell> cells;
final ItemLocation? background;

Expand Down
2 changes: 1 addition & 1 deletion api/lib/src/models/table.mapper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class GameTableMapper extends ClassMapperBase<GameTable> {

static Map<VectorDefinition, TableCell> _$cells(GameTable v) => v.cells;
static const Field<GameTable, Map<VectorDefinition, TableCell>> _f$cells =
Field('cells', _$cells, opt: true, def: const {}, hook: VectorMapHook());
Field('cells', _$cells, opt: true, def: const {});
static ItemLocation? _$background(GameTable v) => v.background;
static const Field<GameTable, ItemLocation> _f$background =
Field('background', _$background, opt: true);
Expand Down
29 changes: 26 additions & 3 deletions api/lib/src/models/vector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ class VectorDefinition with VectorDefinitionMappable {

const VectorDefinition(this.x, this.y);

factory VectorDefinition.fromDisplay(String displayString) {
final parts = displayString
.replaceAll('(', '')
.replaceAll(')', '')
.split(',')
.map((e) => e.trim())
.toList();
final x = int.parse(parts[0]);
final y = int.parse(parts[1]);
return VectorDefinition(x, y);
}

static const zero = VectorDefinition(0, 0);
static const one = VectorDefinition(1, 1);

Expand All @@ -22,9 +34,20 @@ class VectorDefinitionHook extends MappingHook {

@override
Object? beforeDecode(Object? value) {
if (value is List) {
return VectorDefinition(value[0] as int, value[1] as int);
if (value is Iterable) {
return VectorDefinition(value.first as int, value.last as int);
}
if (value is! String) {
return value;
}
return VectorDefinition.fromDisplay(value);
}

@override
Object? beforeEncode(Object? value) {
if (value is! VectorDefinition) {
return value;
}
return value;
return value.toDisplayString();
}
}
3 changes: 2 additions & 1 deletion app/lib/bloc/world/bloc.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:bloc_concurrency/bloc_concurrency.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart' show ColorScheme;
import 'package:flutter_bloc/flutter_bloc.dart';
Expand Down Expand Up @@ -61,7 +62,7 @@ class WorldBloc extends Bloc<PlayableWorldEvent, ClientWorldState> {
} on FatalServerEventError catch (e) {
state.multiplayer.raiseError(e);
}
});
}, transformer: sequential());
on<ColorSchemeChanged>((event, emit) {
emit(state.copyWith(colorScheme: event.colorScheme));
});
Expand Down
8 changes: 8 additions & 0 deletions app/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "8.1.4"
bloc_concurrency:
dependency: "direct main"
description:
name: bloc_concurrency
sha256: "456b7a3616a7c1ceb975c14441b3f198bf57d81cb95b7c6de5cb0c60201afcd8"
url: "https://pub.dev"
source: hosted
version: "0.2.5"
boolean_selector:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ dependencies:
archive: ^3.4.10
flutter_markdown: ^0.7.3+1
markdown: ^7.2.2
bloc_concurrency: ^0.2.5
dependency_overrides:
flutter_secure_storage_web:
git:
Expand Down
18 changes: 13 additions & 5 deletions server/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'dart:async';
import 'dart:io';
import 'dart:isolate';

import 'package:bloc/bloc.dart';
import 'package:bloc_concurrency/bloc_concurrency.dart';
import 'package:consoler/consoler.dart';
import 'package:networker/networker.dart';
import 'package:networker_socket/server.dart';
Expand All @@ -13,6 +15,12 @@ import 'package:quokka_server/programs/save.dart';
import 'package:quokka_server/programs/say.dart';
import 'package:quokka_server/programs/stop.dart';

Future<WorldState?> _computeEvent(ServerWorldEvent event, WorldState state,
Map<String, FileMetadata> signature) {
return Isolate.run(
() => processServerEvent(event, state, signature: signature));
}

final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
final Consoler consoler;
final ServerAssetManager assetManager;
Expand All @@ -30,13 +38,13 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
metadata: data.getMetadataOrDefault(),
info: data.getInfoOrDefault(),
)) {
on<ServerWorldEvent>((event, emit) {
final newState = processServerEvent(event, state,
signature: assetManager.createSignature());
if (newState == null) return null;
on<ServerWorldEvent>((event, emit) async {
final signature = assetManager.createSignature();
final newState = await _computeEvent(event, state, signature);
if (newState == null) return;
emit(newState);
return save();
});
}, transformer: sequential());
}

static Future<QuokkaServer> load({
Expand Down
16 changes: 16 additions & 0 deletions server/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "8.1.4"
bloc_concurrency:
dependency: "direct main"
description:
name: bloc_concurrency
sha256: "456b7a3616a7c1ceb975c14441b3f198bf57d81cb95b7c6de5cb0c60201afcd8"
url: "https://pub.dev"
source: hosted
version: "0.2.5"
boolean_selector:
dependency: transitive
description:
Expand Down Expand Up @@ -370,6 +378,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.2"
stream_transform:
dependency: transitive
description:
name: stream_transform
sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions server/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dependencies:
path: ^1.9.0
quokka_api:
path: ../api
bloc_concurrency: ^0.2.5

dev_dependencies:
lints: ^4.0.0
Expand Down

0 comments on commit d30a5ed

Please sign in to comment.