Skip to content

Instantly share code, notes, and snippets.

@Hecatoncheir
Last active November 6, 2019 11:42
Show Gist options
  • Select an option

  • Save Hecatoncheir/bdc79d0d1833e5171527c28292725d51 to your computer and use it in GitHub Desktop.

Select an option

Save Hecatoncheir/bdc79d0d1833e5171527c28292725d51 to your computer and use it in GitHub Desktop.
infinit
import 'dart:async';
import 'dart:isolate';
import 'package:logging/logging.dart';
import 'package:sender/mailers/west_call_mailer.dart';
import 'package:sender/reminders/task_reminder.dart';
import 'package:sender/senders/task_mail_sender.dart';
void main() {
final mainThreadPort = ReceivePort();
Isolate.spawn(sideThread, mainThreadPort.sendPort)
.then((sideThread) => mainThread(mainThreadPort, sideThread));
}
enum Signals { on, off }
Future<void> mainThread(
ReceivePort mainThreadReceivePort, Isolate sideThread) async {
print("Main thread started");
await for (dynamic data in mainThreadReceivePort) {
if (data['signal'] == Signals.on) {
continue;
}
if (data['signal'] == Signals.off) break;
}
mainThreadReceivePort.close();
print("Main thread closed");
}
Future<void> sideThread(SendPort mainThreadSendPort) async {
print("Side thread started");
Logger.root.onRecord.listen((log) => print(log.message));
final receivePort = ReceivePort();
mainThreadSendPort
.send({'signal': Signals.on, 'receivePort': receivePort.sendPort});
final sender = TaskMailSender(WestCallMailer());
final reminder = TaskReminder();
await for (Map remind in reminder.stream) {
final envelopeDetails = {
'from': '',
'recipients': [],
'subject': 'Проверка',
'text': 'Проверка?',
'html': '<h1>Проверка</h1><p>Hey!</p>'
};
sender.send(envelopeDetails);
}
mainThreadSendPort.send({'signal': Signals.off});
print("Side thread closed");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment