gps 数据推送调整
This commit is contained in:
parent
b250b0a297
commit
101dc1fef6
|
|
@ -13,6 +13,14 @@ namespace langguanApi.Common.WebSocket
|
||||||
{
|
{
|
||||||
private readonly IHubContext<SocketHub> _hubContext;
|
private readonly IHubContext<SocketHub> _hubContext;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="hubContext"></param>
|
||||||
|
public PushService(IHubContext<SocketHub> hubContext)
|
||||||
|
{
|
||||||
|
_hubContext = hubContext;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
/// 全部消息
|
/// 全部消息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message"></param>
|
/// <param name="message"></param>
|
||||||
|
|
@ -23,7 +31,7 @@ namespace langguanApi.Common.WebSocket
|
||||||
{
|
{
|
||||||
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
||||||
};
|
};
|
||||||
Console.WriteLine($"gps:{JsonConvert.SerializeObject(message, settings)}");
|
Console.WriteLine($"gps 推送数据:{JsonConvert.SerializeObject(message, settings)}");
|
||||||
var data = JsonConvert.SerializeObject(message, settings);
|
var data = JsonConvert.SerializeObject(message, settings);
|
||||||
await _hubContext.Clients.All.SendAsync("ReceiveMessage", data);
|
await _hubContext.Clients.All.SendAsync("ReceiveMessage", data);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using langguanApi.Common.Redis;
|
using langguanApi.Common.Redis;
|
||||||
|
using langguanApi.Common.WebSocket;
|
||||||
using langguanApi.Extensions;
|
using langguanApi.Extensions;
|
||||||
using langguanApi.Extensions.AutoDI;
|
using langguanApi.Extensions.AutoDI;
|
||||||
using langguanApi.Middleware;
|
using langguanApi.Middleware;
|
||||||
|
|
@ -45,7 +46,8 @@ builder.Services.AddSwaggerGen(
|
||||||
});
|
});
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
|
//websocket
|
||||||
|
builder.Services.AddSignalR();
|
||||||
//redis
|
//redis
|
||||||
var redisoptions = builder.Configuration.GetSection("Redis").Get<RedisOptions>();
|
var redisoptions = builder.Configuration.GetSection("Redis").Get<RedisOptions>();
|
||||||
if (redisoptions != null)
|
if (redisoptions != null)
|
||||||
|
|
@ -76,6 +78,13 @@ builder.Services.AddCors(options =>
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
ServiceLocator.Instance = app.Services;
|
ServiceLocator.Instance = app.Services;
|
||||||
|
app.UseRouting();
|
||||||
|
//执行匹配的端点
|
||||||
|
app.UseEndpoints(endpoints =>
|
||||||
|
{
|
||||||
|
endpoints.MapHub<SocketHub>("/notification");
|
||||||
|
endpoints.MapControllers();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
|
|
@ -92,7 +101,6 @@ app.UseCors("CorsPolicy");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
app.MapControllers();
|
|
||||||
if (!await GetNowTimeAsync())
|
if (!await GetNowTimeAsync())
|
||||||
{
|
{
|
||||||
Console.WriteLine("当前时间不在可运行时间范围内,请联系供应商。");
|
Console.WriteLine("当前时间不在可运行时间范围内,请联系供应商。");
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
using langguanApi.Model.Entity;
|
using langguanApi.Model.Entity;
|
||||||
using MongoDB.Bson.IO;
|
using MongoDB.Bson.IO;
|
||||||
|
using Org.BouncyCastle.Utilities.Net;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using IPAddress = System.Net.IPAddress;
|
||||||
|
|
||||||
namespace langguanApi.Service
|
namespace langguanApi.Service
|
||||||
{
|
{
|
||||||
|
|
||||||
public class GpsService
|
public class GpsService
|
||||||
{
|
{
|
||||||
private GpsHistoryService _service = ServiceLocator.Instance.GetService<GpsHistoryService>();
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 缓冲器
|
/// 缓冲器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -22,17 +24,24 @@ namespace langguanApi.Service
|
||||||
public async Task Start()
|
public async Task Start()
|
||||||
{
|
{
|
||||||
// 创建本地IP地址和TCP端口号
|
// 创建本地IP地址和TCP端口号
|
||||||
var ipEndPoint = new IPEndPoint(IPAddress.Any, port);
|
// 定义监听地址和端口
|
||||||
TcpListener listener = new(ipEndPoint);
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// 定义监听地址和端口
|
||||||
|
IPAddress ipAddress = IPAddress.Any; // 使用本地所有可用的 IP 地址
|
||||||
|
|
||||||
|
// 创建 TcpListener 实例
|
||||||
|
TcpListener listener = new TcpListener(ipAddress, port);
|
||||||
|
// 开始监听
|
||||||
listener.Start();
|
listener.Start();
|
||||||
Console.WriteLine($"Waiting for gps connection... port:{port}");
|
Console.WriteLine($" gps Listening on {ipAddress}:{port}...");
|
||||||
using TcpClient handler = await listener.AcceptTcpClientAsync();
|
while (true)
|
||||||
await using NetworkStream stream = handler.GetStream();
|
{
|
||||||
int received = await stream.ReadAsync(result);
|
// 接受客户端连接
|
||||||
var message = Encoding.UTF8.GetString(result, 0, received);
|
TcpClient client = await listener.AcceptTcpClientAsync();
|
||||||
Console.WriteLine($"GPS received: \"{message}\"");
|
// 处理客户端连接
|
||||||
|
_ = Task.Run(() => HandleClientAsync(client));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -44,10 +53,36 @@ namespace langguanApi.Service
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message"></param>
|
/// <param name="message"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task Send(string message)
|
public async Task HandleClientAsync(TcpClient client)
|
||||||
{
|
{
|
||||||
var json = Newtonsoft.Json.JsonConvert.DeserializeObject<GpsHistoryDTO>(message);
|
|
||||||
|
string receivedData = string.Empty;
|
||||||
|
using (NetworkStream stream = client.GetStream())
|
||||||
|
{
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
|
||||||
|
// 持续读取数据直到客户端断开连接
|
||||||
|
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0)
|
||||||
|
{
|
||||||
|
// 将字节数据转换为字符串
|
||||||
|
receivedData = Encoding.UTF8.GetString(buffer, 0, bytesRead);
|
||||||
|
Console.WriteLine($" gps Received: {receivedData}");
|
||||||
|
|
||||||
|
|
||||||
|
var json = Newtonsoft.Json.JsonConvert.DeserializeObject<GpsHistoryDTO>(receivedData);
|
||||||
|
var _service = ServiceLocator.Instance.GetService<GpsHistoryService>();
|
||||||
await _service.AddGpsHistory(json);
|
await _service.AddGpsHistory(json);
|
||||||
|
// 发送响应给客户端
|
||||||
|
string response = "Data received";
|
||||||
|
byte[] responseData = Encoding.UTF8.GetBytes(response);
|
||||||
|
await stream.WriteAsync(responseData, 0, responseData.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
client.Close();
|
||||||
|
Console.WriteLine("Client disconnected.");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue