public StatementsResultLRSResponse QueryStatements(StatementsQuery query) { var r = new StatementsResultLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = "statements"; req.queryParams = query.ToParameterMap(version); var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } r.success = true; r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content))); return(r); }
public StatementsResultLRSResponse MoreStatements(StatementsResult result) { var r = new StatementsResultLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = endpoint.GetLeftPart(UriPartial.Authority); if (!req.resource.EndsWith("/")) { req.resource += "/"; } req.resource += result.more; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } r.success = true; r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content))); return(r); }
private StatementLRSResponse GetStatement(Dictionary <string, string> queryParams) { var r = new StatementLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = "statements"; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } r.success = true; r.content = new Statement(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content))); return(r); }
private LRSResponse SaveDocument(string resource, Dictionary <string, string> queryParams, Document document) { var r = new LRSResponse(); var req = new MyHTTPRequest(); req.method = "PUT"; req.resource = resource; req.queryParams = queryParams; req.contentType = document.contentType; req.content = document.content; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } r.success = true; return(r); }
private ProfileKeysLRSResponse GetProfileKeys(string resource, Dictionary <string, string> queryParams) { var r = new ProfileKeysLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = resource; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } r.success = true; var keys = JArray.Parse(Encoding.UTF8.GetString(res.content)); if (keys.Count > 0) { r.content = new List <string>(); foreach (var key in keys) { r.content.Add((string)key); } } return(r); }
public async Task <StatementLRSResponse> SaveStatement(Statement statement) { var r = new StatementLRSResponse(); var req = new MyHTTPRequest(); req.queryParams = new Dictionary <string, string>(); req.resource = "statements"; if (statement.id == null) { req.method = HttpMethod.Post; } else { req.method = HttpMethod.Put; req.queryParams.Add("statementId", statement.id.ToString()); } req.contentType = "application/json"; req.content = Encoding.UTF8.GetBytes(statement.ToJSON(version)); var res = await MakeRequest(req); if (statement.id == null) { if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content, (int)res.status); return(r); } var ids = JArray.Parse(Encoding.UTF8.GetString(res.content, 0, res.content.Length)); statement.id = new Guid((string)ids[0]); } else { if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } } r.success = true; r.content = statement; return(r); }
public StatementLRSResponse SaveStatement(Statement statement) { var r = new StatementLRSResponse(); var req = new MyHTTPRequest(); req.queryParams = new Dictionary <String, String>(); req.resource = "statements"; if (statement.id == null) { req.method = "POST"; } else { req.method = "PUT"; req.queryParams.Add("statementId", statement.id.ToString()); } req.contentType = "application/json"; req.content = Encoding.UTF8.GetBytes(statement.ToJSON(version)); var res = MakeSyncRequest(req); // TODO: Blocking if (statement.id == null) { if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } var ids = JArray.Parse(Encoding.UTF8.GetString(res.content)); statement.id = new Guid((String)ids[0]); } else { if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } } r.success = true; r.content = statement; return(r); }
async Task <MyHTTPResponse> GetDocument(string resource, Dictionary <string, string> queryParams, Document document) { var req = new MyHTTPRequest(); req.method = HttpMethod.Get; req.resource = resource; req.queryParams = queryParams; var res = await MakeRequest(req); if (res.status == HttpStatusCode.OK) { document.content = res.content; document.contentType = res.contentType; document.timestamp = res.lastModified; document.etag = res.etag; } return(res); }
private MyHTTPResponse GetDocument(String resource, Dictionary <String, String> queryParams, Document document) { var req = new MyHTTPRequest(); req.method = "GET"; req.resource = resource; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status == HttpStatusCode.OK) { document.content = res.content; document.contentType = res.contentType; document.timestamp = res.lastModified; document.etag = res.etag; } return(res); }
public async Task <StatementsResultLRSResponse> SaveStatements(List <Statement> statements) { var r = new StatementsResultLRSResponse(); var req = new MyHTTPRequest(); req.resource = "statements"; req.method = HttpMethod.Post; req.contentType = "application/json"; var jarray = new JArray(); foreach (Statement st in statements) { jarray.Add(st.ToJObject(version)); } req.content = Encoding.UTF8.GetBytes(jarray.ToString()); var res = await MakeRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content, (int)res.status); return(r); } var ids = JArray.Parse(Encoding.UTF8.GetString(res.content, 0, res.content.Length)); for (int i = 0; i < ids.Count; i++) { statements[i].id = new Guid((string)ids[i]); } r.success = true; r.content = new StatementsResult(statements); return(r); }
async Task <LRSResponse> SaveDocument(string resource, Dictionary <string, string> queryParams, Document document, RequestType requestType = RequestType.put) { var r = new LRSResponse(); var req = new MyHTTPRequest(); if (requestType == RequestType.post) { req.method = HttpMethod.Post; } else { req.method = HttpMethod.Put; } req.resource = resource; req.queryParams = queryParams; req.contentType = document.contentType; req.content = document.content; if (document.etag != null) { req.headers = new Dictionary <string, string>(); req.headers.Add("If-Match", document.etag); } var res = await MakeRequest(req); if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content, (int)res.status); return(r); } r.success = true; return(r); }
public AboutLRSResponse About() { var r = new AboutLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = "about"; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } r.success = true; r.content = new About(Encoding.UTF8.GetString(res.content)); return(r); }
private LRSResponse DeleteDocument(String resource, Dictionary <String, String> queryParams) { var r = new LRSResponse(); var req = new MyHTTPRequest(); req.method = "DELETE"; req.resource = resource; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return(r); } r.success = true; return(r); }
async Task <LRSResponse> DeleteDocument(string resource, Dictionary <string, string> queryParams) { var r = new LRSResponse(); var req = new MyHTTPRequest(); req.method = HttpMethod.Delete; req.resource = resource; req.queryParams = queryParams; var res = await MakeRequest(req); if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content, (int)res.status); return(r); } r.success = true; return(r); }
public async Task <AboutLRSResponse> About() { var r = new AboutLRSResponse(); var req = new MyHTTPRequest(); req.method = HttpMethod.Get; req.resource = "about"; var res = await MakeRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content, (int)res.status); return(r); } r.success = true; r.content = new About(Encoding.UTF8.GetString(res.content, 0, res.content.Length)); return(r); }
public StatementsResultLRSResponse QueryStatements(StatementsQuery query) { var r = new StatementsResultLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = "statements"; req.queryParams = query.ToParameterMap(version); var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } r.success = true; r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content))); return r; }
public StatementsResultLRSResponse SaveStatements(List<Statement> statements) { var r = new StatementsResultLRSResponse(); var req = new MyHTTPRequest(); req.resource = "statements"; req.method = "POST"; req.contentType = "application/json"; var jarray = new JArray(); foreach (Statement st in statements) { jarray.Add(st.ToJObject(version)); } req.content = Encoding.UTF8.GetBytes(jarray.ToString()); var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } var ids = JArray.Parse(Encoding.UTF8.GetString(res.content)); for (int i = 0; i < ids.Count; i++) { statements[i].id = new Guid((String)ids[i]); } r.success = true; r.content = new StatementsResult(statements); return r; }
public StatementLRSResponse SaveStatement(Statement statement) { var r = new StatementLRSResponse(); var req = new MyHTTPRequest(); req.queryParams = new Dictionary<String, String>(); req.resource = "statements"; if (statement.id == null) { req.method = "POST"; } else { req.method = "PUT"; req.queryParams.Add("statementId", statement.id.ToString()); } req.contentType = "application/json"; req.content = Encoding.UTF8.GetBytes(statement.ToJSON(version)); var res = MakeSyncRequest(req); if (statement.id == null) { if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } var ids = JArray.Parse(Encoding.UTF8.GetString(res.content)); statement.id = new Guid((String)ids[0]); } else { if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } } r.success = true; r.content = statement; return r; }
public AboutLRSResponse About() { var r = new AboutLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = "about"; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } r.success = true; r.content = new About(Encoding.UTF8.GetString(res.content)); return r; }
private StatementLRSResponse GetStatement(Dictionary<String, String> queryParams) { var r = new StatementLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = "statements"; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } r.success = true; r.content = new Statement(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content))); return r; }
private LRSResponse DeleteDocument(String resource, Dictionary<String, String> queryParams) { var r = new LRSResponse(); var req = new MyHTTPRequest(); req.method = "DELETE"; req.resource = resource; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.NoContent) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } r.success = true; return r; }
private ProfileKeysLRSResponse GetProfileKeys(String resource, Dictionary<String, String> queryParams) { var r = new ProfileKeysLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = resource; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } r.success = true; var keys = JArray.Parse(Encoding.UTF8.GetString(res.content)); if (keys.Count > 0) { r.content = new List<String>(); foreach (JToken key in keys) { r.content.Add((String)key); } } return r; }
private MyHTTPResponse GetDocument(String resource, Dictionary<String, String> queryParams, Document document) { var req = new MyHTTPRequest(); req.method = "GET"; req.resource = resource; req.queryParams = queryParams; var res = MakeSyncRequest(req); if (res.status == HttpStatusCode.OK) { document.content = res.content; document.contentType = res.contentType; document.timestamp = res.lastModified; document.etag = res.etag; } return res; }
private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req) { String url; if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (!url.EndsWith("/") && !req.resource.StartsWith("/")) { url += "/"; } url += req.resource; } if (req.queryParams != null) { String qs = ""; foreach (KeyValuePair <String, String> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += HttpUtility.UrlEncode(entry.Key) + "=" + HttpUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } // TODO: handle special properties we recognize, such as content type, modified since, etc. var webReq = (HttpWebRequest)WebRequest.Create(url); webReq.Method = req.method; webReq.Headers.Add("X-Experience-API-Version", version.ToString()); if (auth != null) { webReq.Headers.Add("Authorization", auth); } if (req.headers != null) { foreach (KeyValuePair <String, String> entry in req.headers) { webReq.Headers.Add(entry.Key, entry.Value); } } if (req.contentType != null) { webReq.ContentType = req.contentType; } else { webReq.ContentType = "application/octet-stream"; } if (req.content != null) { webReq.ContentLength = req.content.Length; using (var stream = webReq.GetRequestStream()) { stream.Write(req.content, 0, req.content.Length); } } MyHTTPResponse resp; try { using (var webResp = (HttpWebResponse)webReq.GetResponse()) { resp = new MyHTTPResponse(webResp); } } catch (WebException ex) { if (ex.Response != null) { using (var webResp = (HttpWebResponse)ex.Response) { resp = new MyHTTPResponse(webResp); } } else { resp = new MyHTTPResponse(); resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); } resp.ex = ex; } return(resp); }
async Task <MyHTTPResponse> MakeRequest(MyHTTPRequest req) { string url; if (req.resource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (!url.EndsWith("/", StringComparison.Ordinal) && !req.resource.StartsWith("/", StringComparison.Ordinal)) { url += "/"; } url += req.resource; } if (req.queryParams != null) { string qs = ""; foreach (KeyValuePair <string, string> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += WebUtility.UrlEncode(entry.Key) + "=" + WebUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } var webReq = new HttpRequestMessage(req.method, new Uri(url)); // We only have one client. We cannot modify it while its in use. await makeRequestSemaphore.WaitAsync(); webReq.Headers.Add("X-Experience-API-Version", version.ToString()); webReq.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(req.contentType ?? "application/content-stream")); if (auth != null) { webReq.Headers.Add("Authorization", auth); } if (req.headers != null) { foreach (var entry in req.headers) { if (webReq.Headers.Contains(entry.Key)) { makeRequestSemaphore.Release(); throw new InvalidOperationException($"Tried to add duplicate entry {entry.Key} to request headers with value {entry.Value}; previous value {client.DefaultRequestHeaders.GetValues(entry.Key)}"); } webReq.Headers.Add(entry.Key, entry.Value); } } if (req.content != null) { webReq.Content = new ByteArrayContent(req.content); webReq.Content.Headers.Add("Content-Length", req.content.Length.ToString()); webReq.Content.Headers.Add("Content-Type", req.contentType ?? "text/plain"); } MyHTTPResponse resp; try { var response = await client.SendAsync(webReq).ConfigureAwait(false); resp = new MyHTTPResponse(response); } catch (WebException ex) { if (ex.Response != null) { resp = new MyHTTPResponse(); using (var stream = ex.Response.GetResponseStream()) { resp.content = ReadFully(stream, (int)ex.Response.ContentLength); } resp.contentType = ex.Response.ContentType; resp.ex = ex; } else { resp = new MyHTTPResponse(); resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); } resp.ex = ex; } finally { makeRequestSemaphore.Release(); } return(resp); }
public StatementsResultLRSResponse MoreStatements(StatementsResult result) { var r = new StatementsResultLRSResponse(); var req = new MyHTTPRequest(); req.method = "GET"; req.resource = endpoint.GetLeftPart(UriPartial.Authority); if (! req.resource.EndsWith("/")) { req.resource += "/"; } req.resource += result.more; var res = MakeSyncRequest(req); if (res.status != HttpStatusCode.OK) { r.success = false; r.httpException = res.ex; r.SetErrMsgFromBytes(res.content); return r; } r.success = true; r.content = new StatementsResult(new Json.StringOfJSON(Encoding.UTF8.GetString(res.content))); return r; }
private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req) { String url; if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (! url.EndsWith("/") && ! req.resource.StartsWith("/")) { url += "/"; } url += req.resource; } if (req.queryParams != null) { String qs = ""; foreach (KeyValuePair<String, String> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += HttpUtility.UrlEncode(entry.Key) + "=" + HttpUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } // TODO: handle special properties we recognize, such as content type, modified since, etc. var webReq = (HttpWebRequest)WebRequest.Create(url); webReq.Method = req.method; webReq.Headers.Add("X-Experience-API-Version", version.ToString()); if (auth != null) { webReq.Headers.Add("Authorization", auth); } if (req.headers != null) { foreach (KeyValuePair<String, String> entry in req.headers) { webReq.Headers.Add(entry.Key, entry.Value); } } if (req.contentType != null) { webReq.ContentType = req.contentType; } else { webReq.ContentType = "application/octet-stream"; } if (req.content != null) { webReq.ContentLength = req.content.Length; using (var stream = webReq.GetRequestStream()) { stream.Write(req.content, 0, req.content.Length); } } MyHTTPResponse resp; try { using (var webResp = (HttpWebResponse)webReq.GetResponse()) { resp = new MyHTTPResponse(webResp); } } catch (WebException ex) { if (ex.Response != null) { using (var webResp = (HttpWebResponse)ex.Response) { resp = new MyHTTPResponse(webResp); } } else { resp = new MyHTTPResponse(); resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); } resp.ex = ex; } return resp; }
private MyHTTPResponse MakeSyncRequest(MyHTTPRequest req) { String url; // Replaced: if (req.resource.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) // Unity build error // With.... if (req.resource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { url = req.resource; } else { url = endpoint.ToString(); if (!url.EndsWith("/") && !req.resource.StartsWith("/")) { url += "/"; } url += req.resource; } /////////// /////////// /////////// if (req.queryParams != null) { String qs = ""; foreach (KeyValuePair <String, String> entry in req.queryParams) { if (qs != "") { qs += "&"; } qs += WebUtility.UrlEncode(entry.Key) + "=" + WebUtility.UrlEncode(entry.Value); } if (qs != "") { url += "?" + qs; } } ///////// //////// //////// // TODO: handle special properties we recognize, such as content type, modified since, etc. var unityWebReq = new UnityWebRequest(); unityWebReq.url = url; unityWebReq.method = req.method; unityWebReq.SetRequestHeader("X-Experience-API-Version", version.ToString()); if (auth != null) { unityWebReq.SetRequestHeader("Authorization", auth); } if (req.headers != null) { foreach (KeyValuePair <String, String> entry in req.headers) { unityWebReq.SetRequestHeader(entry.Key, entry.Value); } } if (req.contentType != null) { unityWebReq.SetRequestHeader("Content-Type", req.contentType); } else { unityWebReq.SetRequestHeader("Content-type", "application/octet-stream"); } if (req.content != null) { unityWebReq.SetRequestHeader("content-length", req.content.Length.ToString()); unityWebReq.uploadHandler = (UploadHandler) new UploadHandlerRaw(req.content); unityWebReq.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer(); unityWebReq.chunkedTransfer = false; // Is this needed? unityWebReq.SendWebRequest(); unityWebReq.timeout = 10; while (!unityWebReq.isDone) /// erghhhh, is this safe? Make sure there is a timeout attached in this class somewhere... { // Wait. Makes it sync in Unity. Think this is fineeeee } } // Do we need to use a "while(!request.downloadHandler.isDone)" ???? MyHTTPResponse resp = new MyHTTPResponse(unityWebReq); // LAAR TODO: Ensure that all functionality / safety guards from below are contained. /* * try * { * * using (var webResp = (HttpWebResponse)webReq.GetResponse()) // Unity build error * { * resp = new MyHTTPResponse(webResp); * } * * } * catch (WebException ex) * { * if (ex.Response != null) * { * using (var webResp = (HttpWebResponse)ex.Response) * { * resp = new MyHTTPResponse(webResp); * } * } * else * { * resp = new MyHTTPResponse(); * resp.content = Encoding.UTF8.GetBytes("Web exception without '.Response'"); * } * resp.ex = ex; * } * // */ return(resp); }