78 lines
3.5 KiB
C#
78 lines
3.5 KiB
C#
using Palace;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Numerics;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Pal.Client.Net
|
|
{
|
|
internal partial class RemoteApi
|
|
{
|
|
public async Task<(bool, List<Marker>)> DownloadRemoteMarkers(ushort territoryId, CancellationToken cancellationToken = default)
|
|
{
|
|
if (!await Connect(cancellationToken))
|
|
return (false, new());
|
|
|
|
var palaceClient = new PalaceService.PalaceServiceClient(_channel);
|
|
var downloadReply = await palaceClient.DownloadFloorsAsync(new DownloadFloorsRequest { TerritoryType = territoryId }, headers: AuthorizedHeaders(), cancellationToken: cancellationToken);
|
|
return (downloadReply.Success, downloadReply.Objects.Select(CreateMarkerFromNetworkObject).ToList());
|
|
}
|
|
|
|
public async Task<(bool, List<Marker>)> UploadMarker(ushort territoryType, IList<Marker> markers, CancellationToken cancellationToken = default)
|
|
{
|
|
if (markers.Count == 0)
|
|
return (true, new());
|
|
|
|
if (!await Connect(cancellationToken))
|
|
return (false, new());
|
|
|
|
var palaceClient = new PalaceService.PalaceServiceClient(_channel);
|
|
var uploadRequest = new UploadFloorsRequest
|
|
{
|
|
TerritoryType = territoryType,
|
|
};
|
|
uploadRequest.Objects.AddRange(markers.Select(m => new PalaceObject
|
|
{
|
|
Type = (ObjectType)m.Type,
|
|
X = m.Position.X,
|
|
Y = m.Position.Y,
|
|
Z = m.Position.Z
|
|
}));
|
|
var uploadReply = await palaceClient.UploadFloorsAsync(uploadRequest, headers: AuthorizedHeaders(), cancellationToken: cancellationToken);
|
|
return (uploadReply.Success, uploadReply.Objects.Select(CreateMarkerFromNetworkObject).ToList());
|
|
}
|
|
|
|
public async Task<bool> MarkAsSeen(ushort territoryType, IList<Marker> markers, CancellationToken cancellationToken = default)
|
|
{
|
|
if (markers.Count == 0)
|
|
return true;
|
|
|
|
if (!await Connect(cancellationToken))
|
|
return false;
|
|
|
|
var palaceClient = new PalaceService.PalaceServiceClient(_channel);
|
|
var seenRequest = new MarkObjectsSeenRequest { TerritoryType = territoryType };
|
|
foreach (var marker in markers)
|
|
seenRequest.NetworkIds.Add(marker.NetworkId.ToString());
|
|
|
|
var seenReply = await palaceClient.MarkObjectsSeenAsync(seenRequest, headers: AuthorizedHeaders(), deadline: DateTime.UtcNow.AddSeconds(10), cancellationToken: cancellationToken);
|
|
return seenReply.Success;
|
|
}
|
|
|
|
private Marker CreateMarkerFromNetworkObject(PalaceObject obj) =>
|
|
new Marker((Marker.EType)obj.Type, new Vector3(obj.X, obj.Y, obj.Z), Guid.Parse(obj.NetworkId));
|
|
|
|
public async Task<(bool, List<FloorStatistics>)> FetchStatistics(CancellationToken cancellationToken = default)
|
|
{
|
|
if (!await Connect(cancellationToken))
|
|
return new(false, new List<FloorStatistics>());
|
|
|
|
var palaceClient = new PalaceService.PalaceServiceClient(_channel);
|
|
var statisticsReply = await palaceClient.FetchStatisticsAsync(new StatisticsRequest(), headers: AuthorizedHeaders(), deadline: DateTime.UtcNow.AddSeconds(30), cancellationToken: cancellationToken);
|
|
return (statisticsReply.Success, statisticsReply.FloorStatistics.ToList());
|
|
}
|
|
}
|
|
}
|