forked from CPL/Simulator
Добавлен сервер для отправки телеметрии
This commit is contained in:
126
DroneClient/Models/MonitorContainer.cs
Normal file
126
DroneClient/Models/MonitorContainer.cs
Normal file
@ -0,0 +1,126 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TelemetryIO;
|
||||
|
||||
namespace DroneClient.Models
|
||||
{
|
||||
public class monitorItem
|
||||
{
|
||||
public int slotNo = 0;
|
||||
public int offset = 0;
|
||||
public int len = 0;
|
||||
public int id = 0;
|
||||
|
||||
public monitorItem()
|
||||
{
|
||||
|
||||
}
|
||||
public monitorItem(int slotNo, int offset, int len, int id)
|
||||
{
|
||||
this.slotNo = slotNo;
|
||||
this.offset = offset;
|
||||
this.len = len;
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
public class MonitorContainer
|
||||
{
|
||||
public const int monitorMaxFill = 32;
|
||||
public int monitorFillLevel = 0;
|
||||
public monitorItem[] monitorItems = new monitorItem[monitorMaxFill];
|
||||
public int isMonitor = 0;
|
||||
private static volatile MonitorContainer instance;
|
||||
private static readonly object _lock = new object();
|
||||
|
||||
public static MonitorContainer Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
instance = new MonitorContainer();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private MonitorContainer()
|
||||
{
|
||||
for (int i = 0; i < monitorMaxFill; i++)
|
||||
{
|
||||
monitorItems[i] = new monitorItem();
|
||||
}
|
||||
}
|
||||
|
||||
public void resetMonitorContainer()
|
||||
{
|
||||
for (int i = 0; i < monitorMaxFill; i++)
|
||||
{
|
||||
monitorItems[i] = new monitorItem();
|
||||
}
|
||||
}
|
||||
|
||||
public int monitorPut(int slot, int offset, int len)
|
||||
{
|
||||
int ret_id = 0;
|
||||
if (monitorFillLevel < monitorMaxFill)
|
||||
{
|
||||
monitorItems[monitorFillLevel].slotNo = slot;
|
||||
monitorItems[monitorFillLevel].offset = offset;
|
||||
monitorItems[monitorFillLevel].len = len;
|
||||
monitorItems[monitorFillLevel].id = (slot << 8) + offset;
|
||||
ret_id = monitorItems[monitorFillLevel].id;
|
||||
monitorFillLevel++;
|
||||
isMonitor = 1;
|
||||
}
|
||||
|
||||
return ret_id;
|
||||
}
|
||||
|
||||
public int monitorRemove(int id)
|
||||
{
|
||||
int match = 0;
|
||||
int ret_id = 0;
|
||||
for (int i = 0; i < monitorMaxFill; i++)
|
||||
{
|
||||
if (monitorItems[i].id == id)
|
||||
{
|
||||
match = 1;
|
||||
if (monitorFillLevel > 0) monitorFillLevel--;
|
||||
ret_id = id;
|
||||
}
|
||||
|
||||
if (match > 0)
|
||||
{
|
||||
if (monitorItems[i].len == 0) return ret_id;
|
||||
if (i < 31)
|
||||
{
|
||||
monitorItems[i].id = monitorItems[i + 1].id;
|
||||
monitorItems[i].offset = monitorItems[i + 1].offset;
|
||||
monitorItems[i].slotNo = monitorItems[i + 1].slotNo;
|
||||
monitorItems[i].len = monitorItems[i + 1].len;
|
||||
}
|
||||
else
|
||||
{
|
||||
monitorItems[i].id = 0;
|
||||
monitorItems[i].offset = 0;
|
||||
monitorItems[i].slotNo = 0;
|
||||
monitorItems[i].len = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret_id;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user