lg_backend/langguanApi/Service/GpsService.cs

89 lines
2.9 KiB
C#

using langguanApi.Model.Entity;
using MongoDB.Bson.IO;
using Org.BouncyCastle.Utilities.Net;
using System.Net;
using System.Net.Sockets;
using System.Text;
using IPAddress = System.Net.IPAddress;
namespace langguanApi.Service
{
public class GpsService
{
/// <summary>
/// 缓冲器
/// </summary>
private byte[] result = new byte[1024];
private int port => 5002;
/// <summary>
/// 启动GPS服务
/// </summary>
/// <returns></returns>
public async Task Start()
{
// 创建本地IP地址和TCP端口号
// 定义监听地址和端口
try
{
// 定义监听地址和端口
IPAddress ipAddress = IPAddress.Any; // 使用本地所有可用的 IP 地址
// 创建 TcpListener 实例
TcpListener listener = new TcpListener(ipAddress, port);
// 开始监听
listener.Start();
Console.WriteLine($" gps Listening on {ipAddress}:{port}...");
while (true)
{
// 接受客户端连接
TcpClient client = await listener.AcceptTcpClientAsync();
// 处理客户端连接
_ = Task.Run(() => HandleClientAsync(client));
}
}
catch (Exception ex)
{
Console.WriteLine($"GPS error:{ex.Message}");
}
}
/// <summary>
/// 发送GPS数据
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public async Task HandleClientAsync(TcpClient client)
{
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.");
}
}
}