Ejemplo n.º 1
0
        public void WriteAndCheckMeasurements(string measurement, List <MeasurementData> data)
        {
            if (data.Count <= 0)
            {
                return;
            }
            DateTime date   = DateTime.Now;
            string   folder = "data\\" + date.ToShortDateString();

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }
            Stream file;

            if (!File.Exists(folder + "\\" + measurement + ".bl"))
            {
                WriteMeasurements(measurement, data);
                return;
            }
            string fname, fnametmp;

            file = File.OpenRead(fname = folder + "\\" + measurement + ".bl");
            Stream          fileTmp = File.Create(fnametmp = folder + "\\" + measurement + ".tmp");
            BinaryReader    reader  = new BinaryReader(file);
            BinaryWriter    writer  = new BinaryWriter(fileTmp);
            long            count   = (file.Length / (sizeof(long) + sizeof(double)));
            MeasurementData tmp;
            int             j;
            bool            write = true;

            for (long i = 0; i < count; i++)
            {
                write = true;
                tmp   = new MeasurementData(reader);
                for (j = 0; j < data.Count; j++)
                {
                    if (data[j].CreationTime == tmp.CreationTime)
                    {
                        write = false;
                        break;
                    }
                }
                if (write)
                {
                    tmp.Write(writer);
                }
            }
            for (j = 0; j < data.Count; j++)
            {
                data[j].Write(writer);
            }
            file.Close();
            fileTmp.Close();
            File.Delete(fname);
            File.Move(fnametmp, fname);
        }
Ejemplo n.º 2
0
        public void DataRead(BinaryReader reader)
        {
            byte cmd = 0;

            if (reader.BaseStream as MemoryStream != null)
            {
                if (((MemoryStream)reader.BaseStream).Length == 0)
                {
                    return;
                }
                if (((MemoryStream)reader.BaseStream).Position >= ((MemoryStream)reader.BaseStream).Length - 1)
                {
                    return;
                }
            }
            cmd = reader.ReadByte();

            if (cmd != this.cmd)
            {
                reader.BaseStream.Seek(-1, SeekOrigin.Current);
                return;
            }
            double          value = (double)reader.ReadInt16();
            MeasurementData val   = new MeasurementData(value);

            History.Add(val);

            if (History.Count > MaxSeriesPointsCount * 2)
            {
                History.RemoveRange(0, MaxSeriesPointsCount);
                server.Logger.WriteAndCheckMeasurements(Key, History);
            }
            if (OnDataReceived != null)
            {
                OnDataReceived(val);
            }


            if (AddPoint != null)
            {
                //Debug.Print("AddPoint {0} {1}", Name, Last);
                AddPoint(Last, Name);
                seriesPointsCount++;
                if (seriesPointsCount > MaxSeriesPointsCount && RemovePoint != null)
                {
                    int d = seriesPointsCount - MaxSeriesPointsCount;
                    for (int i = 0; i < d; i++)
                    {
                        //Debug.Print("RemovePoint {0} {1}", Name, i);
                        RemovePoint(0, Name);
                    }
                    seriesPointsCount -= d;
                }
            }
        }
Ejemplo n.º 3
0
        public void WriteMeasurement(string measurement, MeasurementData data)
        {
            DateTime date = DateTime.Now;

            if (!Directory.Exists("data\\" + date.ToShortDateString()))
            {
                Directory.CreateDirectory("data\\" + date.ToShortDateString());
            }
            Stream file;

            if (!File.Exists("data\\" + date.ToShortDateString() + "\\" + measurement + ".bl"))
            {
                file = File.Create("data\\" + date.ToShortDateString() + "\\" + measurement + ".bl");
            }
            else
            {
                file = File.Open("data\\" + date.ToShortDateString() + "\\" + measurement + ".bl", FileMode.Append);
            }
            BinaryWriter writer = new BinaryWriter(file);

            data.Write(writer);
            file.Close();
        }
Ejemplo n.º 4
0
        protected virtual void ClientStreamRead()
        {
            string header = readerS.ReadLine();
            string tmp;

            string[] tmp2;
            string[] tmp3;
            if (header.ToUpper() == "ANDROID APP V0")
            {
                tmp = readerS.ReadLine().ToLower();
                if (!tmp.StartsWith("commands-count:"))
                {
                    writerS.Write("Protocol error. Need commands-count header first");
                    writerS.Flush();
                    return;
                }
                tmp2 = tmp.Split(':');
                int cmdCount;
                if (!Int32.TryParse(tmp2[1].Trim(), out cmdCount))
                {
                    writerS.Write("Failed to get command count: Int32 parsing error\nArgument string:" + tmp + "\nError in [" + tmp2[1] + "]");
                    writerS.Flush();
                    return;
                }
                StringBuilder response = new StringBuilder();
                for (int i = 0; i < cmdCount; i++)
                {
                    tmp  = readerS.ReadLine().ToLower();
                    tmp2 = tmp.Split(':');
                    switch (tmp2[0])
                    {
                    case "get-last":
                        #region GET LAST
                        //temp/temperature/t|hum/humidity/h|illum/illumination/i|all
                        response.Append("ger-last: ");
                        tmp3 = tmp2[1].Split(',');
                        bool   temperature  = false;
                        bool   humidity     = false;
                        bool   illumination = false;
                        string temp;
                        foreach (string str in tmp3)
                        {
                            temp = str.Trim().ToLower();
                            if (temp == "t" || temp == "temp" || temp == "temperature")
                            {
                                temperature = true;
                            }
                            else if (temp == "i" || temp == "illum" || temp == "illumination")
                            {
                                illumination = true;
                            }
                            else if (temp == "h" || temp == "humidity" || temp == "hum")
                            {
                                humidity = true;
                            }
                            else if (temp == "all")
                            {
                                temperature  = true;
                                humidity     = true;
                                illumination = true;
                                break;
                            }
                        }
                        if (temperature)
                        {
                            MeasurementData lt = server.measurements["temperature"].Last;
                            if (lt != null)
                            {
                                response.Append("temperature=" + lt.ToString() + ",");
                            }
                        }
                        if (humidity)
                        {
                            MeasurementData lt = server.measurements["humidity"].Last;
                            if (lt != null)
                            {
                                response.Append("humidity=" + lt.ToString() + ",");
                            }
                        }
                        if (illumination)
                        {
                            MeasurementData lt = server.measurements["illumination"].Last;
                            if (lt != null)
                            {
                                response.Append("illumination=" + lt.ToString() + ",");
                            }
                        }
                        response.Append("\n");
                        #endregion
                        break;

                    case "refresh":
                        #region REFRESH
                        response.Append("refresh: complete\n");
                        tmp3         = tmp2[1].Split(',');
                        temperature  = false;
                        humidity     = false;
                        illumination = false;
                        foreach (string str in tmp3)
                        {
                            temp = str.Trim().ToLower();
                            if (temp == "t" || temp == "temp" || temp == "temperature")
                            {
                                temperature = true;
                            }
                            else if (temp == "i" || temp == "illum" || temp == "illumination")
                            {
                                illumination = true;
                            }
                            else if (temp == "h" || temp == "humidity" || temp == "hum")
                            {
                                humidity = true;
                            }
                            else if (temp == "all")
                            {
                                temperature  = true;
                                humidity     = true;
                                illumination = true;
                                break;
                            }
                        }
                        if (temperature)
                        {
                            server.measurements["temperature"].Refresh();
                        }
                        if (humidity)
                        {
                            server.measurements["humidity"].Refresh();
                        }
                        if (illumination)
                        {
                            server.measurements["illumination"].Refresh();
                        }
                        #endregion
                        break;

                    case "get-list":
                        #region GET LIST
                        response.Append("get-list: ");
                        tmp3         = tmp2[1].Split(',');
                        temperature  = false;
                        humidity     = false;
                        illumination = false;
                        int count  = 10;
                        int rcount = count;
                        if (!Int32.TryParse(tmp3[0], out count))
                        {
                            response.Append("get-list-error: Failed to parse Int32\nArgument: '" + tmp3[0] + "'");
                        }
                        for (int j = 1; j < tmp3.Length; j++)
                        {
                            temp = tmp3[j].Trim().ToLower();
                            if (temp == "t" || temp == "temp" || temp == "temperature")
                            {
                                temperature = true;
                            }
                            else if (temp == "i" || temp == "illum" || temp == "illumination")
                            {
                                illumination = true;
                            }
                            else if (temp == "h" || temp == "humidity" || temp == "hum")
                            {
                                humidity = true;
                            }
                            else if (temp == "all")
                            {
                                temperature  = true;
                                humidity     = true;
                                illumination = true;
                                break;
                            }
                        }
                        if (temperature)
                        {
                            List <MeasurementData> hist = server.measurements["temperature"].History;
                            rcount = count;
                            if (hist.Count < count)
                            {
                                rcount = hist.Count;
                            }
                            response.Append("temperature{");
                            for (int j = hist.Count - 1; j >= hist.Count - rcount; j--)
                            {
                                response.Append(hist[j].ToString() + ";");
                            }
                            response.Append("},");
                        }
                        if (humidity)
                        {
                            List <MeasurementData> hist = server.measurements["humidity"].History;
                            rcount = count;
                            if (hist.Count < count)
                            {
                                rcount = hist.Count;
                            }
                            response.Append("humidity{");
                            for (int j = hist.Count - 1; j >= hist.Count - rcount; j--)
                            {
                                response.Append(hist[j].ToString() + ";");
                            }
                            response.Append("},");
                        }
                        if (illumination)
                        {
                            List <MeasurementData> hist = server.measurements["illumination"].History;
                            rcount = count;
                            if (hist.Count < count)
                            {
                                rcount = hist.Count;
                            }
                            response.Append("illumination{");
                            for (int j = hist.Count - 1; j >= hist.Count - rcount; j--)
                            {
                                response.Append(hist[j].ToString() + ";");
                            }
                            response.Append("},");
                        }
                        response.Append("\n");
                        #endregion
                        break;

                    case "set-timer":
                        #region SET TIMER
                        response.Append("set-timer: complete\n");
                        tmp3         = tmp2[1].Split(',');
                        temperature  = false;
                        humidity     = false;
                        illumination = false;

                        temp = tmp3[0].Trim().ToLower();
                        int interval = 10;
                        if (!Int32.TryParse(tmp3[1], out interval))
                        {
                            response.Append("set-timer-error: Failed to parse Int32\nArgument: '" + tmp3[1] + "'");
                        }
                        if (temp == "t" || temp == "temp" || temp == "temperature")
                        {
                            temp = "temperature";
                        }
                        else if (temp == "i" || temp == "illum" || temp == "illumination")
                        {
                            temp = "illumination";
                        }
                        else if (temp == "h" || temp == "humidity" || temp == "hum")
                        {
                            temp = "humidity";
                        }
                        else if (temp == "all")
                        {
                            if (interval == 0)
                            {
                                server.measurements["temperature"].StopMeasurementTimer();
                                server.measurements["humidity"].StopMeasurementTimer();
                                server.measurements["illumination"].StopMeasurementTimer();
                            }
                            else
                            {
                                server.measurements["temperature"].StartMeasurementTimer();
                                server.measurements["temperature"].SetMeasurementInterval(interval);
                                server.measurements["illumination"].StartMeasurementTimer();
                                server.measurements["illumination"].SetMeasurementInterval(interval);
                                server.measurements["humidity"].StartMeasurementTimer();
                                server.measurements["humidity"].SetMeasurementInterval(interval);
                            }
                            break;
                        }
                        if (interval == 0)
                        {
                            server.measurements[temp].StopMeasurementTimer();
                        }
                        else
                        {
                            server.measurements[temp].StartMeasurementTimer();
                            server.measurements[temp].SetMeasurementInterval(interval);
                        }

                        #endregion
                        break;

                    default:
                        response.Append("Unknown header: '" + tmp2[0] + "'\n");
                        break;
                    }
                }
                writerS.Write(response.ToString());
                writerS.Flush();
            }
            else
            {
                writerS.Write("Unexpected header. Please, wait for new version");
                writerS.Flush();
            }
        }