-
-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Your Name
committed
Apr 12, 2023
1 parent
d464044
commit 3668f89
Showing
11 changed files
with
23 additions
and
215 deletions.
There are no files selected for viewing
132 changes: 1 addition & 131 deletions
132
package/telegram_bot_api_flutter/lib/telegram_bot_api_flutter.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,131 +1 @@ | ||
|
||
import 'dart:async'; | ||
import 'dart:ffi'; | ||
import 'dart:io'; | ||
import 'dart:isolate'; | ||
|
||
import 'telegram_bot_api_flutter_bindings_generated.dart'; | ||
|
||
/// A very short-lived native function. | ||
/// | ||
/// For very short-lived functions, it is fine to call them on the main isolate. | ||
/// They will block the Dart execution while running the native function, so | ||
/// only do this for native functions which are guaranteed to be short-lived. | ||
int sum(int a, int b) => _bindings.sum(a, b); | ||
|
||
/// A longer lived native function, which occupies the thread calling it. | ||
/// | ||
/// Do not call these kind of native functions in the main isolate. They will | ||
/// block Dart execution. This will cause dropped frames in Flutter applications. | ||
/// Instead, call these native functions on a separate isolate. | ||
/// | ||
/// Modify this to suit your own use case. Example use cases: | ||
/// | ||
/// 1. Reuse a single isolate for various different kinds of requests. | ||
/// 2. Use multiple helper isolates for parallel execution. | ||
Future<int> sumAsync(int a, int b) async { | ||
final SendPort helperIsolateSendPort = await _helperIsolateSendPort; | ||
final int requestId = _nextSumRequestId++; | ||
final _SumRequest request = _SumRequest(requestId, a, b); | ||
final Completer<int> completer = Completer<int>(); | ||
_sumRequests[requestId] = completer; | ||
helperIsolateSendPort.send(request); | ||
return completer.future; | ||
} | ||
|
||
const String _libName = 'telegram_bot_api_flutter'; | ||
|
||
/// The dynamic library in which the symbols for [TelegramBotApiFlutterBindings] can be found. | ||
final DynamicLibrary _dylib = () { | ||
if (Platform.isMacOS || Platform.isIOS) { | ||
return DynamicLibrary.open('$_libName.framework/$_libName'); | ||
} | ||
if (Platform.isAndroid || Platform.isLinux) { | ||
return DynamicLibrary.open('lib$_libName.so'); | ||
} | ||
if (Platform.isWindows) { | ||
return DynamicLibrary.open('$_libName.dll'); | ||
} | ||
throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); | ||
}(); | ||
|
||
/// The bindings to the native functions in [_dylib]. | ||
final TelegramBotApiFlutterBindings _bindings = TelegramBotApiFlutterBindings(_dylib); | ||
|
||
|
||
/// A request to compute `sum`. | ||
/// | ||
/// Typically sent from one isolate to another. | ||
class _SumRequest { | ||
final int id; | ||
final int a; | ||
final int b; | ||
|
||
const _SumRequest(this.id, this.a, this.b); | ||
} | ||
|
||
/// A response with the result of `sum`. | ||
/// | ||
/// Typically sent from one isolate to another. | ||
class _SumResponse { | ||
final int id; | ||
final int result; | ||
|
||
const _SumResponse(this.id, this.result); | ||
} | ||
|
||
/// Counter to identify [_SumRequest]s and [_SumResponse]s. | ||
int _nextSumRequestId = 0; | ||
|
||
/// Mapping from [_SumRequest] `id`s to the completers corresponding to the correct future of the pending request. | ||
final Map<int, Completer<int>> _sumRequests = <int, Completer<int>>{}; | ||
|
||
/// The SendPort belonging to the helper isolate. | ||
Future<SendPort> _helperIsolateSendPort = () async { | ||
// The helper isolate is going to send us back a SendPort, which we want to | ||
// wait for. | ||
final Completer<SendPort> completer = Completer<SendPort>(); | ||
|
||
// Receive port on the main isolate to receive messages from the helper. | ||
// We receive two types of messages: | ||
// 1. A port to send messages on. | ||
// 2. Responses to requests we sent. | ||
final ReceivePort receivePort = ReceivePort() | ||
..listen((dynamic data) { | ||
if (data is SendPort) { | ||
// The helper isolate sent us the port on which we can sent it requests. | ||
completer.complete(data); | ||
return; | ||
} | ||
if (data is _SumResponse) { | ||
// The helper isolate sent us a response to a request we sent. | ||
final Completer<int> completer = _sumRequests[data.id]!; | ||
_sumRequests.remove(data.id); | ||
completer.complete(data.result); | ||
return; | ||
} | ||
throw UnsupportedError('Unsupported message type: ${data.runtimeType}'); | ||
}); | ||
|
||
// Start the helper isolate. | ||
await Isolate.spawn((SendPort sendPort) async { | ||
final ReceivePort helperReceivePort = ReceivePort() | ||
..listen((dynamic data) { | ||
// On the helper isolate listen to requests and respond to them. | ||
if (data is _SumRequest) { | ||
final int result = _bindings.sum_long_running(data.a, data.b); | ||
final _SumResponse response = _SumResponse(data.id, result); | ||
sendPort.send(response); | ||
return; | ||
} | ||
throw UnsupportedError('Unsupported message type: ${data.runtimeType}'); | ||
}); | ||
|
||
// Send the the port to the main isolate on which we can receive requests. | ||
sendPort.send(helperReceivePort.sendPort); | ||
}, receivePort.sendPort); | ||
|
||
// Wait until the helper isolate has sent us back the SendPort on which we | ||
// can start sending requests. | ||
return completer.future; | ||
}(); | ||
|
69 changes: 0 additions & 69 deletions
69
package/telegram_bot_api_flutter/lib/telegram_bot_api_flutter_bindings_generated.dart
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
package/telegram_bot_api_flutter/windows/telegram-bot-api/.gitignore
100644 → 100755
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
* | ||
* | ||
!.gitignore |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
## 0.4.6 | ||
|
||
- Test fix support cli macos | ||
|
||
## 0.4.5 | ||
|
||
- Menambahkan Support Send File di telegram bot api | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters