Napisałem aplikacje która używana jest w tym samym czasie na kilku komputerach w tej samej sieci wewnętrznej. Chciałbym dodać możliwość zmiany np. koloru formatki aplikacji z poziomu tej samej aplikacji lecz zainstalowanej na innym komputerze i wszystko musiałoby się odbyć w czasie rzeczywistym. Myślałem nad plikiem na serwerze ftp ktory bylby na bieŻąco pobierany na kazdy komputer za pomoca timera i jesli jego zawartosc by sie zmienila aplikacja zmienilaby kolor, jednak takie rozwiązanie mimo że zadziała z pewnością spowolni aplikację jak nie zablokuje pozostałych jej funkcji dlatego poszukuje czegos rozsadniejszego i stąd zdecydowałem napisać prośbę do Was o podrzucenie propozycji czym mógłbym tego dokonać by za razem działało bezkolizyjnie z innyni funkcjami aplikacji oraz by funkcje wykonywane byly najlepiej od razu po ich wprowadzeniu. Moze oprzeć to jakoś przez wbudowanie komunikatora jabbera? Proszę o wszelkie propozycję gdyż mam pustkę...
Niech aplikacja nasluchuje na danym porcie danej porcji informacji (komendy) i po jej otrzymaniu niech ją wykona, zaś aplikacja administratora przy wykonaniu np akcji zmiany koloru tła niech wyśle na adres broadcast danej sieci informację w formacie jaki odbierze slave, dodatkowo pamiętaj o tym żeby zapisać zmiane w configu każdej aplikacji
Znaczy nie ma podziału na aplikacja admina i klienta. Każda aplikacja ma być identyczna i każdy użytkownik może wywołać opisaną wyżej zmianę która momentalnie ma zadziałać na każdej aktualnie uruchomionej aplikacji.
@Zeelof - w takim razie, skoro każda aplikacja ma być taka sama, bez podziału na klient/serwer czy user\admin, to każdy uruchomiony egzemplarz powinien z jednej strony nasłuchiwać, odbierać i reagować na przysłane dane, a z drugiej strony mieć możliwość broadcastowania; Skoro w ten sposób chcesz to wykonać to w teorii innego rozwiązania nie widzę.
Użytkownicy na pewno pokochają autora wątku !
Jak im sie zacznie coś zmieniać w czasie działania aplikacji ;)
Co do technologii to jak to jest ta sam sieć to rzeczywiście najrozsądniej jest uzyć "broadcastowania"
Jak w to się nie chesz bawić to zacznij może zamiast od FTP od jakiegoś współdzielonego folderu albo zasobu sieciowego ,
jak nie chesz aby aplikacja sie blokowała to musisz użyć watków
To może zdradzę w czym rzecz :D
Jeśli jakiś z użytkowników kliknie buttona u siebie to u wszystkich okno zmieni kolor na czerwony, drugie kliknięcie przywróci kolor na poprzedni. Funkcja ma być swego rodzaju alarmem dla pracowników w firmie, jeśli np. wszedłby przełożony grupy pracowników do pomieszczenia gdzie działa aplikacja to pracownik który zauważyłby ów przełożonego jako pierwszy mógłby używając tej funkcji poinformować resztę ekipy o zaistniałym wydarzeniu. Chodzi o to by np. któryś z pracowników nie powiedział czegoś niewłaściwego w obecności kierownictwa ;)
Jak więc widać jakiś cel w tym jest ;P
@Zeelof w takim razie to jest dość prosta aplikacja. Taki opis jak dał @furious programming w swoim poście powinien być ok. Tylko musisz się zastanowić co będzie jak ten sam button będzie działał w trybie "toggle". Otóż jak 2 pracowników naciśnie ten sam przycisk po sobie w odstępie 1s, to wynikiem tego będzie sekundowa zmiana koloru formatki. Więc źle. Ja raczej użyłbym 2 komunikatów:
- AlarmOn
- AlarmOff
Oczywiście wysyłanych za pomocą 2 oddzielnych buttonów. Takie rozwiązanie eliminuje to co opisałem wyżej. Jak aplikacja dostanie pierwszy AlarmOn to zmieni kolor tła na czerwony, przy drugim nie zrobi nic, bo już ten kolor jest czerwony. Dopiero AlarmOff pozwoli na zmianę koloru na normalny.
Można by też trzymać dodatkowo czas odebrania ostatniego komunikatu; Jeśli przychodzi nowy komunikat to sprawdzić obsługę poprzedniego i jeśli jest większa niż np. pięć sekund to obsłużyć, w przeciwnym razie nic nie robić;
Problemem może być implementacja - nasłuchiwanie raczej będzie musiało się odbywać w wątku pobocznym; W przeciwnym razie okna dialogowe mogą solidnie przeszkadzać.
furious programming napisał(a):
Można by też trzymać dodatkowo czas odebrania ostatniego komunikatu; Jeśli przychodzi nowy komunikat to sprawdzić obsługę poprzedniego i jeśli jest większa niż np. pięć sekund to obsłużyć, w przeciwnym razie nic nie robić;
Całkiem fajne rozwiązanie. W sumie jeśli ma to być program gdzie reakcja ma być szybka, to użytkownik raczej nie będzie chciał decydować w którego buttona ma kliknąć. Ponieważ będzie mu zależeć na czasie, a wiadomo jak to czasem z celnością klikania myszą bywa.
Ponieważ będzie mu zależeć na czasie, a wiadomo jak to czasem z celnością klikania myszą bywa.
A tu raczej przyda się podpiąć skrót klawiszowy, żeby nie trzeba było szukać myszy.
W przypadku klawiszy skrótów przyda sie ten kawałek kodu
http://stackoverflow.com/questions/4115429/how-can-i-handle-a-keyboard-shortcut-when-my-program-isnt-active
bo to zadziała nawet jak nasza aplikacja nie jest aktywna
Dzięki Panowie za wszelkie wskazówki ;)
W weekend się za to zabiorę i dam znać co wyszło :)
Jezeli projekt nie bedzie komercyjny to proponuję zapoznać sie z github-em i publikować kod to sprawdzimy jak Ci wyszło ;)