Skip to content

Commit

Permalink
Add log levels
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed Aug 25, 2024
1 parent a95066c commit a6b725c
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 18 deletions.
7 changes: 7 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ jobs:
flutter clean
flutter pub get
flutter doctor -v
- name: Build nessesary files
working-directory: ./
run: |
cd tools
dart pub get
cd ..
dart run tools/generate.dart
- name: Import files
if: ${{ github.event_name != 'pull_request' }}
env:
Expand Down
9 changes: 7 additions & 2 deletions server/lib/asset.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ import 'dart:io';

import 'package:path/path.dart' as p;
import 'package:quokka_api/quokka_api.dart';
import 'package:quokka_server/console.dart';

class ServerAssetManager extends AssetManager {
final Map<String, QuokkaData> _packs = {};

Future<void> init({bool verbose = false}) async {
Future<void> init(
{required ConsoleManager console, bool verbose = false}) async {
_packs.clear();
final directory = Directory('packs');
if (!await directory.exists()) {
Expand All @@ -21,7 +23,10 @@ class ServerAssetManager extends AssetManager {
_packs[fileName] = data;
}
}
print('Loaded ${_packs.length} packs.');
console.print('Loaded ${_packs.length} packs.', level: LogLevel.info);
if (_packs.isEmpty) {
console.print('No packs loaded.', level: LogLevel.warning);
}
if (verbose) {
print('Loaded packs: ${_packs.keys.join(', ')}');
}
Expand Down
33 changes: 31 additions & 2 deletions server/lib/console.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,15 @@ abstract class ConsoleProgram {
bool get isHidden => getDescription() == null;
}

enum LogLevel { verbose, info, warning, error }

class ConsoleManager<T extends ConsoleProgram> {
StreamSubscription? _subscription;
final Map<String?, T> _programs = {};
final String prefix;

LogLevel minLogLevel = LogLevel.info;

bool _firstPrefix = true;

ConsoleManager({this.prefix = '\n> '});
Expand All @@ -63,11 +67,36 @@ class ConsoleManager<T extends ConsoleProgram> {

void sendPrefix() {
_firstPrefix = false;
stdout.write(' \r$prefix');
stdout.write('\r$prefix');
}

void print(Object? message) {
void print(Object? message, {LogLevel? level}) {
if (level != null && level.index < minLogLevel.index) return;
stdout.write('\r');
final supportsAnsi = stdout.supportsAnsiEscapes;
if (level != null) {
switch (level) {
case LogLevel.verbose:
// Purple
if (supportsAnsi) stdout.write('\x1B[35m');
stdout.write('[VERBOSE] ');
break;
case LogLevel.info:
// Blue
if (supportsAnsi) stdout.write('\x1B[36m');
stdout.write('[INFO] ');
break;
case LogLevel.warning:
// Yellow
if (supportsAnsi) stdout.write('\x1B[33m');
stdout.write('[WARNING] ');
case LogLevel.error:
// Red
if (supportsAnsi) stdout.write('\x1B[31m');
stdout.write('[ERROR] ');
}
if (supportsAnsi) stdout.write('\x1B[0m');
}
stdout.write(message);
sendPrefix();
}
Expand Down
27 changes: 13 additions & 14 deletions server/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
final ConsoleManager consoleManager = ConsoleManager();
final ServerAssetManager assetManager;
final String? worldFile;
bool _verbose = false;
bool _temp = false;
GameTable _table = const GameTable();

Expand Down Expand Up @@ -52,7 +51,8 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
return QuokkaServer._(worldFile, data);
}

void log(Object? message) => consoleManager.print(message);
void log(Object? message, {LogLevel? level}) =>
consoleManager.print(message, level: level);

static String get defaultWorldFile => 'world.qka';

Expand All @@ -61,9 +61,11 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
bool verbose = false,
bool autosave = false}) async {
await _runLogZone(() async {
await assetManager.init(verbose: verbose);
await assetManager.init(console: consoleManager, verbose: verbose);
});
_verbose = verbose;
if (verbose) {
consoleManager.minLogLevel = LogLevel.verbose;
}
_temp = autosave;
final server =
_server = NetworkerSocketServer(InternetAddress.anyIPv4, port);
Expand Down Expand Up @@ -94,10 +96,8 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
_runLogZone(() {
consoleManager.run();
});
log('Server running on ${_server?.address}');
if (_verbose) {
log('Verbose logging activated');
}
log('Server running on ${_server?.address}', level: LogLevel.info);
log('Verbose logging activated', level: LogLevel.verbose);
await _server?.onClosed.first;
}

Expand All @@ -110,9 +110,8 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
table: _table,
);
if (process == null) return;
if (_verbose) {
log('Processing event by ${event.channel}: $process');
}
log('Processing event by ${event.channel}: $process',
level: LogLevel.verbose);
_pipe?.sendMessage(process.$1, process.$2);
if (process.$2 == kAnyChannel || process.$2 == kAuthorityChannel) {
add(process.$1);
Expand All @@ -121,7 +120,7 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {

void _onJoin((Channel, ConnectionInfo) event) {
final (user, info) = event;
log('${info.address} ($user) joined the game');
log('${info.address} ($user) joined the game', level: LogLevel.info);
_pipe?.sendMessage(
WorldInitialized(
table: state.table,
Expand All @@ -133,7 +132,7 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {

void _onLeave((Channel, ConnectionInfo) event) {
final (user, info) = event;
log('${info.address} ($user) left the game');
log('${info.address} ($user) left the game', level: LogLevel.info);
}

Future<void> save({bool force = false}) async {
Expand All @@ -145,7 +144,7 @@ final class QuokkaServer extends Bloc<ServerWorldEvent, WorldState> {
@override
Future<void> close() async {
await super.close();
log('Closing...');
log('Closing...', level: LogLevel.info);
_server?.close();
consoleManager.dispose();
}
Expand Down

0 comments on commit a6b725c

Please sign in to comment.