zmiany w protokole komunikacji

Szykuje się kolejna zmiana. No cóż, jak zwykle nie doszacowałem złożoności zadania i ponownie nie zmieszczę się w wyznaczonym sobie deadline’ie, ponownie realizuję zadania nie opisane w żadnym z założonych przez siebie tasków :P, natomiast mam na celu wyprodukowanie dobrze działającego i dającego się rozwijać kodu 😉 Rozpisując epica związanego z aktualizacją kont użytkowników po prostu założyłem, że już mam uporządkowany i dający się rozwijać kod, myliłem się 😉 Ale przejdźmy do sedna.

Tym razem sprawa dotyczy protokołu komunikacji pomiędzy serwerem a klientem (pomiędzy agentami). Do tej pory edycja danych działała w ten sposób, że serwer wysyłał paczkę z danymi i koniec. Zakładał, że klient ją odebrał i zrobił co trzeba. Posiadając jedynie jeden obszar konfiguracji mogłem spokojnie oprzeć się na ogólnym numerze wersji konfiguracji jako triggerze do wysłania ponownie danych do klienta. Natomiast na chwilę obecną złożoność systemu wzrosła. To co chcę wprowadzić to mechanizm statusów na poziomie pojedynczych rekordów w bazie. Myślę, że schodząc do tego poziomu nie będę musiał w przyszłości zmieniać już nic w tym obszarze. A o to mi generalnie chodzi: żeby pozamykać poszczególne rozdziały.


Aby uzyskać tą funkcjonalność muszę zrobić dwie rzeczy. Po pierwsze do pakietu z danymi dodany zostanie ID rekordu (rekordów) z bazy danych. Klient po odebraniu danych wykona aktualizację danego item’a w systemie a na końcu przygotuje krótką wiadomość zwrotną w formacie: „kod statusu: ID„. Po stronie serwera stworzę kawałek kodu, którego zadaniem będzie śledzenie i weryfikacja statusów otrzymywanych od klientów. Weryfikacja będzie się odbywać na podstawie informacji niejawnych, które identyfikują hosta w bazie danych. Ta informacja nie będzie przesyłana przez sieć. Mechanizm będzie działał asynchronicznie. Serwer nie będzie oczekiwał aż agent po stronie klienta wykona aktualizację systemu, tylko po przesłaniu pakietu zamknie połączenie. Klient w celu przesłania statusu będzie nawiązywał nowe połączenie do serwera.