84 lines
3.0 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|