public static bool GetTemperature(RequestReceivedEventArgs e, JsonArray h)
        {
            try
            {
                DateTime timeOfReading = DateTime.Now;

                JsonObject reading = new JsonObject();
                reading.Add("timeOfReading", timeOfReading.ToString());
                reading.Add("temperatureCelsius", PinManagement.temperatureCelsiusSensor.ToString("f2"));
                reading.Add("temperatureFahrenheit", PinManagement.currentTemperatureSensor.ToString("f2"));
                reading.Add("isHeating", PinManagement.isHeating.ToString());
                reading.Add("pidOutput", PinManagement.currentPIDOuput.ToString("f2"));
                reading.Add("setTemperature", PinManagement.setTemperature.ToString("f2"));

                if ((PinManagement.mashSteps != null) && (PinManagement.mashSteps.CurrentStep != null))
                {
                    reading.Add("currentMashStep", PinManagement.mashSteps.CurrentStep.StepNumber.ToString());
                    reading.Add("currentMashTemp", PinManagement.mashSteps.CurrentStep.Temperature.ToString("f2"));
                    TimeSpan timeInterval = DateTime.Now.Subtract(PinManagement.currentMashStepStartTime);
                    reading.Add("currentMashTime", timeInterval.Minutes);
                }

                h.Add(reading);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }

            return true;
        }
 /// <summary>
 /// Execute this to check if SendResponse should be executed
 /// </summary>
 /// <param name="RequestArguments">Event Args</param>
 /// <returns>True if URL refers to this method, otherwise false (false = SendRequest should not be executed) </returns>
 public override bool ConditionsCheckAndDataFill(RequestReceivedEventArgs RequestArguments)
 {
     _Pairs.Clear();
     if (RequestArguments.Request.URL == this.Name)
         return _CheckResponse(RequestArguments, _Pairs);
     else
         return false;
 }
        public static bool UpdateMashProfile(RequestReceivedEventArgs e, JsonArray h)
        {
            try
            {
                string[] steps = null;
                string[] stepData = null;
                float tempValue = 0.0F;
                MashStep newMashStep = null;

                PinManagement.mashSteps = new MashSteps();
                PinManagement.mashSteps.Steps = new ArrayList();

                // mashProfile=0:122:15,1:135:15,2:148:60,3:170:15,4:225:90,

                if (e.Request.GetArguments.Contains("mashProfile"))
                {
                    string temp = e.Request.GetArguments["mashProfile"].ToString();
                    temp = temp.Replace("%3A", ":");
                    temp = temp.Replace("%2C", ",");

                    steps = temp.Split(',');

                    if (steps != null)
                    {
                        foreach (string step in steps)
                        {
                            stepData = step.Split(':');
                            if ((stepData != null) && (stepData.Length > 2))
                            {
                                newMashStep = new MashStep();
                                Settings.TryParseFloat(stepData[1], out tempValue);
                                newMashStep.StepNumber = Convert.ToInt32(stepData[0]); ;
                                newMashStep.Temperature = tempValue;
                                newMashStep.Time = Convert.ToInt32(stepData[2]);
                                PinManagement.mashSteps.Steps.Add(newMashStep);
                            }
                        }

                        PinManagement.mashSteps.CurrentStep = null;
                    }
                }

                // send back an ok response
                h.Add("OK");
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                h.Add("ERROR");
                h.Add(ex.Message);
            }

            return true;
        }
        public static bool GetSettings(RequestReceivedEventArgs e, JsonArray h)
        {
            try
            {
                Settings settings = new Settings();
                settings.loadSettings();

                JsonObject settingsValues = new JsonObject();
                settingsValues.Add("timeZoneOffset", settings.TimeZoneOffset.ToString());
                float value = settings.MinutesBetweenReadings / 60000;
                settingsValues.Add("minutesBetweenReadings", value.ToString("f2"));
                settingsValues.Add("temperatureOffset", settings.TemperatureOffset.ToString("f2"));
                settingsValues.Add("temperatureHeaterOffset", settings.TemperatureHeaterOffset.ToString("f2"));
                settingsValues.Add("historyFilename", settings.HistoryFilename);
                settingsValues.Add("ntpServerName", settings.NTPServerName);
                int tempValue = settings.MinutesBetweenNTPUpdate / 60000;
                settingsValues.Add("minutesBetweenNTPUpdate", tempValue.ToString());
                settingsValues.Add("netbiosName", settings.NetBiosName);
                settingsValues.Add("enableDHCP", settings.EnableDHCP.ToString());
                settingsValues.Add("staticIPAddress", settings.StaticIPAddress);
                settingsValues.Add("subnetMask", settings.SubnetMask);
                settingsValues.Add("defaultGateway", settings.DefaultGateway);
                settingsValues.Add("primaryDNSAddress", settings.PrimaryDNSAddress);
                settingsValues.Add("secondaryDNSAddress", settings.SecondaryDNSAddress);
                settingsValues.Add("voltageReference", settings.VoltageReference);
                settingsValues.Add("padResistance", settings.PadResistance);
                settingsValues.Add("resistanceRT", settings.ResistanceRT);
                settingsValues.Add("coefficientA", settings.CoefficientA);
                settingsValues.Add("coefficientB", settings.CoefficientB);
                settingsValues.Add("coefficientC", settings.CoefficientC);
                settingsValues.Add("coefficientD", settings.CoefficientD);
                settingsValues.Add("kpValue", settings.PIDKp);
                settingsValues.Add("kiValue", settings.PIDKi);
                settingsValues.Add("kdValue", settings.PIDKd);

                h.Add(settingsValues);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }

            return true;
        }
        /// <summary>
        /// Sends XML to client
        /// </summary>
        /// <param name="requestArguments">Could be null</param>
        /// <returns>True if 200_OK was sent, otherwise false</returns>
        public override bool SendResponse(RequestReceivedEventArgs requestArguments)
        {
            String jsonResponse = String.Empty;

            jsonResponse = _Pairs.ToString();

            byte[] bytes = Encoding.UTF8.GetBytes(jsonResponse);

            int byteCount = bytes.Length;

            try
            {
                Send200_OK("application/json", byteCount, requestArguments.Client);
                requestArguments.Client.Send(bytes, byteCount, SocketFlags.None);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return false;
            }

            return true;
        }
 /// <summary>
 /// Override this method to implement a response logic.
 /// </summary>
 /// <returns>True if Response was sent, false if not</returns>
 public abstract bool SendResponse(RequestReceivedEventArgs requestArguments);
 /// <summary>
 /// Override this, check the URL and process data if needed
 /// </summary>
 /// <returns>True if SendResponse should be sent, false if not</returns>
 public abstract bool ConditionsCheckAndDataFill(RequestReceivedEventArgs requestArguments);
        public static bool UpdateSettings(RequestReceivedEventArgs e, JsonArray h)
        {
            try
            {
                Settings settings = new Settings();
                settings.loadSettings();
                float tempValue = 0.0F;

                if (e.Request.GetArguments.Contains("minutesBetweenReadings"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["minutesBetweenReadings"].ToString(), out tempValue);
                    settings.MinutesBetweenReadings = tempValue;
                }
                if (e.Request.GetArguments.Contains("historyFilename"))
                {
                    settings.HistoryFilename = e.Request.GetArguments["historyFilename"].ToString();
                }
                if (e.Request.GetArguments.Contains("ntpServerName"))
                {
                    settings.NTPServerName = e.Request.GetArguments["ntpServerName"].ToString();
                }
                if (e.Request.GetArguments.Contains("minutesBetweenNTPUpdate"))
                {
                    settings.MinutesBetweenNTPUpdate = Convert.ToInt32(e.Request.GetArguments["minutesBetweenNTPUpdate"].ToString());
                }
                if (e.Request.GetArguments.Contains("timeZoneOffset"))
                {
                    settings.TimeZoneOffset = Convert.ToInt32(e.Request.GetArguments["timeZoneOffset"].ToString());
                }
                if (e.Request.GetArguments.Contains("netbiosName"))
                {
                    settings.NetBiosName = e.Request.GetArguments["netbiosName"].ToString();
                }
                if (e.Request.GetArguments.Contains("temperatureOffset"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["temperatureOffset"].ToString(), out tempValue);
                    settings.TemperatureOffset = tempValue;
                }
                if (e.Request.GetArguments.Contains("temperatureHeaterOffset"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["temperatureHeaterOffset"].ToString(), out tempValue);
                    settings.TemperatureHeaterOffset = tempValue;
                }
                if (e.Request.GetArguments.Contains("enableDHCP"))
                {
                    if (e.Request.GetArguments["enableDHCP"].ToString().ToLower().Equals("on"))
                    {
                        settings.EnableDHCP = true;
                    }
                    else
                    {
                        settings.EnableDHCP = false;
                    }
                }
                if (e.Request.GetArguments.Contains("staticIPAddress"))
                {
                    settings.StaticIPAddress = e.Request.GetArguments["staticIPAddress"].ToString();
                }
                if (e.Request.GetArguments.Contains("subnetMask"))
                {
                    settings.SubnetMask = e.Request.GetArguments["subnetMask"].ToString();
                }
                if (e.Request.GetArguments.Contains("defaultGateway"))
                {
                    settings.DefaultGateway = e.Request.GetArguments["defaultGateway"].ToString();
                }
                if (e.Request.GetArguments.Contains("primaryDNSAddress"))
                {
                    settings.PrimaryDNSAddress = e.Request.GetArguments["primaryDNSAddress"].ToString();
                }
                if (e.Request.GetArguments.Contains("secondaryDNSAddress"))
                {
                    settings.SecondaryDNSAddress = e.Request.GetArguments["secondaryDNSAddress"].ToString();
                }
                if (e.Request.GetArguments.Contains("voltageReference"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["voltageReference"].ToString(), out tempValue);
                    settings.VoltageReference = tempValue;
                }
                if (e.Request.GetArguments.Contains("padResistance"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["padResistance"].ToString(), out tempValue);
                    settings.PadResistance = tempValue;
                }
                if (e.Request.GetArguments.Contains("resistanceRT"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["resistanceRT"].ToString(), out tempValue);
                    settings.ResistanceRT = tempValue;
                }
                if (e.Request.GetArguments.Contains("coefficientA"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["coefficientA"].ToString(), out tempValue);
                    settings.CoefficientA = tempValue;
                }
                if (e.Request.GetArguments.Contains("coefficientB"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["coefficientB"].ToString(), out tempValue);
                    settings.CoefficientB = tempValue;
                }
                if (e.Request.GetArguments.Contains("coefficientC"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["coefficientC"].ToString(), out tempValue);
                    settings.CoefficientC = tempValue;
                }
                if (e.Request.GetArguments.Contains("coefficientD"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["coefficientD"].ToString(), out tempValue);
                    settings.CoefficientD = tempValue;
                }
                if (e.Request.GetArguments.Contains("kpValue"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["kpValue"].ToString(), out tempValue);
                    settings.PIDKp = tempValue;
                }
                if (e.Request.GetArguments.Contains("kiValue"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["kiValue"].ToString(), out tempValue);
                    settings.PIDKi = tempValue;
                }
                if (e.Request.GetArguments.Contains("kdValue"))
                {
                    Settings.TryParseFloat(e.Request.GetArguments["kdValue"].ToString(), out tempValue);
                    settings.PIDKd = tempValue;
                }

                // save the new device settings
                settings.saveSettings();
                // send back an ok response
                h.Add("OK");
                // spool up a thread that will sleep for 10 seconds and then reboot the Netduino
                var rebootThread = new Thread(new ThreadStart(delegate()
                {
                    Thread.Sleep(10000);
                    PowerState.RebootDevice(false, 30000);
                }));
                rebootThread.Start();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                h.Add("ERROR");
                h.Add(ex.Message);
            }

            return true;
        }
        public override bool SendResponse(RequestReceivedEventArgs RequestArguments)
        {
            string url = String.Empty;

            string[] urlParts = RequestArguments.Request.URL.Split('/');
            bool addBackSlash = false;

            foreach (string part in urlParts)
            {
                if (addBackSlash)
                {
                    url = url + @"\" + part;
                }
                else
                {
                    url = part;
                    addBackSlash = true;
                }
            }

            string filePath = Settings.ROOT_PATH + url;

            //File found check
            try
            {
                if (!File.Exists(filePath))
                {
                    Send404_NotFound(RequestArguments.Client);
                    return false;
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return false;
            }

            string mType = MimeType(filePath);

            //File sending
            using (FileStream inputStream = new FileStream(filePath, FileMode.Open))
            {
                Send200_OK(mType, (int)inputStream.Length, RequestArguments.Client);

                byte[] readBuffer = new byte[Settings.FILE_BUFFERSIZE];
                int sentBytes = 0;

                //Sending parts in size of "Settings.FILE_BUFFERSIZE"
                while (sentBytes < inputStream.Length)
                {
                    int bytesRead = inputStream.Read(readBuffer, 0, readBuffer.Length);
                    try
                    {
                        sentBytes += RequestArguments.Client.Send(readBuffer, bytesRead, SocketFlags.None);
                    }
                    catch (Exception ex) //ToDo: Error code if client closes browser during file transport
                    {
                        System.Diagnostics.Debug.WriteLine(ex.Message);
                    }
                }
            }

            return true;
        }
 public override bool ConditionsCheckAndDataFill(RequestReceivedEventArgs RequestArguments)
 {
     return true;
 }