public async Task<PortCheckResult> RunAsync()
{
var client = new WebClient();
var data = new JObject();
data["instanceId"] = InstanceId.ToString("N");
data["ports"] = new JArray(Ports);
var succeeded = false;
var stopwatch = new System.Diagnostics.Stopwatch();
string response_body = null;
try {
stopwatch.Start();
var body = System.Text.Encoding.UTF8.GetBytes(data.ToString());
response_body = System.Text.Encoding.UTF8.GetString(
await client.UploadDataTaskAsync(Target, body)
);
stopwatch.Stop();
succeeded = true;
var response = JToken.Parse(response_body);
var response_ports = response["ports"].Select(token => (int)token);
return new PortCheckResult(
succeeded,
response_ports.ToArray(),
stopwatch.Elapsed);
}
catch (WebException) {
succeeded = false;
return new PortCheckResult(
succeeded,
null,
stopwatch.Elapsed);
}
catch (Newtonsoft.Json.JsonReaderException) {
succeeded = false;
return new PortCheckResult(
succeeded,
null,
stopwatch.Elapsed);
}
}
}