public void TestAddAndRetrieveAccelerationBlob() { Acceleration[] accArray = new Acceleration[1]; long dateTime1 = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); SensorLocationEnum loc1 = SensorLocationEnum.AZ_MOTOR; Acceleration acc = new Acceleration(); acc = Acceleration.Generate(dateTime1, 1.1, 2.2, 3.3, loc1); accArray[0] = acc; AccelerationBlob accBLob = new AccelerationBlob(); accBLob.BuildAccelerationString(accArray, dateTime1, true); //DatabaseOperations.AddAccelerationBlobData(acc, dateTime1, true); List <AccelerationBlob> accReturn = DatabaseOperations.GetAccBlobData(dateTime1 - 1, dateTime1 + 1); Assert.AreEqual(1, accReturn.Count); //Test only acc Assert.AreEqual("4.11582312545134~1.1~2.2~3.3~0-", accReturn[0].Blob); Assert.AreEqual(dateTime1, accReturn[0].TimeCaptured); }
/// <summary> /// Constructor used to set the values needed to initialize the components of the class. It will not start waiting for data until /// StartSensorMonitoringRoutine() is called. /// /// The reason the client IP address is a string and not an IPAddress is because none of the TCPClient class's /// constructors take an IPAddress. :( /// </summary> /// <param name="serverIPAddress">This is the IP address the SensorNetworkServer is "listening" to.</param> /// <param name="serverPort">This is the port the SensorNetworkServer is "listening" to.</param> /// <param name="clientIPAddress">This is the IP address of the SensorNetwork that we will be sending the sensor initialization to.</param> /// <param name="clientPort">This is the port of the SensorNetwork that we will be sending the sensor initialization to.</param> /// <param name="telescopeId">The Radio Telescope that the SensorNetworkConfig will apply to.</param> /// <param name="isSimulation">Tells the SensorNetworkServer if it should initialize the SimulationSensorNetwork, /// or if it is connecting to the production hardware (or maybe an outside simulation).</param> public SensorNetworkServer(IPAddress serverIPAddress, int serverPort, string clientIPAddress, int clientPort, int telescopeId, bool isSimulation) { // Initialize main parts of the Sensor Network Server = new TcpListener(serverIPAddress, serverPort); InitializationClient = new SensorNetworkClient(clientIPAddress, clientPort, telescopeId); // Sensor data initialization CurrentElevationMotorTemp = new Temperature[1]; CurrentElevationMotorTemp[0] = new Temperature(); CurrentAzimuthMotorTemp = new Temperature[1]; CurrentAzimuthMotorTemp[0] = new Temperature(); CurrentAbsoluteOrientation = new Orientation(); CurrentElevationMotorAccl = new Acceleration[1]; CurrentElevationMotorAccl[0] = new Acceleration(); CurrentAzimuthMotorAccl = new Acceleration[1]; CurrentAzimuthMotorAccl[0] = new Acceleration(); CurrentCounterbalanceAccl = new Acceleration[1]; CurrentCounterbalanceAccl[0] = new Acceleration(); AbsoluteOrientationOffset = new Orientation(); // Sensor error initialization SensorStatuses = new SensorStatuses(); SensorStatuses.AzimuthAbsoluteEncoderStatus = SensorNetworkSensorStatus.Okay; SensorStatuses.ElevationAbsoluteEncoderStatus = SensorNetworkSensorStatus.Okay; SensorStatuses.AzimuthTemperature1Status = SensorNetworkSensorStatus.Okay; SensorStatuses.AzimuthTemperature2Status = SensorNetworkSensorStatus.Okay; SensorStatuses.ElevationTemperature1Status = SensorNetworkSensorStatus.Okay; SensorStatuses.ElevationTemperature2Status = SensorNetworkSensorStatus.Okay; SensorStatuses.AzimuthAccelerometerStatus = SensorNetworkSensorStatus.Okay; SensorStatuses.ElevationAccelerometerStatus = SensorNetworkSensorStatus.Okay; SensorStatuses.CounterbalanceAccelerometerStatus = SensorNetworkSensorStatus.Okay; // Initialize threads and additional processes, if applicable SensorMonitoringThread = new Thread(() => { SensorMonitoringRoutine(); }); SensorMonitoringThread.Name = "SensorMonitorThread"; // We only want to run the internal simulation if the user selected to run the Simulated Sensor Network if (isSimulation) { SimulationSensorNetwork = new SimulationSensorNetwork(serverIPAddress.ToString(), serverPort, IPAddress.Parse(clientIPAddress), clientPort); } else { SimulationSensorNetwork = null; } // Initialize the timeout timer but don't start it yet Timeout = new System.Timers.Timer(); Timeout.Elapsed += TimedOut; // TimedOut is the function at the bottom that executes when this elapses Timeout.AutoReset = false; AccBlob = new AccelerationBlob(); }
public void TestAddAndRetrieveAccelerationBlob() { long dateTime1 = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); AccelerationBlob acc = new AccelerationBlob(); acc.Blob = "abcdefghijklmnopqrstuvwxyz"; DatabaseOperations.AddAccelerationBlobData(acc, dateTime1, true); List <AccelerationBlob> accReturn = DatabaseOperations.GetAccBlobData(dateTime1 - 1, dateTime1 + 1); Assert.AreEqual(1, accReturn.Count); //Test only acc Assert.AreEqual(acc.Blob, accReturn[0].Blob); Assert.AreEqual(acc.TimeCaptured, accReturn[0].TimeCaptured); }
public void TestGettersAndSetters() { // Initialize appointment entity SensorLocationEnum loc1 = SensorLocationEnum.AZ_MOTOR; //Generate current time long dateTime1 = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); long dateTime2 = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); //Generate Acceleration AccelerationBlob a1 = new AccelerationBlob(); //Acceleration t2 = Acceleration.Generate(dateTime, 2.0, loc1); a1.Blob = "abc"; a1.Id = 17; a1.TimeCaptured = dateTime1; a1.TimeCaptured = dateTime2; Assert.AreEqual(a1.TimeCaptured, dateTime2); Assert.AreEqual(a1.Blob, "abc"); Assert.AreEqual(a1.Id, 17); }
/// <summary> /// add an string of sensor data to the apropriat table /// </summary> /// <param name="acc"></param> public static void AddAccelerationBlobData(AccelerationBlob acc, long dateTime1, bool testflag = false) { Thread t = new Thread(() => { acc.TimeCaptured = dateTime1; if (!USING_REMOTE_DATABASE) { using (RTDbContext Context = InitializeDatabaseContext()) { Context.AccelerationBlobs.Add(acc); //foreach(Temperature tump in temp) {} SaveContext(Context); } } }); t.Start(); if (testflag) { t.Join(); } }
/// <summary> /// add an Blob of acceleration data to the apropriate table /// </summary> /// <param name="acc"></param> /// <param name="location"></param> /// <param name="testflag"></param> public static void AddAccelerationBlobData(AccelerationBlob acc, SensorLocationEnum location, bool testflag = false) { Thread t = new Thread(() => { if (!USING_REMOTE_DATABASE) { using (RTDbContext Context = InitializeDatabaseContext()) { //based on the specified location enum, add the blob to the corret table switch (location) { case SensorLocationEnum.AZ_MOTOR: Context.AzimuthAccelerationBlobs.Add((AzimuthAccelerationBlob)acc); break; case SensorLocationEnum.COUNTERBALANCE: Context.CounterbalanceAccelerationBlobs.Add((CounterbalanceAccelerationBlob)acc); break; case SensorLocationEnum.EL_MOTOR: Context.ElevationAccelerationBlobs.Add((ElevationAccelerationBlob)acc); break; } SaveContext(Context); } } }); t.Start(); if (testflag) { t.Join(); } }