CarTrackingRuleEngine/SimulatedTrackingDevice/Program.cs

90 lines
3.2 KiB
C#

using MQTTnet;
using MQTTnet.Protocol;
using Newtonsoft.Json;
using System.Text;
using SimulatedTrackingDevice.DTOs; // Giữ nguyên nếu class DeviceMessage ở đây
namespace SimulatedTrackingDevice
{
internal class Program
{
private static readonly string BrokerIp = "localhost";
private static readonly int BrokerPort = 1883;
private static readonly string Imei = "22222test2222";
private static readonly string UpdatePvtTopic = "iot/devices/update_PVT";
private static readonly string ResponseTopic = $"iot/devices/update_PVT_response/{Imei}";
static async Task Main(string[] args)
{
var factory = new MqttClientFactory();
var mqttClient = factory.CreateMqttClient();
mqttClient.ApplicationMessageReceivedAsync += async e =>
{
string topic = e.ApplicationMessage.Topic;
string payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
if (topic == ResponseTopic)
{
Console.WriteLine($"📩 Received response on topic '{topic}':");
Console.WriteLine(payload);
}
await Task.CompletedTask;
};
var options = new MqttClientOptionsBuilder()
.WithClientId($"SimDevice-{Guid.NewGuid()}")
.WithCredentials("simdevice", "navis@123")
.WithTcpServer(BrokerIp, BrokerPort)
.WithCleanSession()
.Build();
await mqttClient.ConnectAsync(options);
await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder()
.WithTopic(ResponseTopic)
.WithAtLeastOnceQoS()
.Build());
Console.WriteLine($"✅ Subscribed to response topic: {ResponseTopic}");
// Load mock data from file
string jsonFilePath = "mock_data.json";
if (!File.Exists(jsonFilePath))
{
Console.WriteLine("❌ File 'mock_data.json' not found.");
return;
}
string jsonContent = await File.ReadAllTextAsync(jsonFilePath);
var message = JsonConvert.DeserializeObject<DeviceMessage>(jsonContent);
if (message == null)
{
Console.WriteLine("❌ Failed to parse JSON data.");
return;
}
// Gửi bản tin update_pvt mỗi 10 giây
while (true)
{
message.ReceivedTime = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
string jsonPayload = JsonConvert.SerializeObject(message);
var mqttMessage = new MqttApplicationMessageBuilder()
.WithTopic(UpdatePvtTopic)
.WithPayload(jsonPayload)
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)
.WithRetainFlag(false)
.Build();
await mqttClient.PublishAsync(mqttMessage);
Console.WriteLine($"📤 Sent PVT message to '{UpdatePvtTopic}'");
await Task.Delay(10000);
}
}
}
}