Skip to content

Commit

Permalink
follow the updated restriction which isolate can send.
Browse files Browse the repository at this point in the history
  • Loading branch information
sensuikan1973 committed Mar 4, 2024

Verified

This commit was signed with the committer’s verified signature.
1 parent 6827cb5 commit 4561761
Showing 5 changed files with 47 additions and 45 deletions.
10 changes: 5 additions & 5 deletions lib/engine/api/count_bestpath.dart
Original file line number Diff line number Diff line change
@@ -11,13 +11,13 @@ class CountBestpathRequest implements RequestSchema {
required this.movesAtRequest,
required this.playerLowerLimit,
required this.opponentLowerLimit,
required this.logger,
// required this.logger,
});

final String movesAtRequest;
final int playerLowerLimit;
final int opponentLowerLimit;
final Logger logger;
// final Logger logger;
}

@immutable
@@ -46,9 +46,9 @@ Stream<CountBestpathResponse> executeCountBestpath(
for (final move in rootBookMoveListWithPosition.moveList) {
final currentMoves = edax.edaxGetMoves();
if (currentMoves != request.movesAtRequest) {
request.logger.d(
'count bestpath process is aborted.\ncurrentMoves "$currentMoves" is not equal to movesAtRequest "${request.movesAtRequest}"',
);
// request.logger.d(
// 'count bestpath process is aborted.\ncurrentMoves "$currentMoves" is not equal to movesAtRequest "${request.movesAtRequest}"',
// );
edax.edaxBookStopCountBestpath();
return;
}
16 changes: 8 additions & 8 deletions lib/engine/api/hint_one_by_one.dart
Original file line number Diff line number Diff line change
@@ -12,13 +12,13 @@ class HintOneByOneRequest implements RequestSchema {
required this.level,
required this.stepByStep,
required this.movesAtRequest,
required this.logger,
// required this.logger,
});

final int level;
final bool stepByStep;
final String movesAtRequest;
final Logger logger;
// final Logger logger;
}

@immutable
@@ -49,21 +49,21 @@ Stream<HintOneByOneResponse> executeHintOneByOne(
const levelOption = LevelOption();
for (final level in levelList) {
edax.edaxStop();
request.logger.d('stopped edax search');
// request.logger.d('stopped edax search');
edax
..edaxSetOption(levelOption.nativeName, level.toString())
..edaxHintPrepare();
request.logger.d('prepared getting hint one by one.\nlevel: $level.\nmoves at request: ${request.movesAtRequest}');
// request.logger.d('prepared getting hint one by one.\nlevel: $level.\nmoves at request: ${request.movesAtRequest}');
while (true) {
final currentMoves = edax.edaxGetMoves();
if (currentMoves != request.movesAtRequest) {
request.logger.d(
'hint process is aborted.\ncurrentMoves "$currentMoves" is not equal to movesAtRequest "${request.movesAtRequest}"',
);
// request.logger.d(
// 'hint process is aborted.\ncurrentMoves "$currentMoves" is not equal to movesAtRequest "${request.movesAtRequest}"',
// );
return;
}

request.logger.d('will call edaxHintNextNoMultiPvDepth');
// request.logger.d('will call edaxHintNextNoMultiPvDepth');
final hint = edax.edaxHintNextNoMultiPvDepth();
if (hint.isNoMove) break;
yield HintOneByOneResponse(request: request, hint: hint, level: level, isLastStep: level == levelList.last);
6 changes: 3 additions & 3 deletions lib/engine/api/setboard.dart
Original file line number Diff line number Diff line change
@@ -18,12 +18,12 @@ class SetboardRequest implements RequestSchema {
const SetboardRequest({
required this.currentColor,
required this.replacementTargets,
required this.logger,
// required this.logger,
});

final int currentColor;
final List<SquareReplacement> replacementTargets;
final Logger logger;
// final Logger logger;
}

@immutable
@@ -55,7 +55,7 @@ SetboardResponse executeSetboard(final LibEdax edax, final SetboardRequest reque
final currentColorChar = request.currentColor == TurnColor.black ? ColorChar.black : ColorChar.white;
boardStr = boardStr.replaceFirst(RegExp('.'), currentColorChar, 64);

request.logger.d('setboard $boardStr');
// request.logger.d('setboard $boardStr');
edax.edaxSetboard(boardStr);

return SetboardResponse(
52 changes: 27 additions & 25 deletions lib/engine/edax_server.dart
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ import 'dart:ui';
import 'package:flutter/foundation.dart';
import 'package:libedax4dart/libedax4dart.dart';
import 'package:logger/logger.dart';
// import 'package:logger/logger.dart';
import 'package:meta/meta.dart';

import 'api/book_get_move_with_position.dart';
@@ -25,29 +26,30 @@ import 'api/undo.dart';
// NOTE: top level function for `isolate.spawn`.
@doNotStore
Future<void> startEdaxServer(final StartEdaxServerParams params) async {
final server = EdaxServer(dllPath: params.dllPath, logger: params.logger);
final server = EdaxServer(dllPath: params.dllPath);
await server.start(params.parentSendPort, params.initLibedaxParameters);
}

@immutable
class StartEdaxServerParams {
const StartEdaxServerParams(this.parentSendPort, this.dllPath, this.initLibedaxParameters, this.logger);
const StartEdaxServerParams(this.parentSendPort, this.dllPath, this.initLibedaxParameters, this.logLevel);
final SendPort parentSendPort;
final String dllPath;
final List<String> initLibedaxParameters;
final Logger logger;
final Level logLevel;
// final Logger logger;
}

@doNotStore
class EdaxServer {
EdaxServer({
required final String dllPath,
required final Logger logger,
}) : _dllPath = dllPath,
_logger = logger;
// required final Logger logger,
}) : _dllPath = dllPath;
// _logger = logger;

final String _dllPath;
final Logger _logger;
// final Logger _logger;

final _receivePort = ReceivePort();
SendPort get sendPort => _receivePort.sendPort;
@@ -64,20 +66,20 @@ class EdaxServer {
IsolateNameServer.registerPortWithName(sendPort, serverName);

parentSendPort.send(_receivePort.sendPort); // NOTE: notify my port to parent
_logger.d('sent my port to parentSendPort');
// _logger.d('sent my port to parentSendPort');

final edax = LibEdax(_dllPath)
..libedaxInitialize(initLibedaxParameters)
..edaxInit();
_logger.i('libedax has initialized with $initLibedaxParameters');
// _logger.i('libedax has initialized with $initLibedaxParameters');

_registerApiHandler(parentSendPort, edax);
}

void _registerApiHandler(final SendPort parentSendPort, final LibEdax edax) =>
// ignore: avoid_annotating_with_dynamic
_receivePort.listen((final dynamic message) async {
_logger.d('received request "${message.runtimeType}"');
// _logger.d('received request "${message.runtimeType}"');
if (message is MoveRequest) {
parentSendPort.send(executeMove(edax, message));
} else if (message is PlayRequest) {
@@ -90,12 +92,12 @@ class EdaxServer {
continue;
}
if (_latestHintntOneByOneRequest.movesAtRequest != message.movesAtRequest) {
_logger.d(
'''
The HintOneByOneRequest (moves: ${message.movesAtRequest}) has dropped.
It is because a new HintOneByOneRequest (moves: ${_latestHintntOneByOneRequest.movesAtRequest}) has been received after that.
''',
);
// _logger.d(
// '''
// The HintOneByOneRequest (moves: ${message.movesAtRequest}) has dropped.
// It is because a new HintOneByOneRequest (moves: ${_latestHintntOneByOneRequest.movesAtRequest}) has been received after that.
// ''',
// );
break;
}
_computingHintOneByOne = true;
@@ -126,12 +128,12 @@ class EdaxServer {
continue;
}
if (_latestCountBestpathRequest.movesAtRequest != message.movesAtRequest) {
_logger.d(
'''
The CountBestpathRequest (moves: ${message.movesAtRequest}) has dropped.
It is because a new CountBestpathRequest (moves: ${_latestCountBestpathRequest.movesAtRequest}) has been received after that.
''',
);
// _logger.d(
// '''
// The CountBestpathRequest (moves: ${message.movesAtRequest}) has dropped.
// It is because a new CountBestpathRequest (moves: ${_latestCountBestpathRequest.movesAtRequest}) has been received after that.
// ''',
// );
break;
}
_computingCountBestpath = true;
@@ -149,7 +151,7 @@ class EdaxServer {
} else if (message is BookLoadRequest) {
if (_computingBookLoading) return;
_computingBookLoading = true;
_logger.i('will load book file. path: ${message.file}');
// _logger.i('will load book file. path: ${message.file}');
await compute(_computeBookLoad, _ComputeBookLoadParams(_dllPath, message, parentSendPort));
_computingBookLoading = false;
} else if (message is SetOptionRequest) {
@@ -161,9 +163,9 @@ class EdaxServer {
} else if (message is ShutdownRequest) {
parentSendPort.send(executeShutdown(edax, message));
_receivePort.close();
_logger.i('shutdowned');
// _logger.i('shutdowned');
} else {
_logger.w('request ${message.runtimeType} is not supported');
// _logger.w('request ${message.runtimeType} is not supported');
}
});
}
8 changes: 4 additions & 4 deletions lib/models/board_notifier.dart
Original file line number Diff line number Diff line change
@@ -53,7 +53,7 @@ class BoardNotifier extends ValueNotifier<BoardState> {
}) async {
await Isolate.spawn(
startEdaxServer,
StartEdaxServerParams(_receivePort.sendPort, libedaxPath, initLibedaxParams, _logger),
StartEdaxServerParams(_receivePort.sendPort, libedaxPath, initLibedaxParams, Logger.level),
);
_receiveStream = _receivePort.asBroadcastStream();
_edaxServerPort = await _receiveStream.first as SendPort;
@@ -95,7 +95,7 @@ class BoardNotifier extends ValueNotifier<BoardState> {
SetboardRequest(
currentColor: value.arrangeTargetColor,
replacementTargets: arrangeTargetChar,
logger: _logger,
// logger: _logger,
),
);
}
@@ -149,7 +149,7 @@ class BoardNotifier extends ValueNotifier<BoardState> {
level: value.level,
stepByStep: value.hintStepByStep,
movesAtRequest: movesAtRequest,
logger: _logger,
// logger: _logger,
),
);
}
@@ -169,7 +169,7 @@ class BoardNotifier extends ValueNotifier<BoardState> {
movesAtRequest: movesAtRequest,
playerLowerLimit: await _bestpathCountPlayerLowerLimitOption.val,
opponentLowerLimit: await _bestpathCountOpponentLowerLimitOption.val,
logger: _logger,
// logger: _logger,
),
);
}

0 comments on commit 4561761

Please sign in to comment.