初始化
This commit is contained in:
159
MyProtoActor/Program.cs
Normal file
159
MyProtoActor/Program.cs
Normal file
@@ -0,0 +1,159 @@
|
||||
using MQTTnet;
|
||||
using MQTTnet.Protocol;
|
||||
using Proto;
|
||||
using Proto.Extensions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace MyProtoActor
|
||||
{
|
||||
internal class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
var system = new ActorSystem();
|
||||
var props = Props.FromProducer(() => new MyMQTTSuper("111")).WithChildSupervisorStrategy(
|
||||
new OneForOneStrategy((PID pid, Exception ex) =>
|
||||
{
|
||||
return SupervisorDirective.Restart;
|
||||
}, 10, new TimeSpan(0, 0, 5))
|
||||
);
|
||||
|
||||
PID pid = system.Root.SpawnNamed(props, "MyAAA");
|
||||
system.Root.RequestAsync<StartMessage>(pid, new StartMessage() { Text = "aaaaaaaaaa" }).GetAwaiter().GetResult();
|
||||
//system.Root.Send(pid, new StartMessage() { Text = "aaaaaaaaaa" });
|
||||
|
||||
////PID pid1= PID.FromAddress(system.Address, "MQTT");
|
||||
|
||||
//Console.WriteLine("Hello, World!");
|
||||
//Console.ReadLine();
|
||||
//Console.WriteLine(1111111111111);
|
||||
//system.Root.Send(pid, new StartMessage() { Text = "aaaaaaaaaa" });
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
public record StartMessage
|
||||
{
|
||||
public string? Text { get; set; }
|
||||
}
|
||||
public class MyMQTTSuper : IActor
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public MyMQTTSuper(string name)
|
||||
{
|
||||
Name = name;
|
||||
}
|
||||
public Task ReceiveAsync(IContext context)
|
||||
{
|
||||
PID pid = null;
|
||||
var child = context.Children;
|
||||
var MSG = context.Message;
|
||||
if (MSG is Proto.Started && (child == null || child.Count == 0))
|
||||
{
|
||||
var props = Props.FromProducer(() => new MyMQTTServer());
|
||||
PID pid111 = context.SpawnNamed(props, "MQTT");
|
||||
//context.Watch(pid111);
|
||||
//context.Send(pid111, new StartMessage { Text = "started" });
|
||||
}
|
||||
else
|
||||
{
|
||||
pid = child.FirstOrDefault();
|
||||
|
||||
if (pid != null)
|
||||
{
|
||||
context.Forward(pid);
|
||||
}
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
public class MyMQTTServer : IActor
|
||||
{
|
||||
public MyMQTTServer()
|
||||
{
|
||||
|
||||
InitializeMqttClient();
|
||||
}
|
||||
public Task ReceiveAsync(IContext context)
|
||||
{
|
||||
var msg = context.Message;
|
||||
Console.WriteLine("1次");
|
||||
if (msg is Proto.Started)
|
||||
{
|
||||
_mqttClient.ConnectAsync(_options).GetAwaiter().GetResult();
|
||||
//int a = 3;
|
||||
//int b = 0;
|
||||
//int c = a / b;
|
||||
var usa = msg as Proto.Started;
|
||||
|
||||
var sss= context.Sender;
|
||||
context.Respond(new StartMessage { Text = "started" });
|
||||
}
|
||||
if (msg is StartMessage)
|
||||
{
|
||||
}
|
||||
if (msg.ToString().Equals("start"))
|
||||
{
|
||||
int a = 3;
|
||||
int b = 0;
|
||||
int c = a / b;
|
||||
}
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public static IMqttClient? _mqttClient;
|
||||
public MqttClientOptions? _options;
|
||||
private async Task InitializeMqttClient()
|
||||
{
|
||||
try
|
||||
{
|
||||
var factory = new MQTTnet.MqttClientFactory();
|
||||
_mqttClient = factory.CreateMqttClient();
|
||||
|
||||
|
||||
var IP = "";
|
||||
int Port = 1883;
|
||||
var UserName = "";
|
||||
var PWD = "";
|
||||
string clientId = "IOTConsumer#" + Guid.NewGuid().ToString("N");
|
||||
|
||||
_options = new MqttClientOptionsBuilder()
|
||||
.WithTcpServer(IP, Port)
|
||||
.WithClientId(clientId)
|
||||
.WithCredentials(UserName, PWD)
|
||||
.WithWillQualityOfServiceLevel(MqttQualityOfServiceLevel.AtMostOnce)
|
||||
.WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500)
|
||||
.Build();
|
||||
|
||||
// 注册事件
|
||||
_mqttClient.ConnectedAsync += OnConnectedAsync;
|
||||
_mqttClient.DisconnectedAsync += OnDisconnectedAsync;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private async Task OnConnectedAsync(MqttClientConnectedEventArgs arg)
|
||||
{
|
||||
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
private async Task OnDisconnectedAsync(MqttClientDisconnectedEventArgs e)
|
||||
{
|
||||
|
||||
// 如果不是正常断开,启动重连
|
||||
if (e.Reason != MqttClientDisconnectReason.NormalDisconnection)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user