dcneeme/uniscada — pull request #18 by Cougar (2014-09-27 20:57:15+00:00)
Title: Controller

Siin kaks uut klassi:

Controller, kus on ühe kontrolleri kohta kirjas:

- id (mac aadress stringina)
- host, mis seob teda läbi Host klassi ühendusega, ehk siis praegusel juhul alati UDPCommiga
- state, kus hoitakse kõigi sellest kontrollerist tulnud registrite nimesid, väärtusi ja viimast uuendamise aega
- send_queue, kuhu lähevad kirja registrite nimed ja väärtused, mida kontroller küsis ja mis tuleks talle tagasi saata
- last_sdp, kus on viimasena kontrolleri saadetud datagramm SDP klassiks teisendatuna. Kui seda salvestatakse, siis uuendataksegi "state" andmeid, lisatakse vajadusel "send_queue"-sse küsitud registrite väärtused ja aamuti kustutatakse "send_queue"-st maha need registrite nimed, mille väärtused just kontrollerist saabusid

Meetodide nimedest saad ise aru, mida seal tehakse. Hetkel on olulisemad set_last_sdp() ja ack_last_sdp()

"send_queue" saatmiste loendurit ega vanade andmete mahakustutamist pole implementeertud. Neid on lihtne lisada.

Teine klass on Controllers, mis on pmst kontrollerite list. Iga kord, kui kontrollerist saabunud andmetest (SDP-st) on id kätte saadud, saab küsida selle id järgi sealt kontrolleri instantsi. Kui seda kontrollerit pole varem nähtud, siis tehakse uus tühi instants. Kui on juba nähtud sama id-ga kontrollerit, siis tagastatakse olemasoleva instantsi viit.

Seal klassis on ka generaator kõigi teadaolevate kontrollerite id-de leidmiseks. id järgi saab juba kontrolleri instantsti küsida.

Praegu mingit "vanade" kontrollerite aegumist ega mahakustutamist pole. Seda loogikat saab vajadusel hõlpsalt lisada.