package org.opendc.common.utils import java.io.File import java.io.InputStreamReader import java.net.URI import java.net.http.* import java.net.http.HttpResponse.BodyHandlers.ofString /** * Singleton class representing the real datacenter client. * The client is asynchronous and initiates the connection first. * * @author Mateusz Kwiatkowski */ public class HTTPClient private constructor() { public companion object { private var instance: HTTPClient? = null private var client = HttpClient.newBuilder().build() public fun getInstance(): HTTPClient? { if (instance == null) { instance = HTTPClient() } return instance } } // TODO: this class must send the experiment JSON file to the digital twin public fun sendExperiment(experiment: File) { val input = experiment.inputStream() val charArray = CharArray(experiment.length().toInt()) val isr = InputStreamReader(input) isr.read(charArray) val request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:8080/assets")) .header("Content-type", "application/json") // TODO: this is obviously wrong, find an efficient way to send JSON over network .POST(HttpRequest.BodyPublishers.ofString(String(charArray))) .build() val response = client?.send(request, ofString()) check(response?.statusCode() == 200) } }