Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Send game info on type info request
Browse files Browse the repository at this point in the history
CodeDoctorDE committed Sep 8, 2024
1 parent 5f0878d commit e28e0c8
Showing 18 changed files with 154 additions and 90 deletions.
1 change: 1 addition & 0 deletions api/lib/services.dart
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export 'src/services/asset.dart';
export 'src/services/network.dart';
5 changes: 5 additions & 0 deletions api/lib/src/models/server.dart
Original file line number Diff line number Diff line change
@@ -31,4 +31,9 @@ class GameProperty with GamePropertyMappable {
this.name = '',
this.description = '',
});

static const defaultProperty = GameProperty(
name: 'Quokka server',
description: 'A server for Quokka.',
);
}
32 changes: 32 additions & 0 deletions api/lib/src/services/network.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import 'dart:convert';
import 'dart:io';

import 'package:quokka_api/event.dart';

Future<bool> Function(HttpRequest request) buildFilterConnections(
{GameProperty? property}) =>
(request) async {
final response = request.response;
response.headers.add("Access-Control-Allow-Origin", "*");
response.headers.add("Access-Control-Allow-Methods", "GET,INFO");

response.statusCode = HttpStatus.ok;
final body =
request.contentLength < 0 ? '' : await utf8.decodeStream(request);
String? sendMessage;
try {
final bodyData = jsonDecode(body);
final type = bodyData['type'].toString().toLowerCase();
if (type == 'info') {
sendMessage =
jsonEncode((property ?? GameProperty.defaultProperty).toJson());
}
} catch (_) {}
if (sendMessage != null) {
response.statusCode = HttpStatus.ok;
response.write(sendMessage);
response.close();
return false;
}
return true;
};
9 changes: 6 additions & 3 deletions app/lib/bloc/multiplayer.dart
Original file line number Diff line number Diff line change
@@ -161,10 +161,13 @@ class MultiplayerCubit extends Cubit<MultiplayerState> {
}
}

Future<void> create() async {
Future<void> create({GameProperty? property}) async {
try {
final server =
NetworkerSocketServer(InternetAddress.loopbackIPv4, kDefaultPort);
final server = NetworkerSocketServer(
InternetAddress.loopbackIPv4,
kDefaultPort,
filterConnections: buildFilterConnections(property: property),
);
final state = await _addNetworker(server);
await server.init();
emit(state);
3 changes: 3 additions & 0 deletions app/lib/bloc/settings.dart
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:material_leap/material_leap.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:quokka_api/quokka_api.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:window_manager/window_manager.dart';

@@ -19,6 +20,7 @@ class QuokkaSettings with QuokkaSettingsMappable implements LeapSettings {
@override
final bool nativeTitleBar;
final bool showConnectOfficial, showConnectCustom, showConnectOnlyFavorites;
final GameProperty gameProperty;

const QuokkaSettings({
this.localeTag = '',
@@ -30,6 +32,7 @@ class QuokkaSettings with QuokkaSettingsMappable implements LeapSettings {
this.showConnectCustom = true,
this.showConnectOnlyFavorites = false,
this.lastVersion,
this.gameProperty = const GameProperty(),
});

Locale? get locale {
6 changes: 5 additions & 1 deletion app/lib/pages/game/multiplayer.dart
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import 'package:material_leap/material_leap.dart';
import 'package:networker/networker.dart';
import 'package:phosphor_flutter/phosphor_flutter.dart';
import 'package:quokka/bloc/multiplayer.dart';
import 'package:quokka/bloc/settings.dart';

class MultiplayerDialog extends StatelessWidget {
const MultiplayerDialog({super.key});
@@ -99,7 +100,10 @@ class MultiplayerDialog extends StatelessWidget {
else if (!kIsWeb)
FilledButton.icon(
onPressed: () {
context.read<MultiplayerCubit>().create();
final settings = context.read<SettingsCubit>().state;
context
.read<MultiplayerCubit>()
.create(property: settings.gameProperty);
},
label: Text(AppLocalizations.of(context).start),
icon: const Icon(PhosphorIconsLight.play),
4 changes: 3 additions & 1 deletion app/lib/pages/game/note.dart
Original file line number Diff line number Diff line change
@@ -79,7 +79,9 @@ class _GameNoteDialogState extends State<GameNoteDialog> {
onPressed: () => Navigator.of(context).pop(),
),
constraints: const BoxConstraints(
maxWidth: LeapBreakpoints.medium, maxHeight: 800),
maxWidth: LeapBreakpoints.expanded,
maxHeight: 1000,
),
content: _editing
? TextFormField(
minLines: 5,
14 changes: 7 additions & 7 deletions app/pubspec.lock
Original file line number Diff line number Diff line change
@@ -387,19 +387,19 @@ packages:
dependency: "direct main"
description:
path: "."
ref: "6b34ee7d2efcf0d964163e925ba946a7bf454d72"
resolved-ref: "6b34ee7d2efcf0d964163e925ba946a7bf454d72"
url: "https://github.com/rydmike/flex_color_scheme"
ref: bb3b74ea95dcb133a19bf9a00942355030961b6e
resolved-ref: bb3b74ea95dcb133a19bf9a00942355030961b6e
url: "https://github.com/CodeDoctorDE/flex_color_scheme"
source: git
version: "8.0.0-dev.1"
flex_seed_scheme:
dependency: transitive
description:
name: flex_seed_scheme
sha256: "86470c8dc470f55dd3e28a6d30e3253a1c176df32903263d7daeabfc0c77dbd4"
sha256: "7d97ba5c20f0e5cb1e3e2c17c865e1f797d129de31fc1f75d2dcce9470d6373c"
url: "https://pub.dev"
source: hosted
version: "3.2.0"
version: "3.3.0"
flutter:
dependency: "direct main"
description: flutter
@@ -765,8 +765,8 @@ packages:
dependency: "direct main"
description:
path: "packages/networker/networker_socket"
ref: c9c0f1570f2e6ce11faa91bd6f70e322a768fb80
resolved-ref: c9c0f1570f2e6ce11faa91bd6f70e322a768fb80
ref: "81fcf2b6c6c3cfe5d36c948e424f4c97e1e5f88b"
resolved-ref: "81fcf2b6c6c3cfe5d36c948e424f4c97e1e5f88b"
url: "https://github.com/LinwoodDev/dart_pkgs"
source: git
version: "1.0.0"
6 changes: 3 additions & 3 deletions app/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -36,8 +36,8 @@ dependencies:
path: packages/material_leap
flex_color_scheme:
git:
url: https://github.com/rydmike/flex_color_scheme
ref: 6b34ee7d2efcf0d964163e925ba946a7bf454d72
url: https://github.com/CodeDoctorDE/flex_color_scheme
ref: bb3b74ea95dcb133a19bf9a00942355030961b6e
flutter_svg: ^2.0.10+1
window_manager: ^0.4.0
go_router: ^14.2.2
@@ -63,7 +63,7 @@ dependencies:
networker_socket:
git:
url: https://github.com/LinwoodDev/dart_pkgs
ref: c9c0f1570f2e6ce11faa91bd6f70e322a768fb80
ref: 81fcf2b6c6c3cfe5d36c948e424f4c97e1e5f88b
path: packages/networker/networker_socket
# System Information
dynamic_color: ^1.7.0
104 changes: 52 additions & 52 deletions docs/pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion docs/src/content/docs/downloads/android.mdx
Original file line number Diff line number Diff line change
@@ -4,7 +4,6 @@ title: Android

![Nightly release version](https://img.shields.io/badge/dynamic/yaml?color=f7d28c&label=Nightly&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2FLinwoodDev%2FQuokka%2Fnightly%2Fapp%2Fpubspec.yaml&style=for-the-badge)


import {CardGrid, LinkCard, TabItem, Tabs} from '@astrojs/starlight/components';
import DownloadButton from '/src/components/DownloadButton.astro';

1 change: 0 additions & 1 deletion docs/src/content/docs/downloads/ios.mdx
Original file line number Diff line number Diff line change
@@ -4,7 +4,6 @@ title: iOS

![Nightly release version](https://img.shields.io/badge/dynamic/yaml?color=f7d28c&label=Nightly&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2FLinwoodDev%2FQuokka%2Fnightly%2Fapp%2Fpubspec.yaml&style=for-the-badge)


import {CardGrid, TabItem, Tabs} from '@astrojs/starlight/components';
import DownloadButton from '/src/components/DownloadButton.astro';

1 change: 0 additions & 1 deletion docs/src/content/docs/downloads/linux.mdx
Original file line number Diff line number Diff line change
@@ -4,7 +4,6 @@ title: Linux

![Nightly release version](https://img.shields.io/badge/dynamic/yaml?color=f7d28c&label=Nightly&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2FLinwoodDev%2FQuokka%2Fnightly%2Fapp%2Fpubspec.yaml&style=for-the-badge)


import {CardGrid, LinkCard, TabItem, Tabs} from '@astrojs/starlight/components';
import DownloadButton from '/src/components/DownloadButton.astro';

1 change: 0 additions & 1 deletion docs/src/content/docs/downloads/windows.mdx
Original file line number Diff line number Diff line change
@@ -4,7 +4,6 @@ title: Windows

![Nightly release version](https://img.shields.io/badge/dynamic/yaml?color=f7d28c&label=Nightly&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2FLinwoodDev%2FQuokka%2Fnightly%2Fapp%2Fpubspec.yaml&style=for-the-badge)


import {CardGrid, TabItem, Tabs} from '@astrojs/starlight/components';
import DownloadButton from '/src/components/DownloadButton.astro';

20 changes: 20 additions & 0 deletions server/bin/quokka_server.dart
Original file line number Diff line number Diff line change
@@ -29,6 +29,17 @@ ArgParser buildParser() {
abbr: 'p',
help: 'The port to run the server on. Defaults to $kDefaultPort.',
)
..addOption(
'name',
abbr: 'n',
help: 'The name of the server. Will be displayed in the server list.',
)
..addOption(
'description',
abbr: 'd',
help:
'A description of the server. Will be displayed in the server list.',
)
..addOption('autosave',
abbr: 'a', help: "Disable saving of the world automatically");
}
@@ -65,12 +76,21 @@ Future<void> main(List<String> arguments) async {
if (results.wasParsed('autosave')) {
autosave = true;
}
String name = '', description = '';
if (results.wasParsed('name')) {
name = results['name'];
}
if (results.wasParsed('description')) {
description = results['description'];
}
print(welcomeText);
final server = await QuokkaServer.load();
await server.init(
port: int.tryParse(results['port'] ?? '') ?? kDefaultPort,
verbose: verbose,
autosave: autosave,
name: name,
description: description,
);
await server.run();
} on FormatException catch (e) {
30 changes: 14 additions & 16 deletions server/lib/main.dart
Original file line number Diff line number Diff line change
@@ -73,19 +73,26 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
Map.fromEntries((_server?.clientConnections ?? {})
.map((e) => MapEntry(e, _server!.getConnectionInfo(e)!)));

Future<void> init(
{int port = kDefaultPort,
bool verbose = false,
bool autosave = false}) async {
Future<void> init({
int port = kDefaultPort,
bool verbose = false,
bool autosave = false,
String name = '',
String description = '',
}) async {
if (verbose) {
consoler.minLogLevel = LogLevel.verbose;
}
log("Starting server on port $port", level: LogLevel.info);
log('Verbose logging activated', level: LogLevel.verbose);
_temp = autosave;
final server = _server = NetworkerSocketServer(
InternetAddress.anyIPv4, port,
filterConnections: _filterConnections);
final server =
_server = NetworkerSocketServer(InternetAddress.anyIPv4, port,
filterConnections: buildFilterConnections(
property: GameProperty.defaultProperty.copyWith(
name: name,
description: description,
)));
final transformer = _pipe = NetworkerPipeTransformer<String, WorldEvent>(
WorldEventMapper.fromJson, (e) => e.toJson());
transformer.read.listen(_onClientEvent);
@@ -173,13 +180,4 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
info.close();
return true;
}

bool _filterConnections(HttpRequest request) {
request.response.headers.add("Access-Control-Allow-Origin", "*");
request.response.headers
.add("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT,OPTIONS");

request.response.statusCode = HttpStatus.ok;
return true;
}
}
4 changes: 2 additions & 2 deletions server/pubspec.lock
Original file line number Diff line number Diff line change
@@ -246,8 +246,8 @@ packages:
dependency: "direct main"
description:
path: "packages/networker/networker_socket"
ref: "00671cce35e995f203806b55bc6d6881fca0e107"
resolved-ref: "00671cce35e995f203806b55bc6d6881fca0e107"
ref: "81fcf2b6c6c3cfe5d36c948e424f4c97e1e5f88b"
resolved-ref: "81fcf2b6c6c3cfe5d36c948e424f4c97e1e5f88b"
url: "https://github.com/LinwoodDev/dart_pkgs"
source: git
version: "1.0.0"
2 changes: 1 addition & 1 deletion server/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ dependencies:
networker_socket:
git:
url: https://github.com/LinwoodDev/dart_pkgs
ref: 00671cce35e995f203806b55bc6d6881fca0e107
ref: 81fcf2b6c6c3cfe5d36c948e424f4c97e1e5f88b
path: packages/networker/networker_socket
consoler:
git:

0 comments on commit e28e0c8

Please sign in to comment.