public bool GetState(JObject model) { #if DEBUG return(true); #else // parse the JSON UInt64 houseID = (UInt64)model["houseID"]; UInt64 roomID = (UInt64)model["roomID"]; UInt64 deviceID = (UInt64)model["deviceID"]; string deviceClass = (string)model["deviceClass"]; string houseURL = (string)model["houseURL"]; // done parsing JSON TimeFrame frame = new TimeFrame(); var id = new FullID(); id.HouseID = houseID; id.RoomID = roomID; id.DeviceID = deviceID; JObject jHouseString = new JObject(); jHouseString["houseURL"] = houseURL; string HouseString = jHouseString.ToString(); JObject jDeviceString = new JObject(); jDeviceString["ID"] = Convert.ToString(deviceID); jDeviceString["Class"] = deviceClass; string DeviceString = jDeviceString.ToString(); var dev_out = ServerSideAPI.CreateDevice(id, HouseString, DeviceString, frame); if (dev_out != null) //Good to go { //state changed means some value was changed, e.g. the command was not idempotent var ok = dev_out.update(); var json = JsonConvert.SerializeObject(dev_out); //this JSON blob should be sent to whomever wants updates AppCache.AddDeviceBlob(JObject.Parse(json)); } return(true); #endif }
public bool PostState(JObject deviceBlob) { //POST UD/HOUSEID/ROOMID/DEVICEID UInt64 houseID; UInt64 roomID; UInt64 deviceID; #if DEBUG try { houseID = (UInt64)deviceBlob["houseID"]; roomID = (UInt64)deviceBlob["roomID"]; deviceID = (UInt64)deviceBlob["deviceID"]; } catch (WebException ex) { LogFile.AddLog("House -- Could not access correct keys: " + ex.Message + "\n"); return(false); } return(true); #else try { houseID = (UInt64)deviceBlob["houseID"]; roomID = (UInt64)deviceBlob["roomID"]; deviceID = (UInt64)deviceBlob["deviceID"]; } catch (Exception ex) { LogFile.AddLog("House -- Invalid Keys are used: " + ex.Message + "\n"); return(false); } try { WebRequest request = WebRequest.Create(DeviceRepository.storageURL + "UD/" + houseID + "/" + roomID + "/" + deviceID); request.ContentType = "application/json"; request.Method = "POST"; try { using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(deviceBlob.ToString()); streamWriter.Flush(); streamWriter.Close(); } using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { if (response.StatusCode != HttpStatusCode.OK) { throw new Exception(String.Format( "Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription)); } } } catch (Exception ex) { LogFile.AddLog("House -- Failed to Post state change to Storage: " + ex.Message + "\n"); return(false); } try { #if DEBUG if (!AppCache.AddDeviceBlob_DEBUG(deviceBlob)) { throw new Exception("AppCache add device failed when adding: " + deviceBlob.ToString()); } #else if (!AppCache.AddDeviceBlob(deviceBlob)) { throw new Exception("AppCache add device failed when adding: " + deviceBlob.ToString()); } #endif } catch (Exception ex) { LogFile.AddLog("House -- " + ex.Message + "\n"); return(false); } } catch (SystemException ex) { LogFile.AddLog("DeviceStateHouse -- Failed to create URL from data provided: " + ex.Message + "\n"); return(false); } return(true); #endif }
public bool StateUpdate(JObject model) { UInt64 houseId, roomId; string deviceType; UInt64 deviceId; #if DEBUG try { houseId = (UInt64)model["houseID"]; // houseID is the correct key and is type UInt64 roomId = (UInt64)model["roomID"]; // roomID is the correct key and is type UInt64 deviceType = (string)model["Type"]; // Type is the correct key and is type string } catch (Exception ex) { // catches the exception if any of the keys are missing LogFile.AddLog("Decision -- Invalid Keys: " + ex.Message + "\n"); return(false); } #else try { houseId = (UInt64)model["houseID"]; // houseID is the correct key and is type UInt64 roomId = (UInt64)model["roomID"]; // roomID is the correct key and is type UInt64 deviceType = (string)model["Type"]; // Type is the correct key and is type string WebRequest request = WebRequest.Create(houseApiHost + "/" + houseId + "/" + roomId + "/" + deviceType); request.Method = "POST"; using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(model.ToString()); streamWriter.Close(); } try { using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { if (response.StatusCode != HttpStatusCode.OK) { throw new Exception(String.Format( "Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription)); } } } catch (Exception ex) { LogFile.AddLog("Decision -- Failed to send data to the House System: " + ex.Message + "\n"); return(false); } request = WebRequest.Create(DeviceRepository.storageURL + "UD/" + (UInt64)model["HouseID"] + "/" + (UInt64)model["RoomID"] + "/" + (UInt64)model["DeviceID"]); request.Method = "POST"; using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(model.ToString()); streamWriter.Close(); } try { using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { if (response.StatusCode != HttpStatusCode.OK) { throw new Exception(String.Format( "Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription)); } } } catch (Exception ex) { LogFile.AddLog("Decision -- Failed to send data to the Storage: " + ex.Message + "\n"); return(false); } try { #if DEBUG if (!AppCache.AddDeviceBlob_DEBUG(model)) { throw new Exception("Decision -- AppCache add device failed when adding: " + model.ToString()); } #else if (!AppCache.AddDeviceBlob(model)) { throw new Exception("Decision -- AppCache add device failed when adding: " + model.ToString()); } #endif } catch (Exception ex) { LogFile.AddLog(ex.Message + "\n"); return(false); } } catch (SystemException ex) { LogFile.AddLog("Decision -- Could not create the specified url with the data provided: " + ex.Message + "\n"); return(false); } #endif return(true); }