Skip to content

Commit 5768cc9

Browse files
committed
Change server to be used as library
1 parent b6f9f7e commit 5768cc9

File tree

11 files changed

+351
-277
lines changed

11 files changed

+351
-277
lines changed

server/bin/quokka_server.dart

Lines changed: 2 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,5 @@
1-
import 'package:args/args.dart';
2-
import 'package:quokka_api/quokka_api.dart';
31
import 'package:quokka_server/main.dart';
42

5-
const String version = '0.0.1';
6-
7-
ArgParser buildParser() {
8-
return ArgParser()
9-
..addFlag(
10-
'help',
11-
abbr: 'h',
12-
negatable: false,
13-
help: 'Print this usage information.',
14-
)
15-
..addFlag(
16-
'verbose',
17-
abbr: 'v',
18-
negatable: false,
19-
help: 'Show additional command output.',
20-
)
21-
..addFlag(
22-
'version',
23-
abbr: 'V',
24-
negatable: false,
25-
help: 'Print the tool version.',
26-
)
27-
..addOption(
28-
'port',
29-
abbr: 'p',
30-
help: 'The port to run the server on. Defaults to $kDefaultPort.',
31-
)
32-
..addOption(
33-
'description',
34-
abbr: 'd',
35-
help:
36-
'A description of the server. Will be displayed in the server list.',
37-
)
38-
..addOption('autosave',
39-
abbr: 'a', help: "Disable saving of the world automatically");
40-
}
41-
42-
void printUsage(ArgParser argParser) {
43-
print('Usage: server <flags> [arguments]');
44-
print(argParser.usage);
45-
}
46-
47-
const welcomeText = """
48-
____ __ __
49-
/ __ \\__ _____ / /__ / /_____ _
50-
/ /_/ / // / _ \\/ '_// '_/ _ `/
51-
\\___\\_\\_,_/\\___/_/\\_\\/_/\\_\\\\_,_/
52-
""";
53-
Future<void> main(List<String> arguments) async {
54-
final ArgParser argParser = buildParser();
55-
try {
56-
final ArgResults results = argParser.parse(arguments);
57-
bool verbose = false, autosave = false;
58-
59-
// Process the parsed arguments.
60-
if (results.wasParsed('help')) {
61-
printUsage(argParser);
62-
return;
63-
}
64-
if (results.wasParsed('version')) {
65-
print('server version: $version');
66-
return;
67-
}
68-
if (results.wasParsed('verbose')) {
69-
verbose = true;
70-
}
71-
if (results.wasParsed('autosave')) {
72-
autosave = true;
73-
}
74-
String description = '';
75-
if (results.wasParsed('description')) {
76-
description = results['description'];
77-
}
78-
print(welcomeText);
79-
final server = await QuokkaServer.load();
80-
await server.init(
81-
port: int.tryParse(results['port'] ?? '') ?? kDefaultPort,
82-
verbose: verbose,
83-
autosave: autosave,
84-
description: description,
85-
);
86-
await server.run();
87-
} on FormatException catch (e) {
88-
// Print usage information if an invalid argument was provided.
89-
print(e.message);
90-
print('');
91-
printUsage(argParser);
92-
}
3+
Future<void> main(List<String> arguments) {
4+
return runServer(arguments);
935
}

server/lib/events.dart

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import 'dart:async';
2+
3+
import 'package:networker/networker.dart';
4+
import 'package:quokka_server/server.dart';
5+
6+
typedef ListenerResult<S> = (S, Channel)?;
7+
8+
typedef EventListener<T, S> = FutureOr<ListenerResult<S>> Function(
9+
S serverEvent,
10+
Channel target,
11+
T clientEvent,
12+
Channel source,
13+
QuokkaServer server,
14+
);
15+
16+
final class EventSystem<T, S> {
17+
final Map<T, List<EventListener<T, S>>> _listeners = {};
18+
19+
void addListener(T event, EventListener<T, S> listener) {
20+
_listeners.putIfAbsent(event, () => []).add(listener);
21+
}
22+
23+
void removeListener(T event, EventListener<T, S> listener) {
24+
_listeners[event]?.remove(listener);
25+
}
26+
27+
Future<ListenerResult<S>> dispatch(
28+
S serverEvent,
29+
Channel target,
30+
T clientEvent,
31+
Channel source,
32+
QuokkaServer server,
33+
) async {
34+
final listeners = _listeners[clientEvent];
35+
if (listeners == null) return null;
36+
ListenerResult<S> result = (serverEvent, target);
37+
for (final listener in listeners) {
38+
if (result == null) return null;
39+
result =
40+
await listener(result.$1, result.$2, clientEvent, source, server);
41+
}
42+
return result;
43+
}
44+
}

0 commit comments

Comments
 (0)