package bce.client.requests; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import bce.client.player.BCEHandler; public abstract class BCERequest implements Runnable { protected BCEHandler handler; protected URL url; protected String sessionId; public BCERequest(BCEHandler handler, URL url, String sessionId) { this.handler = handler; this.url = url; this.sessionId = sessionId; } public abstract byte[] getRequestContent(); private void connect() throws IOException{ HttpsURLConnection conn = (HttpsURLConnection) this.url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("POST"); if (this.sessionId != null) { conn.setRequestProperty("Set-Cookie", this.sessionId); } conn.setUseCaches(false); conn.setInstanceFollowRedirects(false); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.connect(); OutputStream out = conn.getOutputStream(); out.write(getRequestContent()); out.flush(); out.close(); InputStream in = conn.getInputStream(); byte[] buf = new byte[16]; int len; ByteArrayOutputStream buffer = new ByteArrayOutputStream(); while ((len = in.read(buf)) > 0) { buffer.write(buf, 0, len); } buffer.flush(); in.close(); byte[] responseData = buffer.toByteArray(); buffer.close(); conn.disconnect(); this.handler.handleResponse(responseData); } @Override public final void run() { try { connect(); } catch (IOException e) { e.printStackTrace(); } } }