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);
 | 
					
 | 
				
			||||||
            await _service.AddGpsHistory(json);
 | 
					            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);
 | 
				
			||||||
 | 
					                    // 发送响应给客户端
 | 
				
			||||||
 | 
					                    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