wuch + twin ale jak ?

Paweł Kołodziej pawelk w pld.org.pl
Sob, 24 Lut 2001, 01:56:43 CET


Witam.
Troche dokładniej (ale wciąż nie bardzo dokładnie) przyjżałem się
twin'owi. Poniżej zamieszczam przemyślenia na temat "nowego" wucha.
Były by fajnie jakbyście rzucili na to krytycznym okiem, i jeśli potrzeba
zmieszali poniższe z błotem.

Wucha zdekomponujemy na duzo większa liczbe modółów niż obecnie:
 - core - modół "systemowy". W nim program spędza większość czasu (w
   oczekiwaniu że user coś zrobi), steruje pracą pozostałych
 - selektor pakietów (nie pokazujący informacji o pakietach, a jedynie 
   umożliwiający ich zaznaczenie na wiele sposobów).
 - wyświetlarka informacji -- wyświetla info o aktualnie podświetlonym
   pakiecie w selektorze
 - control center -- menu z którego user wybiera jaką chce podjąć akcję
   (instalacja zaznaczonych pakietów (czy raczej "ustalenie listy
   zainstalownych pakietów zgodnie z wyborem w selektorze (obejmuje
   instalacje i kasowanie pakietow); wysylanie raportu z ocena pakietu itp. ).
 - moduły do pobierania statystyk i wysyłania raportów
 - modół "ftp" do którego odwołują się pozostałe gdy potrzeby jest jakiś
   plik z sieci.
 - inne. właściewie dowolne. W tej chwili nie jest to istotne.

Na razie proponuje się ograniczyć do programu jedno wątkowego, ale tak
wszystko projektować aby uwielowątkowienie było możliwie proste.

Teraz najważniejsze: przepływ danych.
1. Informacje o zainstalowanych i dostępnych pakietach mogą być dostępne
   tak jak teraz w globalnej tablicy. Zamiast pola "selected" trzeba będzie
   zrobić bardziej ogólne flagi. Zmiany w tej tablicy dokonywane przez
   moduły wymagają wysłania stosownego broadcastu (patrz pkt. 3).
2. Komunikacja twin -- wuch będzie nadzorowana przez modol "core".
    Algorytm miej więcej taki:
    - msgport=CreateMsgPort;
    - w nieskonczonej petli:
       msg=ReadMsg(wait=1)
       rozpoznanie ktorego okna (modułu) dotyczy "msg" (informacja jest
       zapisana w stukturze opisującej zdazenie).
       modul[odpowiedniModol].processMsg(msg);
    - koniec petli
3. Komunikacja miedzy modulami.
   Kazdy modol moze wyslac "broadcast" gdy zaszła w nim zmiana na którą
   powinny zareagować inne moduły (np. w selektorze zmienił się
   podświetlony pakiet -> wysyłamy o tym informacje żeby modół z okienkiem
   z informacjami o pakiecie mógł się dostosować). Funckja powiedzmy
   SendBroadcast jest udostępniana przez modół core który rozsyła tą
   informacje do pozostałych modółów (wywołuje ich funkcje
   processBroadcast() ). Obsługę modułu ftp też można tak załatwić: jakis
   modól wysyłą broadcast "potrzebuje plik aaaa z ftp", mdól ftp go zciąga i
   wysyła broadcast "plik aaaa z ftp jest dostepny jako plik xxx na lokalnym
   dysku"
   Do póżniejszej dyskusji zostawiam format takich
   broadcastów (tekstowy, binarny -- chyba binarny ze względu na szybkosc,
   ale i tak jeszcze zostają szczegóły do dogadania).

Ze względu na ewentualną wilowątkowść (potrzebujemy jej ?) najbardziej
kłopotliwy wydaje się pkt. 1. 
To chyba tyle na dziś. 
       

PS. wiem miałem napisać za kilka dni, ale nie mogłem się powstrzymać.

-- 
Paweł Kołodziej 
pawelk w pld.org.pl 
,,O ile nam wiadomo, komputer nigdy nie popełnił niewykrytego błędu.''
                                                 -- Weisert
		



Więcej informacji o liście dyskusyjnej pld-installer