using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Windows.UI.Popups; using Windows.Web.Http; namespace HueUWP { public class NetworkHandler { public NetworkHandler() { } private static async Task Put(string path, string json) { var cts = new CancellationTokenSource(); cts.CancelAfter(5000); //System.Diagnostics.Debug.WriteLine("PUT:\n" + path +"\n"+json); try { HttpClient client = new HttpClient(); HttpStringContent content = new HttpStringContent(json, Windows.Storage.Streams.UnicodeEncoding.Utf8, "application /json"); Uri uriLampState = new Uri($"http://{(string) App.LOCAL_SETTINGS.Values["ip"]}:{(int)App.LOCAL_SETTINGS.Values["port"]}/api/" + path); var response = await client.PutAsync(uriLampState, content).AsTask(cts.Token); if (!response.IsSuccessStatusCode) { return "error"; } string jsonResponse = await response.Content.ReadAsStringAsync(); //System.Diagnostics.Debug.WriteLine(jsonResponse); return jsonResponse; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return "error"; } } private static async Task Post(string path, string json) { var cts = new CancellationTokenSource(); cts.CancelAfter(5000); try { HttpClient client = new HttpClient(); HttpStringContent content = new HttpStringContent(json, Windows.Storage.Streams.UnicodeEncoding.Utf8, "application /json"); Uri uriLampState = new Uri($"http://{(string) App.LOCAL_SETTINGS.Values["ip"]}:{(int)App.LOCAL_SETTINGS.Values["port"]}/api/" + path); var response = await client.PostAsync(uriLampState, content).AsTask(cts.Token); if (!response.IsSuccessStatusCode) { return "error"; } string jsonResponse = await response.Content.ReadAsStringAsync(); //System.Diagnostics.Debug.WriteLine(jsonResponse); return jsonResponse; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return "error"; } } private static async Task Get(string path) { var cts = new CancellationTokenSource(); cts.CancelAfter(5000); try { HttpClient client = new HttpClient(); //HttpStringContent content = new HttpStringContent($"{{\"devicetype\":\"Test#Test\"}}", Windows.Storage.Streams.UnicodeEncoding.Utf8, "application /json"); Uri uriLampState = new Uri($"http://{(string) App.LOCAL_SETTINGS.Values["ip"]}:{(int)App.LOCAL_SETTINGS.Values["port"]}/api/" + path); var response = await client.GetAsync(uriLampState).AsTask(cts.Token); if (!response.IsSuccessStatusCode) { return "error"; } string jsonResponse = await response.Content.ReadAsStringAsync(); //System.Diagnostics.Debug.WriteLine(jsonResponse); return jsonResponse; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return "error"; } } public static async Task Lights() { var response = await Get($"{(String)App.LOCAL_SETTINGS.Values["id"]}/lights"); if (string.IsNullOrEmpty(response)) return "error"; return response; } public static async Task Light(int id) { var response = await Get($"{(String)App.LOCAL_SETTINGS.Values["id"]}/lights/{id}"); if (string.IsNullOrEmpty(response)) return "error"; return response; } public static async Task SetLight(int lightid, string json) { var response = await Put($"{(String)App.LOCAL_SETTINGS.Values["id"]}/lights/{lightid}/state", json); return response; } public static async Task SetLight(int lightid, bool state) { string json = $"{{\"on\": { ((state) ? "true" : "false") }}}"; var response = await Put($"{(String)App.LOCAL_SETTINGS.Values["id"]}/lights/{lightid}/state", json); return response; } public static async Task SetLight(int lightid, int hue, int saturation, int brightness, bool instant = false) { string json = $"{{\"hue\": {(hue)},\"bri\": {brightness},\"sat\": {saturation} {(instant ? ",\"transitiontime\":0" : "")}}}"; var response = await Put($"{(String)App.LOCAL_SETTINGS.Values["id"]}/lights/{lightid}/state", json); return response; } public static async Task RegisterName(string AppName, string UserName) { var response = await Post("",$"{{\"devicetype\":\"{AppName}#{UserName}\"}}"); if (string.IsNullOrEmpty(response)) return "error"; return response; } public static async Task Groups() { var response = await Get($"{(String)App.LOCAL_SETTINGS.Values["id"]}/groups"); if (string.IsNullOrEmpty(response)) return "error"; return response; } public static async Task Group(int id) { var response = await Get($"{(String)App.LOCAL_SETTINGS.Values["id"]}/groups/{id}"); if (string.IsNullOrEmpty(response)) return "error"; return response; } public static async Task SetGroup(int groupid, string json) { var response = await Put($"{(String)App.LOCAL_SETTINGS.Values["id"]}/groups/{groupid}/action", json); return response; } public static async Task SetGroup(int groupid, bool state) { string json = $"{{\"on\": { ((state) ? "true" : "false") }}}"; var response = await Put($"{(String)App.LOCAL_SETTINGS.Values["id"]}/groups/{groupid}/action", json); return response; } public static async Task SetGroup(int groupid, int hue, int saturation, int brightness, bool instant = false) { string json = $"{{\"hue\": {(hue)},\"bri\": {brightness},\"sat\": {saturation} {(instant ? ",\"transitiontime\":0" : "")}}}"; var response = await Put($"{(String)App.LOCAL_SETTINGS.Values["id"]}/groups/{groupid}/action", json); return response; } } }