4.2 Działanie
Działanie programu odbywa się w dwóch osobnych wątkach, które porozumiewają się z sobą przy pomocy zdarzeń (eventów). Pierwszy wątek zajmuje się odbieraniem pakietów rozsyłanych przez serwer sterujący radioteleskopem, natomiast drugi wątek zajmuje się obsługą interfejsu graficznego oraz analizowaniem odebranych danych. Taki podział jest konieczny aby zapewnić płynne działanie programu oraz aby zapobiec niepoprawnemu działaniu programu w przypadku, gdy łączność z siecią zostałaby przerwana lub zakłócona.
4.2.1 Działanie pierwszego wątku - odbieranie danych
Program automatycznie rozpoczyna nasłuchiwanie na przychodzące dane w momencie uruchomienia. Komunikacja odbywa się poprzez protokół UDP na porcie 3499. Serwer sterujący radioteleskopem rozsyła na adres typu broadcast (158.75.6.255) pakiety zawierające interesujące nas dane, zatem program musi działać na komputerze znajdującym się w sieci 158.75.6.0/24. Z uwagi na fakt, iż użytkownik może mieć możliwość przerwania działania programu w dowolnej chwili, odbieranie danych zostało zastosowane przy pomocy nieblokujących gniazd (non-blocking sockets) typu select z opóźnieniem równym 0.1 sekundy. Oznacza to, że w momencie przerwania programu przez użytkownika nasłuchiwanie na pakiety zostanie przerwane nie później niż 0.1 sekundy od momentu przerwania programu. Jeżeli program w przeciągu 10 sekund nie otrzyma żadnych danych nasłuchiwanie zostanie przerwane, a użytkownik będzie je musiał ponownie rozpocząć wybierając odpowiednią opcję z menu.
W momencie odebrania pakietu program odczytuje jego pole danych zawierające ciąg znaków (typu string), w którym znajdują się poszczególne liczby oddzielone spacjami. Program oddziela od siebie wartości przy pomocy metody split() i zapisuje je razem w 37-elementowej tablicy. Tablica ta jest dostępna także dla wątku służącego do obsługi interfejsu graficznego, co umożliwia łatwą wymianę danych pomiędzy tymi wątkami. Po zapisaniu danych do tablicy wywoływane jest odpowiednie zdarzenie informujące drugi wątek o konieczności zaktualizowania danych wyświetlanych przez interfejs użytkownika.
19