Skip to content

Commit

Permalink
Fix web issues
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed Oct 7, 2024
1 parent 5530971 commit f40ea11
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 25 deletions.
51 changes: 31 additions & 20 deletions app/lib/services/network.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,27 @@ const kBroadcastDelay = Duration(seconds: 1);

class NetworkService {
final SettingsCubit settingsCubit;
late final RawDatagramSocket _server;
RawDatagramSocket? _server;

final BehaviorSubject<List<(GameServer, LanProperty?)>> _servers =
BehaviorSubject.seeded([]);

NetworkService(this.settingsCubit);

Future<void> init() async {
if (kIsWeb) return;
_server =
await RawDatagramSocket.bind(InternetAddress.anyIPv4, kBroadcastPort);
_server.broadcastEnabled = true;
if (!kIsWeb) {
_server = (await RawDatagramSocket.bind(
InternetAddress.anyIPv4, kBroadcastPort))
..broadcastEnabled = true;
}
_fetchServers().listen((event) {
_servers.add(event);
});
}

void dispose() {
if (kIsWeb) return;
_server.close();
_server?.close();
}

Stream<List<(GameServer, LanProperty?)>> _fetchServers({
Expand All @@ -56,12 +57,17 @@ class NetworkService {
});
}

if (kIsWeb) return;
final settingsStream = settingsCubit.stream.map((event) => buildServers());

if (kIsWeb) {
yield* settingsStream;
return;
}
final serverStream = _server
.where((event) => event == RawSocketEvent.read)
?.where((event) => event == RawSocketEvent.read)
.map((RawSocketEvent event) {
removeOld();
final datagram = _server.receive();
final datagram = _server?.receive();
if (datagram != null) {
final message = String.fromCharCodes(datagram.data);
final property = LanPropertyMapper.fromJson(message);
Expand All @@ -79,8 +85,7 @@ class NetworkService {
.toList(),
);
});
final settingsStream = settingsCubit.stream.map((event) => buildServers());
yield* Rx.merge([serverStream, settingsStream]);
yield* Rx.merge([if (serverStream != null) serverStream, settingsStream]);
}

(Timer, RawDatagramSocket)? _broadcast;
Expand Down Expand Up @@ -109,12 +114,17 @@ class NetworkService {
}

Future<GameProperty?> fetchInfo(Uri address) async {
final response = await http.get(address, headers: {
HttpHeaders.contentTypeHeader: 'application/json',
'X-Quokka-Method': 'info',
});
try {
final response = await http.get(address, headers: {
HttpHeaders.contentTypeHeader: 'application/json',
'X-Quokka-Method': 'info',
});
if (response.statusCode != HttpStatus.ok) return null;

return GamePropertyMapper.fromJson(response.body);
return GamePropertyMapper.fromJson(response.body);
} catch (_) {
return null;
}
}

Stream<Map<GameServer, GameProperty?>> fetchServersWithProperties({
Expand All @@ -135,26 +145,27 @@ class NetworkService {
}

final returned = <GameServer, GameProperty?>{};
yield returned;

await for (final event in _servers) {
returned.removeWhere((key, value) => !event.any((e) => e.$1 == key));
for (final (server, _) in event) {
returned[server] = const GameProperty();
}
yield returned;

if (event.isEmpty) {
yield returned;
continue;
}

yield* Stream.fromFutures(event.map((e) async {
for (final e in event) {
try {
returned[e.$1] = await fetch(e.$1, e.$2);
} catch (_) {
returned[e.$1] = null;
}
return returned;
}));
yield returned;
}
}
}
}
2 changes: 1 addition & 1 deletion app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ version: 0.1.0+1
publish_to: none

environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.5.0 <4.0.0"
flutter: 3.24.3

dependencies:
Expand Down
2 changes: 1 addition & 1 deletion app/scripts/build.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
FLUTTER_VERSION=$(grep -oP 'flutter:\s*\K\d+\.\d+\.\d+' pubspec.yaml)
QUOKKA_FLAVOR=$([[ "$QUOKKA_NIGHTLY" == "true" ]] && echo "nightly" || echo "stable")
if [ "$QUOKKA_NIGHTLY" = "true" ]; then cp -r web_nightly/** web; fi && if cd flutter; then git pull && cd ..; else git clone https://github.com/flutter/flutter.git -b $FLUTTER_VERSION; fi && flutter/bin/flutter config --enable-web && cd ../tools && ../app/flutter/bin/dart pub get && cd .. && app/flutter/bin/dart run tools/generate.dart && cd app && flutter/bin/flutter pub get && flutter/bin/dart run build_runner build --delete-conflicting-outputs && flutter/bin/flutter build web --wasm --release --dart-define=FLUTTER_WEB_CANVASKIT_URL=/canvaskit/ --dart-define=flavor=$QUOKKA_FLAVOR
if [ "$QUOKKA_NIGHTLY" = "true" ]; then cp -r web_nightly/** web; fi && if cd flutter; then git pull && cd ..; else git clone https://github.com/flutter/flutter.git -b $FLUTTER_VERSION; fi && flutter/bin/flutter config --enable-web && cd ../tools && ../app/flutter/bin/dart pub get && cd .. && app/flutter/bin/dart run tools/generate.dart && cd app && flutter/bin/flutter pub get && flutter/bin/dart run build_runner build --delete-conflicting-outputs && flutter/bin/flutter build web --wasm --release --no-web-resources-cdn --dart-define=flavor=$QUOKKA_FLAVOR
7 changes: 4 additions & 3 deletions server/lib/src/server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ final class QuokkaServer extends Bloc<PlayableWorldEvent, WorldState> {
await _server?.onClosed.first;
}

void _onClientEvent(NetworkerPacket<WorldEvent?> packet) async {
void _onClientEvent(NetworkerPacket<WorldEvent?> packet,
[bool force = false]) async {
final data = packet.data;
(ServerWorldEvent, Channel)? process;
try {
Expand Down Expand Up @@ -232,8 +233,8 @@ final class QuokkaServer extends Bloc<PlayableWorldEvent, WorldState> {
consoler.dispose();
}

void process(WorldEvent event) {
_onClientEvent(NetworkerPacket(event, kAuthorityChannel));
void process(WorldEvent event, [bool force = false]) {
_onClientEvent(NetworkerPacket(event, kAuthorityChannel), force);
}

bool kick(int id) {
Expand Down

0 comments on commit f40ea11

Please sign in to comment.