/// <summary> /// If the remote IP address is that of a known Acurite Access device, we will sniff whatever data we want from it and proxy the request to Acurite. /// </summary> /// <param name="p"></param> /// <returns></returns> private bool HandleRequestFromAcuriteAccessDevice(HttpProcessor p) { if (Program.settings.GetAcuriteAccessIPs().Contains(p.RemoteIPAddressStr)) { ProxyDataBuffer proxiedDataBuffer = new ProxyDataBuffer(); p.ProxyTo("https://atlasapi.myacurite.com" + p.request_url.PathAndQuery, 30000, true, proxiedDataBuffer); lastAcuriteAccessRequests.Enqueue(proxiedDataBuffer); if (lastAcuriteAccessRequests.Count > 10) { lastAcuriteAccessRequests.TryDequeue(out ProxyDataBuffer removed); } foreach (string str in proxiedDataBuffer.Items.Select(i => i.PayloadAsString)) { Match m = rxGetURL.Match(str); if (m.Success) { SensorBase sensorData = new SensorBase(m.Groups[2].Value); sensorDataCollection[sensorData.UniqueID] = sensorData; List <DataFileTemplate> templates = Program.settings.GetSensorDataTemplates(); foreach (DataFileTemplate template in templates) { if (sensorData.UniqueID == template.UniqueID || sensorData.DeviceName == template.UniqueID) { sensorData.WriteFile(template); } } } } return(true); } return(false); }
public void ReceiveData(string str) { try { lastRequests.Enqueue(str); if (lastRequests.Count > 10) { lastRequests.TryDequeue(out string removed); } Match m = rxGetURL.Match(str); if (m.Success) { SensorBase sensorData = new SensorBase(m.Groups[2].Value); sensorDataCollection[sensorData.UniqueID] = sensorData; List <DataFileTemplate> templates = Program.settings.GetSensorDataTemplates(); foreach (DataFileTemplate template in templates) { if (sensorData.UniqueID == template.UniqueID) { sensorData.WriteFile(template); } } } } catch (Exception ex) { Logger.Debug(ex); } }