sendString method
Sends the specified payload.
Returns true
if sent successfully.
Implementation
@override
Future<bool> sendString(final String payload) async {
final newRecord = PayloadRecord(
accessToken: config.accessToken,
endpoint: config.endpoint,
payload: payload,
);
records.add(newRecord);
records.where(didExpire).forEach(records.remove);
if (_State.suspended) return false;
final httpClient = config.httpClient();
try {
for (final record in records) {
final response = await httpClient.post(
uri,
headers: headers,
body: record.payload,
);
if (response.status == HttpStatus.success) {
records.remove(record);
continue;
}
log(response);
switch (response.statusCode) {
case 413: // Payload Too Large
case 422: // Unprocessable Entity
records.remove(record);
break;
case 429: // Too Many Requests
case 500: // Internal Server Error
case 501: // Not Implemented
case 502: // Bad Gateway
case 503: // Service Unavailable
case 504: // Gateway Timeout
_State.suspend(30.seconds);
return false;
}
}
return !records.contains(newRecord);
} on http.ClientException catch (error, stackTrace) {
log(error, stackTrace);
return false;
} finally {
httpClient.close();
}
}