getValidationSessionFlipsList method

Future<ValidationSessionInfo> getValidationSessionFlipsList(
  1. String typeSession,
  2. ValidationSessionInfo validationSessionInfoInput,
  3. bool simulationMode,
  4. String address,
)

Implementation

Future<ValidationSessionInfo> getValidationSessionFlipsList(
    String typeSession,
    ValidationSessionInfo validationSessionInfoInput,
    bool simulationMode,
    String address) async {
  Completer<ValidationSessionInfo> _completer =
      new Completer<ValidationSessionInfo>();

  if (validationSessionInfoInput != null) {
    _completer.complete(validationSessionInfoInput);
    return _completer.future;
  }

  ValidationSessionInfo validationSessionInfo = new ValidationSessionInfo();
  validationSessionInfo.typeSession = typeSession;
  String method;

  switch (typeSession) {
    case EpochPeriod.ShortSession:
      {
        method = FlipShortHashesRequest.METHOD_NAME;
      }
      break;
    case EpochPeriod.LongSession:
      {
        method = FlipLongHashesRequest.METHOD_NAME;
      }
      break;
    default:
      return validationSessionInfo;
  }

  FlipShortHashesRequest flipShortHashesRequest;
  FlipShortHashesResponse flipShortHashesResponse;
  FlipLongHashesRequest flipLongHashesRequest;
  FlipLongHashesResponse flipLongHashesResponse;

  try {
    if (simulationMode) {
      if (typeSession == EpochPeriod.ShortSession) {
        flipShortHashesResponse = FlipShortHashesResponse.fromJson(
            FlipExamples().getMapExample(typeSession));
      }
      if (typeSession == EpochPeriod.LongSession) {
        flipLongHashesResponse = FlipLongHashesResponse.fromJson(
            FlipExamples().getMapExample(typeSession));
      }
    } else {
      if (this.nodeType == SHARED_NODE) {
        mapParams = {
          'method': method,
          "params": [address],
          'id': 101,
          'key': keyApp
        };
      } else {
        mapParams = {
          'method': method,
          "params": [],
          'id': 101,
          'key': keyApp
        };
      }

      if (typeSession == EpochPeriod.ShortSession) {
        if (this.nodeType == NORMAL_VPS_NODE) {
          SSHClientStatus sshClientStatus;
          sshClientStatus = await VpsUtil().connectVps(apiUrl, keyApp);
          if (sshClientStatus.sshClientStatus) {
            sshClient = sshClientStatus.sshClient;
          }
          var response = await ssh.HttpClientImpl(
                  clientFactory: () =>
                      ssh.SSHTunneledBaseClient(sshClientStatus.sshClient))
              .request(apiUrl,
                  method: 'POST',
                  data: jsonEncode(mapParams),
                  headers: requestHeaders);
          if (response.status == 200) {
            flipShortHashesResponse =
                flipShortHashesResponseFromJson(response.text);
          }
        } else {
          flipShortHashesRequest = FlipShortHashesRequest.fromJson(mapParams);
          logger.i(new JsonEncoder.withIndent('  ')
              .convert(flipShortHashesRequest));
          body = json.encode(flipShortHashesRequest.toJson());
          responseHttp = await http.post(Uri.parse(this.apiUrl),
              body: body, headers: requestHeaders);
          if (responseHttp.statusCode == 200) {
            flipShortHashesResponse =
                flipShortHashesResponseFromJson(responseHttp.body);
          }
        }
      }
      if (typeSession == EpochPeriod.LongSession) {
        if (this.nodeType == NORMAL_VPS_NODE) {
          SSHClientStatus sshClientStatus;
          sshClientStatus = await VpsUtil().connectVps(apiUrl, keyApp);
          if (sshClientStatus.sshClientStatus) {
            sshClient = sshClientStatus.sshClient;
          }
          var response = await ssh.HttpClientImpl(
                  clientFactory: () =>
                      ssh.SSHTunneledBaseClient(sshClientStatus.sshClient))
              .request(apiUrl,
                  method: 'POST',
                  data: jsonEncode(mapParams),
                  headers: requestHeaders);
          if (response.status == 200) {
            flipLongHashesResponse =
                flipLongHashesResponseFromJson(response.text);
          }
        } else {
          flipLongHashesRequest = FlipLongHashesRequest.fromJson(mapParams);
          logger.i(new JsonEncoder.withIndent('  ')
              .convert(flipLongHashesRequest));
          body = json.encode(flipLongHashesRequest.toJson());
          responseHttp = await http.post(Uri.parse(this.apiUrl),
              body: body, headers: requestHeaders);
          if (responseHttp.statusCode == 200) {
            flipLongHashesResponse =
                flipLongHashesResponseFromJson(responseHttp.body);
          }
        }
      }
    }

    List<ValidationSessionInfoFlips> listSessionValidationFlip =
        List<ValidationSessionInfoFlips>.empty(growable: true);
    List<ValidationSessionInfoFlips> listSessionValidationFlipExtra =
        List<ValidationSessionInfoFlips>.empty(growable: true);
    int nbFlips = 0;
    if (typeSession == EpochPeriod.ShortSession) {
      nbFlips = flipShortHashesResponse.result.length;
    }
    if (typeSession == EpochPeriod.LongSession) {
      nbFlips = flipLongHashesResponse.result.length;
    }

    for (int i = 0; i < nbFlips; i++) {
      ValidationSessionInfoFlips validationSessionInfoFlips =
          new ValidationSessionInfoFlips();
      if (typeSession == EpochPeriod.ShortSession) {
        validationSessionInfoFlips.hash =
            flipShortHashesResponse.result[i].hash;
        validationSessionInfoFlips.ready =
            flipShortHashesResponse.result[i].ready;
        validationSessionInfoFlips.extra =
            flipShortHashesResponse.result[i].extra;
        validationSessionInfoFlips.available =
            flipShortHashesResponse.result[i].available;
        validationSessionInfoFlips.answerType = AnswerType.NONE;
        validationSessionInfoFlips.relevanceType = RelevantType.NO_INFO;
      }
      if (typeSession == EpochPeriod.LongSession) {
        validationSessionInfoFlips.hash =
            flipLongHashesResponse.result[i].hash;
        validationSessionInfoFlips.ready =
            flipLongHashesResponse.result[i].ready;
        validationSessionInfoFlips.extra =
            flipLongHashesResponse.result[i].extra;
        validationSessionInfoFlips.available =
            flipLongHashesResponse.result[i].available;
        validationSessionInfoFlips.answerType = AnswerType.NONE;
        validationSessionInfoFlips.relevanceType = RelevantType.NO_INFO;
      }

      if (validationSessionInfoFlips.extra) {
        listSessionValidationFlipExtra.add(validationSessionInfoFlips);
      } else {
        if (this.nodeType == SHARED_NODE) {
          listSessionValidationFlip.add(validationSessionInfoFlips);
        } else {
          if (validationSessionInfoFlips.ready) {
            listSessionValidationFlip.add(validationSessionInfoFlips);
          }
        }
      }
    }

    validationSessionInfo.listSessionValidationFlips =
        listSessionValidationFlip;
    validationSessionInfo.listSessionValidationFlipsExtra =
        listSessionValidationFlipExtra;
  } catch (e) {
    logger.e(e.toString());
  }
  _completer.complete(validationSessionInfo);

  return _completer.future;
}