Coś jak pokazanie okna z innej aplikacji - trudne

0

Cześć, mam problem, który dość ciężko opisać, ale postaram się jak najlepiej.
Otóż mam taki system(bazodanowy): usługa, działająca na serwerze i obsługująca pluginy, a także manager usługi - aplikacja okienkowa działająca na innym kompie.

Tak więc są jakby 3 typy aplikacji(usługa, plugin i manager). Każda z tych aplikacji ma dostęp do bazy danych.

Manager z usługą komunikuje się za pomocą TCP/IP
Usługa z pluginami poprzez interfejsy(klasyczna konstrukcja pluginów :))

Teraz tak, plugin ma zaprogramowane okno. Załóżmy, że są na nim jakieś przyciski, które po wciśnięciu wykonują jakiś kod.

I wszystko byłoby proste, gdyby nie to, że to właśnie okno muszę pokazać w managerze. W jaki sposób to zrobić? Podejrzewam, że jest to możliwe, ale nie mam pojęcia jak się do tego zabrać.

0

Od razu Ci powiem, ze nie jest to prawidlowa konstrukcja aplikacji, bo typowo uslugi (a zatem i pluginy uruchamiane w ich kontekscie) nie powinny komunikowac sie w zaden sposob z interfejsem uzytkownika (bo co, jesli usluga chodzi, a nikt nie jest zalogowany?). Musisz zrozumiec, ze podstawowa roznica miedzy zwykla aplikacja a usluga systemowa jest oddzielny kontekst uruchamiana (inny uzytkownik niz zalogowany, z innymi uprawnieniami, inny [wirtualny] pulpit i inne zasoby dostepne, zalezne od uprawnien systemu plikow czy kluczy rejestru). To tak, jakby ktos inny na swoim pulpicie chcial pokazac okno, a Ty liczysz, ze zobaczysz je na swoim.

Prawidlowa architektura powinna byc taka, ze plugin sklada sie z dwoch czesci: plugin dla uslugi, plugin dla managera (moga byc nawet roznymi funkcjonalnosciami w jednym pliku pluginu).

Aby jednak rozwiazac Twoj problem, bez przepisywania aplikacji, poczytaj o wariancie uslugi, ktory komunikuje sie z interfejsem uzytkownika (Interactive Services). Od razu zaznacze, co jest napisane w artykule, ze uzycie ich nie jest zalecane, bo nie pozwala na poprawne wykorzystanie przy systemach wielodostepnych (jak chocby Windows 2003) oraz, gdy wlaczone jest szybkie przelaczanie uzytkownikow (istniejace w XP czy Vista).

0
Szczawik napisał(a)

Od razu Ci powiem, ze nie jest to prawidlowa konstrukcja aplikacji, bo typowo uslugi (a zatem i pluginy uruchamiane w ich kontekscie) nie powinny komunikowac sie w zaden sposob z interfejsem uzytkownika (bo co, jesli usluga chodzi, a nikt nie jest zalogowany?).

To jest tak. Usługa sobie generalnie nic nie robi, tylko podczas uruchamiania łączy się z pluginami, no i nasłuchuje połączeń w sieci.

Dopiero klient, gdy się podłączy wysyła do usługi jakieś żądanie, nie wiem, w stylu: POBIERZ_UZYTKOWNIKOW. Usługa sobie parsuje to żądanie i wywołuje odpowiednią metodę w pluginach, ewntualnie na koniec wysyła klientowi komuikat zwrotny w stylu: UZYTKOWNICY_POBRANI.

Tak więc usługa tylko w taki sposób komunikuje się z klientami.

Prawidlowa architektura powinna byc taka, ze plugin sklada sie z dwoch czesci: plugin dla uslugi, plugin dla managera (moga byc nawet roznymi funkcjonalnosciami w jednym pliku pluginu).

Ale wtedy manager też musiałby mieć dostęp i obsługiwać pluginy :)

Aby jednak rozwiazac Twoj problem, bez przepisywania aplikacji, poczytaj o wariancie uslugi, ktory komunikuje sie z interfejsem uzytkownika (Interactive Services). Od razu zaznacze, co jest napisane w artykule, ze uzycie ich nie jest zalecane, bo nie pozwala na poprawne wykorzystanie przy systemach wielodostepnych (jak chocby Windows 2003) oraz, gdy wlaczone jest szybkie przelaczanie uzytkownikow (istniejace w XP czy Vista).

Współdziałanie z pulpitem?
Już się na tym kiedyś przejechałem, więc sobie daruję.

Ale wymyśliłem metodę nieco na około, ale może zadziała.

Otóż forma do pokazania będzie składała się z iluś przycisków.
Mógłbym zrobić tak, że wysyłam managerowi informacje, ile tych przycisków ma być itd., a manager sobie wszystko interpretuje i tworzy odpowiednie okno. Problem tylko, jak ma obsługiwać te przyciski. Musiałaby być ciągła komunikacja między pluginem, usługą i managerem, nie? I czy nie będzie to trochę przerost treści nad formą?

0
Juhas napisał(a)

Ale wtedy manager też musiałby mieć dostęp i obsługiwać pluginy

Oczywiscie, ale przeciez od pokazywania interfejsu jest manager wlasnie.

Juhas napisał(a)

Ale wymyśliłem metodę nieco na około, ale może zadziała.

...i tu zblizasz sie do innego zagadnienia, jakim jest pisanie uslug webowych, dla ktorych serwer udostepnia interfejs uzytkownika przez HTTP, a czesc serwerowa wykonuje zadane operacje (czesto bazodanowe).

0
Juhas napisał(a)

Ale wymyśliłem metodę nieco na około, ale może zadziała.

...i tu zblizasz sie do innego zagadnienia, jakim jest pisanie uslug webowych, dla ktorych serwer udostepnia interfejs uzytkownika przez HTTP, a czesc serwerowa wykonuje zadane operacje (czesto bazodanowe).</quote>

Hmmm, zamierzenie jest takie. Usługa wykonuje pewne czynności(w zadanym interwale czasowym). Przeważnie polega to na wywoływaniu odpowiednich funkcji z pluginów i komunikacją z klientami po TCP/IP.

Dlatego musi być to usługa, gdyż działa cały czas aż do zamknięcia systemu - nawet po wylogowaniu się użytkownika.

Manager stanowi jakby GUI dla usługi. I teraz, czy ten mój pomsył(wysyłanie managerowi informacji o przyciskach) jest dobry? Czy w takiej architekturze można to zrobić lepiej?

0

Jak napisalem, jest to typowe zastosowanie uslugi webowej. Serwer HTTP dziala jako twoja usluga, caly czas - nawet po wylogowaniu uzytkownika, a do klienta wysyla interfejs graficzny (managerem jest przegladarka WWW), ktory pozwala na przesylanie odpowiedzi czy ustawien z powrotem do uslugi.

W ten sposob:

  1. nie potrzebujesz zadnego dodatkowego managera (ale mozesz i takiego zaimplementowac - bedzie z aplikacja mogl komunikowac sie samodzielnie przez HTTP),
  2. mozesz w interfejsie graficznym stosowac gotowe, sprawdzone i ogolnie przyjete standardy sieciowe i technologie, zamiast wlasnych implementacji,
  3. mozesz wykorzystac cale bogactwo jezykow, bibliotek i narzedzi do tworzenia aplikacji webowej oraz jej pluginow,
  4. wlasciwie kazdy z jezykow server-side jaki wybierzesz, oferuje obsluge baz danych.
0

No tak, tylko to wszystko wiąże się z pisaniem od nowa ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1