/// <summary> /// This method will retrieve Gen1 and Gen2 XML IRCC Command List or Gen3 JSON Command List. /// </summary> /// <returns>Returns a string containing the contents of the returned XML Command List for your Use</returns> /// <remarks>This method will also populate the SonyDevice.Commands object list with the retrieved command list</remarks> public string get_remote_command_list() { string cmdList = ""; if (this.Actionlist.RegisterMode <= 2) { _Log.writetolog(this.Name + " is Retrieving Generation:" + this.Actionlist.RegisterMode + " Remote Command List", false); cmdList = HttpGet(this.Actionlist.getRemoteCommandList); if (cmdList != "") { _Log.writetolog("Retrieve Command List was Successful", true); DataSet CommandList = new DataSet(); System.IO.StringReader xmlSR = new System.IO.StringReader(cmdList); CommandList.ReadXml(xmlSR, XmlReadMode.Auto); DataTable IRCCcmd = new DataTable(); var items = CommandList.Tables[0].AsEnumerable().Select(r => new SonyCommands { name = r.Field<string>("name"), value = r.Field<string>("value") }); var itemlist = items.ToList(); this.Commands = itemlist; _Log.writetolog(this.Name + " Commands have been Populated", true); } else { _Log.writetolog("Retrieve Command List was NOT successful", true); } } else { _Log.writetolog(this.Name + " is Retrieving Generation:" + this.Actionlist.RegisterMode + " Remote Command List", false); var httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://" + this.Device_IP_Address + @"/sony/system"); httpWebRequest.ContentType = "text/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"id\":20,\"method\":\"getRemoteControllerInfo\",\"version\":\"1.0\",\"params\":[]}"; streamWriter.Write(json); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); cmdList = responseText; if (cmdList != "") { _Log.writetolog("Response Returned: " + cmdList, true); _Log.writetolog("Retrieve Command List was Successful", true); } else { _Log.writetolog("Retrieve Command List was NOT successful", true); } dataSet = JsonConvert.DeserializeObject<SonyCommandList>(responseText); } string first = dataSet.result[1].ToString(); List<SonyCommands> bal = JsonConvert.DeserializeObject<List<SonyCommands>>(first); this.Commands = bal; _Log.writetolog(this.Name + " Commands have been Populated: " + this.Commands.Count().ToString(), true); } return cmdList; }
/// <summary> /// This method Gets the current Status of the device /// </summary> /// <returns>Returns the device response as a string</returns> public string checkStatus() { string retstatus = ""; if (this.Actionlist.RegisterMode != 3) { try { _Log.writetolog("Checking Status of Device " + this.Name, false); string cstatus; int x; cstatus = HttpGet(this.Actionlist.getStatus); cstatus = cstatus.Replace("/n", ""); x = cstatus.IndexOf("name="); cstatus = cstatus.Substring(x + 6); x = cstatus.IndexOf("\""); string sname = cstatus.Substring(0, x); cstatus = cstatus.Substring(x); x = cstatus.IndexOf("value="); cstatus = cstatus.Substring(x + 7); x = cstatus.IndexOf("\""); string sval = cstatus.Substring(0, x); retstatus = sname + ":" + sval; _Log.writetolog("Device returned a Status of: " + retstatus, true); } catch (Exception ex) { _Log.writetolog("Checking Device Status for " + this.Name + " Failed!", true); _Log.writetolog(ex.ToString(), true); retstatus = ""; } } else { try { _Log.writetolog("Checking Status of Device " + this.Name, false); var httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://" + this.Device_IP_Address + @"/sony/system"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"id\":19,\"method\":\"getPowerStatus\",\"version\":\"1.0\",\"params\":[]}\""; streamWriter.Write(json); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); dataSet = JsonConvert.DeserializeObject<SonyCommandList>(responseText); } string first = dataSet.result[0].ToString(); first = first.Replace("{", ""); first = first.Replace("\"", ""); retstatus = first; _Log.writetolog("Device returned a Status of: " + retstatus, true); } catch (Exception ex) { _Log.writetolog("Check Status Failed: " + ex, true); } } return retstatus; }
/// <summary> /// Method used to retrieve Gen3 Devices Mac Address /// </summary> /// <returns></returns> public string getDeviceMac(SonyDevice mDev) { String macaddress = ""; _Log.writetolog("Retrieving the Mac Address from: " + mDev.Name + " at IP: " + mDev.Device_IP_Address, true); var httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://" + mDev.Device_IP_Address + @"/sony/system"); httpWebRequest.ContentType = "text/json"; httpWebRequest.Method = "POST"; SonyCommandList dataSet = new SonyCommandList(); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"id\":19,\"method\":\"getSystemSupportedFunction\",\"version\":\"1.0\",\"params\":[]}\""; streamWriter.Write(json); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); dataSet = JsonConvert.DeserializeObject<SonyCommandList>(responseText); } string first = dataSet.result[0].ToString(); List<SonyOption> bal = JsonConvert.DeserializeObject<List<SonyOption>>(first); macaddress = bal.Find(x => x.option.ToLower() == "WOL".ToLower()).value.ToString(); _Log.writetolog("Devices Mac Address: " + macaddress, true); return macaddress; }
/// <summary> /// Executes the XGetStatus action. /// </summary> /// <param name="parent">Parent Device object to get the Status from.</param> public string XGetStatus(SonyDevice parent) { string retstatus = ""; if (parent.Actionlist.RegisterMode != 3) { if (parent.Actionlist.getStatus != null) { try { _Log.writetolog("Checking Status of Device " + parent.Name, false); string cstatus; int x; //cstatus = HttpGet(parent.Actionlist.getStatus); String Url = parent.Actionlist.getStatus; _Log.writetolog("Creating HttpWebRequest to URL: " + Url, true); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url); req.KeepAlive = true; // Set our default header Info _Log.writetolog("Setting Header Information: " + req.Host.ToString(), false); req.Host = parent.Device_IP_Address + ":" + parent.Device_Port; req.UserAgent = "Dalvik/1.6.0 (Linux; u; Android 4.0.3; EVO Build/IML74K)"; req.Headers.Add("X-CERS-DEVICE-INFO", "Android4.03/TVSideViewForAndroid2.7.1/EVO"); req.Headers.Add("X-CERS-DEVICE-ID", "TVSideView:" + parent.Server_Macaddress); req.Headers.Add("Accept-Encoding", "gzip"); try { _Log.writetolog("Creating Web Request Response", false); System.Net.WebResponse resp = req.GetResponse(); _Log.writetolog("Executing StreamReader", false); System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream()); cstatus = sr.ReadToEnd().Trim(); _Log.writetolog("Response returned: " + cstatus, false); sr.Close(); resp.Close(); cstatus = cstatus.Replace("/n", ""); x = cstatus.IndexOf("name="); cstatus = cstatus.Substring(x + 6); x = cstatus.IndexOf("\""); string sname = cstatus.Substring(0, x); cstatus = cstatus.Substring(x); x = cstatus.IndexOf("value="); cstatus = cstatus.Substring(x + 7); x = cstatus.IndexOf("\""); string sval = cstatus.Substring(0, x); retstatus = sname + ":" + sval; _Log.writetolog("Device returned a Status of: " + retstatus, true); } catch (Exception e) { _Log.writetolog("There was an error during the Web Request or Response! " + e.ToString(), true); } } catch (Exception ex) { _Log.writetolog("Checking Device Status for " + parent.Name + " Failed!", true); _Log.writetolog(ex.ToString(), true); retstatus = ""; } } else { _Log.writetolog("ERROR: getStatusUrl is NULL", true); _Log.writetolog("This device is not compatiable with this Service!", false); return "Error"; } } else { try { _Log.writetolog("Checking Status of Device " + parent.Name, false); var httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://" + parent.Device_IP_Address + @"/sony/system"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; SonyCommandList dataSet = new SonyCommandList(); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"id\":19,\"method\":\"getPowerStatus\",\"version\":\"1.0\",\"params\":[]}\""; streamWriter.Write(json); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); dataSet = JsonConvert.DeserializeObject<SonyCommandList>(responseText); } string first = dataSet.result[0].ToString(); first = first.Replace("{", ""); first = first.Replace("\"", ""); retstatus = first; _Log.writetolog("Device returned a Status of: " + retstatus, true); } catch (Exception ex) { _Log.writetolog("Check Status Failed: " + ex, true); } } parent.IRCC.sv_LastChange = retstatus; parent.IRCC.sv_CurrentStatus = retstatus; return retstatus; }