connect method
Implementation
Future<bool> connect({Duration timeout = const Duration(seconds: 5)}) async {
try {
final completer = Completer<bool>();
final address = await _resolveHost();
_socket = await Socket.connect(address, _port, timeout: timeout);
_eventController.add(TcpConnected());
_socket!.listen(
(List<int> event) {
final raw = utf8.decode(event);
final packets = raw.split(splitRegExp).where((m) => m.isNotEmpty).map((m) => m.trim()).toList();
for (final packet in packets) {
try {
final parsed = Packet.fromPacket(packet);
if (parsed is AuPacket) {
_log.info('AuPacket deprecated, skipping');
continue;
}
if (parsed is AsPacket) {
LayrzProtocolSocket.isActive = true;
if (!completer.isCompleted) completer.complete(true);
}
_eventController.add(MessageReceived(message: parsed));
} catch (e) {
_log.severe('Error parsing packet: "$packet" - $e');
disconnect();
}
}
},
onError: (err) async {
_log.fine('onError: $err');
await disconnect();
},
onDone: () async {
_log.fine('onDone');
await disconnect();
},
);
_socket!.writeln(PaPacket(ident: ident, password: password).toPacket());
return await completer.future.timeout(
timeout,
onTimeout: () {
if (!completer.isCompleted) completer.complete(false);
return false;
},
);
} catch (e) {
_log.severe('Error connecting to the server: $e');
_eventController.add(TcpDisconnected());
LayrzProtocolSocket.isActive = false;
return false;
}
}