0%

unityMqtt

思路

采用Unity3d MQTT插件搭建mqtt的客户端

流程

  1. 克隆Unity3d MQTT插件
  2. 将unitypackage导入项目
  3. 编写逻辑

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// 纯逻辑
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;

public class GetMqttMes : MonoBehaviour
{

public TMP_InputField UrlInput;
public TMP_InputField PortInput;
public TMP_InputField UserNameInput;
public TMP_InputField Password;
public TMP_InputField Topic;
public TMP_InputField Message;
public TMP_Text SublistText;
public TMP_Text ReciveText;

public Button UpdateButton;
public Button SubscribeButton;
public Button AddButton;
public Button ClearButton;
public Button ConnectButton;
public Button DisConnectButton;

public SpriteRenderer SpriteRender;
private MqttClient client;
private List<string> SubList;

private string ReciveString;

// Start is called before the first frame update
void Start()
{
UpdateButton.onClick.AddListener(UpdateMqttMess);
SubscribeButton.onClick.AddListener(SubscribeMqtt);
AddButton.onClick.AddListener(AddList);
ClearButton.onClick.AddListener(Clear);
ConnectButton.onClick.AddListener(Connect);
DisConnectButton.onClick.AddListener(DisConnect);

DisConnectButton.enabled = false;
ClearButton.enabled = false;
AddButton.enabled = false;
SubscribeButton.enabled = false;
UpdateButton.enabled = false;

SubList = new List<string>();
}

// Update is called once per frame
void Update()
{

}

void UpdateMqttMess()
{
if (client == null || string.IsNullOrEmpty(Topic.text) || string.IsNullOrEmpty(Message.text))
{
return;
}

client.Publish(Topic.text, System.Text.Encoding.UTF8.GetBytes(Message.text), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, true);
}

void SubscribeMqtt()
{
if (UrlInput.text == "" || UserNameInput.text == "" || Password.text == "")
{
return;
}
Debug.Log(SubList);
client.Subscribe(SubList.ToArray(), new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE } );
}

void AddList()
{
if (Topic.text == "")
{
return;
}

SubList.Add(Topic.text);
if (string.IsNullOrEmpty(SublistText.text)) SublistText.text = Topic.text;
else SublistText.text = SublistText.text + "," + Topic.text;
Topic.text = "";
}

void Clear()
{
SubList.Clear();
SublistText.text = "";
}

void Connect()
{
if (UrlInput.text == "" || UserNameInput.text == "" || Password.text == "" || PortInput.text == "")
{
return;
}

string clientId = Guid.NewGuid().ToString();

try
{
client = new MqttClient(IPAddress.Parse(UrlInput.text),int.Parse(PortInput.text),false,null);
client.MqttMsgPublishReceived += MessReceived;
client.Connect(clientId, UserNameInput.text, Password.text);
}
catch (Exception e)
{
Debug.Log(e.Message);
}

ConnectButton.enabled = false;
DisConnectButton.enabled = true;
ClearButton.enabled = true;
AddButton.enabled = true;
SubscribeButton.enabled = true;
UpdateButton.enabled = true;
SpriteRender.color = Color.green;
}

void DisConnect()
{
if(client == null) return;

client.Disconnect();

DisConnectButton.enabled = false;
ConnectButton.enabled = true;
ClearButton.enabled = false;
AddButton.enabled = false;
SubscribeButton.enabled = false;
UpdateButton.enabled = false;
SpriteRender.color = Color.red;
}

void MessReceived(object sender,MqttMsgPublishEventArgs e)
{
string text = "[" + e.Topic + "]:" + e.Message;
ReciveString = text;
Debug.Log(e.Message);
}
}