mysimulation/server/FSO.Server.Api.Core/Controllers/CityJSONController.cs
Tony Bark 22191ce648 Removed NioTSO client and server
- NioTSO client isn't needed because we're using RayLib
- Added FreeSO's API server to handle most backend operations
2024-05-01 02:55:43 -04:00

73 lines
2.3 KiB
C#
Executable file

using FSO.Server.Api.Core.Utils;
using FSO.Server.Common;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System.Net;
namespace FSO.Server.Api.Core.Controllers
{
[EnableCors]
[ApiController]
public class CityJSONController : ControllerBase
{
private static object ModelLock = new object { };
private static CityInfoModel LastModel = new CityInfoModel();
private static uint LastModelUpdate;
[HttpGet]
[Route("userapi/city/{shardid}/city.json")]
public IActionResult Get(int shardid)
{
var api = Api.INSTANCE;
var now = Epoch.Now;
if (LastModelUpdate < now - 15)
{
LastModelUpdate = now;
lock (ModelLock)
{
LastModel = new CityInfoModel();
using (var da = api.DAFactory.Get())
{
var lots = da.Lots.AllLocations(shardid);
var lotstatus = da.LotClaims.AllLocations(shardid);
LastModel.reservedLots = lots.ConvertAll(x => x.location).ToArray();
LastModel.names = lots.ConvertAll(x => x.name).ToArray();
LastModel.activeLots = lotstatus.ConvertAll(x => x.location).ToArray();
LastModel.onlineCount = lotstatus.ConvertAll(x => x.active).ToArray();
}
}
}
lock (ModelLock)
{
return ApiResponse.Json(HttpStatusCode.OK, LastModel);
}
}
[HttpGet]
[Route("userapi/city/thumbwork.json")]
public IActionResult ThumbWork()
{
var api = Api.INSTANCE;
api.DemandModerator(Request);
using (var da = api.DAFactory.Get())
{
var work = da.Lots.Get3DWork();
if (work == null) return ApiResponse.Plain(HttpStatusCode.OK, "");
else
{
return ApiResponse.Json(HttpStatusCode.OK, work);
}
}
}
}
class CityInfoModel
{
public string[] names;
public uint[] reservedLots;
public uint[] activeLots;
public int[] onlineCount;
}
}