using DocumentFormat.OpenXml.Math;
using Infrastructure;
using Microsoft.AspNetCore.Mvc;
using MQTTnet;
using OpenAuth.App.ServiceApp;
using OpenAuth.Repository.Domain;
using System.Text.Json;
namespace OpenAuth.WebApi.Controllers.ServiceControllers
{
///
/// 机场运维
///
[Route("api/[controller]/[action]")]
[ApiController]
public class AirportMaintenanceController : ControllerBase
{
private readonly AirportMaintenanceApp _app;
private readonly MqttClientManager _mqttClientManager;
public AirportMaintenanceController(AirportMaintenanceApp app, MqttClientManager mqttClientManager)
{
_app = app;
_mqttClientManager = mqttClientManager;
}
///
/// 机场注册 注册码生成
///
///
[HttpPost]
public async Task> GetDeviceBindingCode()
{
var result = new Response();
try
{
result = await _app.GetDeviceBindingCode();
//发送MQTT消息
if (result.Code == 200 && result.Result != null)
{
var topicRequest = $"thing/product/{result.Result.DeviceBindingCode}/requests";
var requestData = new
{
bid = Guid.NewGuid().ToString(),
method = "airport_organization_bind",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
bind_devices = new[]
{
new
{
device_binding_code = result.Result.DeviceBindingCode,
organization_id = result.Result.OrgId
}
}
}
};
string payload = JsonSerializer.Serialize(requestData);
await _mqttClientManager.PublishAsync(topicRequest, payload);
//在这个地方在接收一下?
}
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
///
/// 切换相机
///
///
[HttpPost]
public async Task> ExchangeCamera(string camera,int position,string videoId)
{
Response response = new Response();
try
{
var topicRequest = $"thing/product/8UUXN5400A079H/services";
var requestData = new
{
bid = Guid.NewGuid().ToString(),
method = "live_camera_change",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
camera_position = position,
video_id = "8UUXN5400A079H/165-0-7/normal-0"
}
};
string payload = JsonSerializer.Serialize(requestData);
await _mqttClientManager.PublishAsync(topicRequest, payload);
var topicRequest1 = $"thing/product/8UUXN5400A079H/services_reply";
var requestData1 = new
{
bid = Guid.NewGuid().ToString(),
method = "live_camera_change",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
result = 0
}
};
string payload1 = JsonSerializer.Serialize(requestData1);
await _mqttClientManager.PublishAsync(topicRequest1, payload1);
response.Result = 1;
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message;
}
return response; ;
}
///
/// 设置直播镜头
///
///
[HttpPost]
public async Task> SetCamera(string cameraType, string videoId)
{
Response response = new Response();
try
{
var topicRequest = $"thing/product/8UUXN5400A079H/services";
var requestData = new
{
bid = Guid.NewGuid().ToString(),
method = "live_lens_change",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
video_type = cameraType,
video_id = "8UUXN5400A079H/165-0-7/normal-0"
}
};
string payload = JsonSerializer.Serialize(requestData);
await _mqttClientManager.PublishAsync(topicRequest, payload);
var topicRequest1 = $"thing/product/8UUXN5400A079H/services_reply";
var requestData1 = new
{
bid = Guid.NewGuid().ToString(),
method = "live_lens_change",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
result = 0
}
};
string payload1 = JsonSerializer.Serialize(requestData1);
await _mqttClientManager.PublishAsync(topicRequest1, payload1);
response.Result = 1;
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message;
}
return response;
}
///
/// 设置直播清晰度
///
///
[HttpPost]
public async Task> SetCameraVideo(int videoQuality, string videoId)
{
Response response = new Response();
try
{
var topicRequest = $"thing/product/8UUXN5400A079H/services";
var requestData = new
{
bid = Guid.NewGuid().ToString(),
method = "live_set_quality",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
video_quality = videoQuality,
video_id = "8UUXN5400A079H/165-0-7/normal-0"
}
};
string payload = JsonSerializer.Serialize(requestData);
await _mqttClientManager.PublishAsync(topicRequest, payload);
var topicRequest1 = $"thing/product/8UUXN5400A079H/services_reply";
var requestData1 = new
{
bid = Guid.NewGuid().ToString(),
method = "live_set_quality",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
result = 0
}
};
string payload1 = JsonSerializer.Serialize(requestData1);
await _mqttClientManager.PublishAsync(topicRequest1, payload1);
response.Result = 1;
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message;
}
return response;
}
///
/// 停止直播
///
///
[HttpPost]
public async Task> EndLive( string videoId)
{
Response response = new Response();
try
{
var topicRequest = $"thing/product/8UUXN5400A079H/services";
var requestData = new
{
bid = Guid.NewGuid().ToString(),
method = "live_stop_push",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
video_id = "8UUXN5400A079H/165-0-7/normal-0"
}
};
string payload = JsonSerializer.Serialize(requestData);
await _mqttClientManager.PublishAsync(topicRequest, payload);
var topicRequest1 = $"thing/product/8UUXN5400A079H/services_reply";
var requestData1 = new
{
bid = Guid.NewGuid().ToString(),
method = "live_start_push",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
result = 0
}
};
string payload1 = JsonSerializer.Serialize(requestData1);
await _mqttClientManager.PublishAsync(topicRequest1, payload1);
response.Result = 1;
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message;
}
return response;
}
///
/// 开始直播
///
///
[HttpPost]
public async Task> StartLive(string videoId,int urlType,string url,int quality)
{
Response response = new Response();
try
{
var topicRequest = $"thing/product/8UUXN5400A079H/services";
var requestData = new
{
bid = Guid.NewGuid().ToString(),
method = "live_start_push",
tid = Guid.NewGuid().ToString(),
timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
data = new
{
url_type = urlType,
url = url,
video_quality = quality,
video_id = "8UUXN5400A079H/165-0-7/normal-0"
}
};
string payload = JsonSerializer.Serialize(requestData);
await _mqttClientManager.PublishAsync(topicRequest, payload);
response.Result = 1;
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message;
}
return response;
}
}
}