StarSoft Multimedia

Przykłady

Wszystkie przykłady

Automatyczna aktualizacja katalogów przez FTP
Przykład użycia UltimateNet Xtra


Pobierz pliki

UltimateNetExample_1.zip
Opis:
Pliki źródłowe do tego przykładu
Rozmiar:
115 kB
Wymagania:
Director MX 2004
UltimateNet Xtra 1.1

Opis zadania

Załóżmy, że mamy prezentację wyświetlającą teksty i grafiki pobierane z zewnętrznych plików, oraz otwierającą osobne filmy zapisane w plikach .dir. Wszystkie te pliki znajdują się w katalogu "data". Chcemy, aby przy każdym uruchomieniu prezentacja sprawdzała, czy na określonym serwerze FTP w katalogu "/pub/data" są dostępne nowsze wersje tych plików. W przypadku znalezienia nowych wersji powinno zostać wyświetlone okno dialogowe z pytaniem "Czy dokonać aktualizacji danych?".

W przypadku, gdy użytkownik zaakceptuje aktualizację, powinno się rozpocząć pobieranie (ang. download) wszystkich wymaganych plików z katalogu "/pub/data" wraz z podkatalogami do katalogu "data" na komputerze lokalnym. Użytkownik powinien mieć możliwość obserwacji postępu w pobieraniu plików oraz przerwania pobierania w dowolnym momencie.

Pokażemy, jak łatwe i szybkie jest wykonanie tego zadania przy użyciu xtrasa UltimateNet Xtra. Wszystkie główne operacje są przeprowadzane we wnętrzu xtrasa, nam pozostaje tylko zainicjować je w kodzie Lingo.

Realizacja zadania

Otwieramy (lub tworzymy nowy) projekt wykorzystujący dane z zewnętrznych plików (teksty, grafiki) oraz uruchamiający inne filmy .dir. Na początek dodamy UltimateNet Xtra i ustawimy jego właściwości w oknie dialogowym.

Dodanie UltimateNet Xtra

Wybieramy z menu Insert > StarSoft Xtras pozycję UltimateNet Xtra. W oknie dialogowym xtrasa, które się pojawi, będzie nas interesowała tylko zakładka FTP. Wprowadzamy w niej wszystkie dane potrzebne do nawiązania połączenia z naszym kontem na serwerze FTP. Przykładowo, ustawienia te mogą wyglądać następująco:



Jeśli z bieżącego komputera jesteśmy w stanie połączyć się z danym kontem FTP, sprawdzamy poprawność wprowadzonych ustawień wciskając przycisk Test connection. Pomyślne nawiązanie połączenia wg wprowadzonych ustawień zostanie potwierdzone komunikatem:



Po zamknięciu okna dialogowego xtrasa przyciskiem OK, zostanie on dodany jako cast member do bieżącego cast-u. Domyślna nazwa cast membera xtrasa to "UltimateNet1".

Nawiązanie połączenia FTP

Teraz musimy zdecydować, w którym miejscu prezentacji zainicjować całą operację aktualizacji. Możemy to zrobić tuż po starcie prezentacji, w jej pierwszej klatce, w zdarzeniu on exitFrame. Tak więc dodajemy do pierwszej klatki (za pomocą okna Score, kanał Frame Scripts) następujący skrypt:
on exitFrame me
  -- ...
  member("UltimateNet1").FtpConnect()
  -- ...
end
	
Uwaga. Ciąg "-- ..." oznacza dowolne inne instrukcje, które możemy umieścić dla potrzeb naszej prezentacji, ale w tej chwili dla nas nieistotne.

Tak więc po opuszczeniu pierwszej klatki zostanie zainicjowane połączenie z serwerem FTP. Jak wiadomo z podręcznika do UltimateNet Xtra, wszystkie operacje sieciowe w tym xtrasie są asynchroniczne, czyli są realizowane "w tle" bez zatrzymywania działania prezentacji. Tak więc funkcja FtpConnect zakończy się prawie natychmiast po jej wywołaniu, natomiast wynik jej działania zostanie zgłoszony po nieokreślonym czasie jako zdarzenie Lingo o nazwie FtpConnect. Obsługa tego zdarzenia musi mieć miejsce w skrypcie cast membera UltimateNet Xtra.

Przygotowanie aktualizacji

Właściwa aktualizacja, czyli pobranie nowszych wersji plików z serwera FTP, musi być poprzedzona porównaniem zawartości dwóch katalogów: źródłowego na serwerze FTP i docelowego na komputerze lokalnym. Służy do tego funkcja FtpPrepareForUpdateDir. Funkcja ta tworzy listę plików FTP, które mają nowsze daty lub inny rozmiar niż pliki lokalne.

Otwieramy więc okno skryptu cast membera UltimateNet Xtra i dodajemy poniższy kod:
on FtpConnect Result
  FTPDIR = "pub/data" -- FTP source directory
  LOCALDIR = "data"   -- Local destination directory
  
  if Result[#Error] = "OK" then
    -- ...
    member("UltimateNet1").FtpPrepareForUpdateDir(LOCALDIR, FTPDIR)
  else
    -- Error handling here
  end if
end
	
Kod ten działa następująco: jeśli nawiązywanie połączenia z serwerem FTP przebiegło pomyślnie, następuje przygotowanie aktualizacji dla katalogu lokalnego "data", natomiast źródłowym katalogiem FTP jest "pub/data".

Funkcja FtpPrepareForUpdateDir jest operacją asynchroniczną, tak więc wyniki jej działania odbierzemy w zdarzeniu o tej samej nazwie.

Potwierdzenie aktualizacji

Zanim rozpoczniemy właściwą aktualizację, damy użytkownikowi możliwość odpowiedzi na pytanie "Czy dokonać aktualizacji?". Wykorzystamy do tego osobne okno dialogowe typu MIAW o nazwie "dialog.dir", umieszczone w katalogu "internal".

O tym, czy w ogóle znaleziono jakieś pliki do aktualizacji, informuje nas parametr Result[#Modified]. Jeśli ma on wartość 1 (true), to wyświetlamy nasze okno dialogowe z pytaniem.
on FtpPrepareForUpdateDir Result
  if Result[#Error] = "OK" then  
    if Result[#Modified] then
      -- ...
      window("internal/dialog").open()
    else
      -- No files to update
      -- ...
    end if
  else
    -- Error handling here
  end if    
end
	
Aktualizacja

Gdy użytkownik naciśnie przycisk "Tak" w oknie dialogowym, spowoduje to wywołanie globalnej funkcji "UpdateYes" w głównym pliku prezentacji. Możemy wstawić do tej funkcji kod rozpoczynający właściwą aktualizację, czyli pobieranie zmodyfikowanych plików z serwera FTP.

Całą operację pobierania realizuje bezparametrowa funkcja FtpUpdateDir, która wykorzystuje listę plików uzyskaną przez funkcję FtpPrepareForUpdateDir.
on UpdateYes
  -- ...
  member("UltimateNet1").FtpUpdateDir()
  -- ...      
end
	
Informację o zakończeniu aktualizacji uzyskamy w zdarzeniu FtpUpdateDir. W funkcji obsługi tego zdarzenia powinniśmy zakończyć połączenie FTP oraz ewentualnie odświeżyć obiekty wyświetlane na scenie, możemy także wyświetlić komunikat informujący o poprawnie zakończonej aktualizacji. Na przykład:
on FtpUpdateDir Result
  if Result[#Error] = "OK" then
    UpdateMembers() -- Our custom function
    member("editUpdateStatus").text = "Update done successfully"    
  else
    member("editUpdateStatus").text = "Error: " & Result[#ErrorText]
  end if
  member("UltimateNet1").FtpDisconnect()	
end	
	
Wskaźnik postępu aktualizacji

Dzięki zdarzeniu on FtpProgress możemy łatwo utworzyć wskaźnik informujący o postępie w pobieraniu plików.

Oto jeden z najprostszych przykładów:
-- Movie script:

on UpdateFTPProgressBar Percentage
  UpdateProgressBar(Percentage, sprite("ProgressBar"))
end

on UpdateProgressBar Percentage, progressBar
  progressFrame = sprite(progressBar.spriteNum - 1)
  -- Count new progress bar dimensions
  rightBound = progressFrame.left + progressFrame.width * Percentage / 100
  progressBar.rect = rect(progressFrame.left + 1, progressFrame.top + 1, \
    rightBound , progressFrame.bottom - 1)
end

-- UltimateNet Xtra cast member script:
	
on FtpProgress Result
  UpdateFTPProgressBar(Result[#BytesSoFar] * 100 / Result[#BytesTotal])
end
	
Zakładamy tutaj, że wskaźnik jest zbudowany z dwóch sprite'ów - ramki ograniczającej i paska o zmiennej długości. Sprite paska ma nazwę "ProgressBar", natomiast sprite ramki leży w kanale o jeden numer niższym niż sprite paska. Wymiary paska są obliczane na podstawie wymiarów ramki oraz aktualnego postępu pobierania wyrażonego w procentach.

Prezentacja

Plik .dir dołączony do tego przykładu (przeznaczony dla Directora MX 2004) zawiera wszystkie powyższe skrypty, a oprócz tego demonstruje kilka innych zagadnień przydatnych dla użytkowników Directora, którzy chcą wyposażyć swoje prezentacje w opcję automatycznej aktualizacji FTP.


Komentarze? -


Wszystkie przykłady

Ranking sprzedaży
Najczęściej kupowane produkty:
1. MediaPlayer Xtra
2. UltimateNet Xtra
3. StarMenu Xtra
Nowości
2008-03-27
Wszystkie nasze xtrasy są kompatybilne z Adobe Director 11.

Przetestowaliśmy nasze xtrasy w najnowszej wersji Directora (data rozpoczęcia sprzedaży 25.03.2008) i stwierdziliśmy, że większość z nich działa całkowicie prawidłowo.
10 najpopularniejszych
Najczęściej ściągane pliki:
MediaPlayer Xtra (57260)
StarMenu Xtra (23185)
MediaPlayer Exp. Xtra (18186)
DisplayMode Xtra (14347)
ProjectorLook Xtra (13315)
AnyShape Xtra (11875)
UltimateNet Xtra (11804)
MailTo Xtra (11575)
MediaPlayer Exp. Demo .exe (8624)
SmartOLE Xtra (7520)