Merge branch 'DroneConnectionFix' into 'main'

Drone connection fix

See merge request kzotkin/hiveemulator!5
This commit is contained in:
Kirill 2025-03-17 08:39:56 +00:00
commit 17ceed960e
3 changed files with 45 additions and 15 deletions

View File

@ -1,4 +1,4 @@
using DevOpsProject.CommunicationControl.Logic.Services.Interfaces; using DevOpsProject.CommunicationControl.Logic.Services.Interfaces;
using DevOpsProject.Shared.Clients; using DevOpsProject.Shared.Clients;
using DevOpsProject.Shared.Configuration; using DevOpsProject.Shared.Configuration;
using DevOpsProject.Shared.Enums; using DevOpsProject.Shared.Enums;
@ -64,13 +64,33 @@ namespace DevOpsProject.CommunicationControl.Logic.Services
} }
public async Task<HiveOperationalArea> ConnectHive(HiveModel model) public async Task<HiveOperationalArea> ConnectHive(HiveModel model)
{
bool isHiveAlreadyConnected = await IsHiveConnected(model.HiveID);
if (isHiveAlreadyConnected)
{
_logger.LogWarning("Reconnect Hive request: {@model}", model);
}
else
{ {
_logger.LogInformation("Trying to connect Hive: {@model}", model); _logger.LogInformation("Trying to connect Hive: {@model}", model);
}
bool result = await _redisService.SetAsync(GetHiveKey(model.HiveID), model); bool result = await _redisService.SetAsync(GetHiveKey(model.HiveID), model);
if (result) if (result)
{ {
_logger.LogInformation("Successfully connected Hive: {@model}", model); _logger.LogInformation("Successfully connected Hive: {@model}", model);
var operationalArea = _spatialService.GetHiveOperationalArea(model); var operationalArea = _spatialService.GetHiveOperationalArea(model);
if (isHiveAlreadyConnected)
{
await _messageBus.Publish(new HiveReconnectedMessage
{
HiveID = model.HiveID,
Hive = model,
InitialOperationalArea = operationalArea,
IsSuccessfullyReconnected = result
});
}
else
{
await _messageBus.Publish(new HiveConnectedMessage await _messageBus.Publish(new HiveConnectedMessage
{ {
HiveID = model.HiveID, HiveID = model.HiveID,
@ -78,6 +98,7 @@ namespace DevOpsProject.CommunicationControl.Logic.Services
InitialOperationalArea = operationalArea, InitialOperationalArea = operationalArea,
IsSuccessfullyConnected = result IsSuccessfullyConnected = result
}); });
}
return operationalArea; return operationalArea;
} }
else else

View File

@ -0,0 +1,16 @@
using DevOpsProject.Shared.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DevOpsProject.Shared.Messages
{
public class HiveReconnectedMessage : BaseMessage
{
public bool IsSuccessfullyReconnected { get; set; }
public HiveModel Hive { get; set; }
public HiveOperationalArea InitialOperationalArea { get; set; }
}
}

View File

@ -30,13 +30,6 @@ namespace DevOpsProject.CommunicationControl.API.Controllers
HiveSchema = request.HiveSchema HiveSchema = request.HiveSchema
}; };
bool isConnected = await _communicationControlService.IsHiveConnected(request.HiveID);
if (isConnected)
{
_logger.LogError("Hive with HiveID: {hiveId} already connected. Request: {@request}", request.HiveID, request);
return BadRequest($"Hive with HiveID: {request.HiveID} already connected");
}
var hiveOperationalArea = await _communicationControlService.ConnectHive(hiveModel); var hiveOperationalArea = await _communicationControlService.ConnectHive(hiveModel);
var connectResponse = new HiveConnectResponse var connectResponse = new HiveConnectResponse
{ {