joinDirectory static method

Future<DocumentFrameResponse> joinDirectory(
  1. P2PStream stream, {
  2. required PeerId ownerPeerId,
  3. required String displayName,
  4. String? bio,
  5. String? avatarHash,
  6. Map<String, dynamic>? extras,
})

Join server directory (client-side)

Implementation

static Future<DocumentFrameResponse> joinDirectory(
  P2PStream stream, {
  required PeerId ownerPeerId,
  required String displayName,
  String? bio,
  String? avatarHash,
  Map<String, dynamic>? extras,
}) async {
  try {
    final listing = <String, dynamic>{
      'displayName': displayName,
      if (bio != null) 'bio': bio,
      if (avatarHash != null) 'avatarHash': avatarHash,
      if (extras != null) 'extras': extras,
    };

    final requestData = <String, dynamic>{
      'operation': 'DIRECTORY',
      'ownerPeerId': ownerPeerId.toBase58(),
      'directoryAction': 'join',
      'body': base64Encode(utf8.encode(jsonEncode(listing))),
    };

    final requestBytes =
        Uint8List.fromList(utf8.encode(jsonEncode(requestData)));

    await _writeFrameStatic(stream, requestBytes);

    final responseBytes = await _readFrameStatic(stream);
    return DocumentFrame.decodeResponse(responseBytes);
  } catch (e, stackTrace) {
    _logger.severe('Error joining directory: $e', e, stackTrace);
    rethrow;
  }
}