Files
PlantBox/PlantBox.Broker/ServerManager.cs
2019-04-24 23:14:10 +02:00

84 lines
3.0 KiB
C#

using PlantBox.Shared.Communication;
using PlantBox.Shared.Communication.Commands;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace PlantBox.Broker
{
class ServerManager : TcpManager
{
public ServerManager(Broker broker) : base(broker)
{
}
protected override string LogPrefix => "Server";
protected override int ListeningPort => Connection.TCP_SERVER_PORT;
protected override void InfoCommand(CommandStream commandStream, CommandPacket packet)
{
InfoResponse infoResponse = new InfoResponse().Deserialize(packet.Arguments);
ulong id = packet.ID;
PlantBox plantBox = Broker.PlantBoxesManager[id];
if (plantBox == null)
{
plantBox = new PlantBox
{
HistoricManager = new HistoricManager()
};
}
plantBox.ID = id;
plantBox.Name = infoResponse.Name;
plantBox.Type = infoResponse.Type;
plantBox.State = infoResponse.State;
plantBox.Humidity = new CaptorValue(infoResponse.HumidityMin, infoResponse.HumidityMax, plantBox.Humidity?.Value ?? 0);
plantBox.Luminosity = new CaptorValue(infoResponse.LuminosityMin, infoResponse.LuminosityMax, plantBox.Luminosity?.Value ?? 0);
plantBox.Temperature = new CaptorValue(infoResponse.TemperatureMin, infoResponse.TemperatureMax, plantBox.Temperature?.Value ?? 0);
plantBox.UpdateState();
Broker.PlantBoxesManager.Add(plantBox);
}
protected override void CaptorsCommand(CommandStream commandStream, CommandPacket packet)
{
CaptorsResponse captorsResponse = new CaptorsResponse().Deserialize(packet.Arguments);
ulong id = packet.ID;
PlantBox plantBox = Broker.PlantBoxesManager[id];
if (plantBox == null)
{
Log($"Received captors info from non-registered PlantBox ({id}), ignoring it");
return;
}
plantBox.LastMeasureDate = DateTime.Now;
plantBox.Humidity.Value = captorsResponse.Humidity;
plantBox.Luminosity.Value = captorsResponse.Luminosity;
plantBox.Temperature.Value = captorsResponse.Temperature;
plantBox.TankLevel = captorsResponse.Tank;
plantBox.UpdateState();
plantBox.HistoricManager.Add(new CaptorsValue(plantBox.Humidity.Value, plantBox.Luminosity.Value, plantBox.Temperature.Value));
}
protected override void HistoricCommand(CommandStream commandStream, CommandPacket packet)
{
throw new NotImplementedException();
}
protected override void PingCommand(CommandStream commandStream, CommandPacket packet)
{
var ping = new PingCommand().Deserialize(packet.Arguments);
commandStream.Send(ping.ToCommandPacket(packet.ID));
}
}
}