Nasz programik umie nawiązać połączenie z brokerem lokalnym. Czas wiec wyświetlać informacje jakie nas interesują. Nasz program ma wyświetlać informacje podstawowe o naszym brokerze. Dosłownie:
- wersja brokera
- czas pracy
- znacznik czasowy
I właśnie tym się teraz zajmiemy kończąc nasz bazowy program....
Nasz fragment programu w chwili obecnej prezentuje się następująco :
Teraz musimy nieco zmodyfikować kod i dodać kilka elementów oraz funkcji. Na początek zajmijmy się dodaniem nowego panelu który rozciągamy na całym elemencie niebieskim ukrywając pod nim naszą widoczną formę. Nazwiemy sobie ten panel PnlStatus . Następnie dodamy na nim 6 labeli i 2 pictureboxy...
O uzyskamy taki efekt. W 3ch labelach wpisujemy nazwy wyświetlanych danych, natomiast 3m pozostałym zmieniamy nazwy na:
- LblVers
- LblUTime
- LblTStamp
Nie musimy zmieniać textu przypisanego do labelki dlatego w/w we wszystkich 3ch wpis label. Nie ma to znaczenia gdyż będziemy tą wartość modyfikować programowo. Dwa widoczne niżej pictureboxy używane są jako przyciski. Ten z logo otwiera strony forum i bloga , zaś X zwyczajnie zamyka program. No dobrze mamy ustawiony wygląd trzeba go oprogramować ...
W tym celu w naszym kodzie na początku pod InitializeComponent() dopisujemy :
PnlStatus.Visible = false;
Dzięki czemu nasz nowy panel będzie ukryty po uruchomieniu programu. W kodzie wygląda to tak:
Teraz przechodzimy do kodu naszego przycisku Połącz ... Właśnie w nim będą się odbywać główne czary. Na tą chwile klikniecie powoduje połączenie i wyświetlenie mesageboxa z informacja o prawidłowym połączeniu z brokerem, dodatkowo ustawione są subskrybowane tematy. Teraz zmienimy nieco kod dodając kilka linii pod client.Subscribe(........... :
label1.Text = "MQTT Status"; // zmieniamy napis na belce
PnlStatus.Visible = true; // pokazujemy nasz nowy panel
Teraz po kliknięciu połącz w naszym programie Zmieni się Napis na belce z MQTT Connect na MQTT Status oraz pokaże się nasz nowy panel możecie sprawdzić .... działa wiec trzeba tchnąć nieco w niego życia . Musimy stworzyć sobie dwie funkcje. jedna będzie dekodować odebrane wiadomości do UTF , zaś druga po odebraniu właściwej z właściwego Topica będzie umieszczać info we właściwym miejscu .
Action<string, string> ReceiveAction;
void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
ReceiveAction = Receive;
try
{
this.BeginInvoke(ReceiveAction, Encoding.UTF8.GetString(e.Message), e.Topic);
}
catch { };
}
oraz ...
void Receive(string message, string topic)
{
if (topic == "$SYS/broker/version")
{
LblVers.Text = message;
return;
}
if (topic == "$SYS/broker/uptime")
{
LblUtime.Text = message;
}
if (topic == "$SYS/broker/timestamp")
{
LblTStamp.Text = message;
}
}
Tym sposobem jak widzicie mamy wszystko uporządkowane i możemy skompilować nasz program:
Wpisujemy prawidłowe hasło i klikamy połącz w odpowiedzi otrzymamy (jeśli wszystko jest ok):
Klikamy OK gdyż się połączyliśmy .... i tym samym dostajemy to co nas interesuje :
Jak widać wszystko działa prawidłowo więc zakończyliśmy tym samym pisanie naszego programu.
Oczywiście możecie teraz w dowolny sposób modyfikować i zmieniać zakres informacji dostępnych w naszym programie wedle własnego uznania .
Cały kod dostępny na githubie.
Zapraszam do komentowania, oraz przekazywania sugestii.
OdpowiedzUsuń