diff --git a/Server/SaveData.cs b/Server/SaveData.cs index 15fd0d4..bcabb1f 100644 --- a/Server/SaveData.cs +++ b/Server/SaveData.cs @@ -2,12 +2,16 @@ using System.Collections.Generic; using System.IO; using System.Text; +using System.Threading; namespace Server { class SaveData { private string path; + private const string jsonFilename = "/json.txt"; + private const string rawBikeFilename = "/rawBike.bin"; + private const string rawBPMFilename = "/rawBPM.bin"; public SaveData(string path) { this.path = path; @@ -23,7 +27,7 @@ namespace Server public void WriteDataJSON(string data) { - using (StreamWriter sw = File.AppendText(this.path + "/json" + ".txt")) + using (StreamWriter sw = File.AppendText(this.path + jsonFilename)) { sw.WriteLine(data); } @@ -35,7 +39,7 @@ namespace Server { throw new ArgumentException("data should have length of 2"); } - WriteRawData(data, this.path + "/rawBPM" + ".bin"); + WriteRawData(data, this.path + rawBPMFilename); } public void WriteDataRAWBike(byte[] data) @@ -44,7 +48,7 @@ namespace Server { throw new ArgumentException("data should have length of 8"); } - WriteRawData(data, this.path + "/rawBike" + ".bin"); + WriteRawData(data, this.path + rawBikeFilename); } private void WriteRawData(byte[] data, string fileLocation) @@ -67,6 +71,56 @@ namespace Server } } + /// + /// gets BPM graph data out of file. + /// if you want 100 datapoints but here are onlny 50, de last 50 datapoint will be 0 + /// if you want 100 datapoints where it takes the average of 2, the last 75 will be 0 + /// if the file isn't created yet it will retun null + /// + /// the amount of data points for the output + /// the amount of data points form the file for one data point in the output + /// byte array with data points from file + public byte[] getBPMgraphData(int outputSize, int averageOver) + { + if (File.Exists(this.path + rawBPMFilename)) + { + FileInfo fi = new FileInfo(this.path + rawBPMFilename); + int length = (int)fi.Length; + + byte[] output = new byte[outputSize]; + + int messageSize = 2; + int readSize = messageSize * averageOver; + byte[] readBuffer = new byte[readSize]; + + using (FileStream fileStream = new FileStream(this.path + rawBPMFilename, FileMode.Open, FileAccess.Read)) + { + for (int i = 1; i >= outputSize; i++) + { + if (length - (i * readSize) < 0) + { + break; + } + fileStream.Read(readBuffer, length - (i * readSize), readSize); + + //handling data + int total = 0; + for (int j = 0; j < averageOver; j++) + { + total += readBuffer[j * messageSize + 1]; + } + output[i - 1] = (byte)(total / averageOver); + } + } + + return output; + } + else + { + return null; + } + } + } }