FileIO-Net, Part II (10/2001, Dir 8)

In diesem Bereich befinden sich Artikel und Tutorials zum Thema Director.

Moderatoren: Bär, Admin

Antworten
Admin
Site Admin
Beiträge: 41344
Registriert: 07.02.2006, 2006 16:09
Wohnort: München
Kontaktdaten:

FileIO-Net, Part II (10/2001, Dir 8)

Beitrag von Admin » 12.02.2006, 2006 19:53

FileIO-Net, Part II

Mit der Erstellung des im ersten Teil von „FileIO-NET“ vorgestellten „NetOperation Objekt“ wurde die Kommunikation zwischen der lokalen Anwendung und einem Server Script erst möglich gemacht. Im zweiten Teil des Artikels soll nun genauer untersucht werden, wie diese Kommunikation konkret aussehen, und wie sie für die geplanten Dateioperationen auf dem Server angewendet werden kann.

Das vom „NetOperation“ Objekt angesprochenen Server Script soll zunächst über vier Funktionen für Dateioperationen verfügen, die im Prinzip alle Basisoperationen abdecken sollten. Die Funktionen sind:

Code: Alles auswählen

	read_from_file (filename)
	write_to_file (filename, text)
	delete_file (filename)
	rename_file (oldfilename, newfilename)
Die Funktionen sollen jeweils in einem Perl und einem PHP Script implementiert werden. Am Beispiel des PHP Scripts (dem Beispielfilm auf der CD-Rom liegen beide Scripts bei) soll die Vorgehensweise einmal Schritt für Schritt analysiert werden.


Das Server Script

Das Script nimmt zunächst die vom Lingo „NetOperation Objekt“ übergebenen Parameter vom POST oder GET Aufruf entgegen. Die Übernahme dieser Informationen ist nicht weiter kompliziert, denn in PHP stehen diese Parameter automatisch als Variablen zur Verfügung. Es wird lediglich eine Abfrage zur angeforderten Funktion benötigt, was ein „switch“ Statement (analog zum Lingo „case“ Statement) erledigt:

Code: Alles auswählen

switch ($func) {
   case "read":
      $res = read_from_file($file);		// read from file
      break;
   case "write":
      $res = write_to_file($file, $data);	// write to file
      break;
   case "delete":
      $res = delete_file($file);		// delete file
      break;
   case "rename":
      $res = rename_file($file, $name);		// rename file
      break;
   default:
      $res = "#FileIO Error: function $func not recognized";
      break;
}

// return the result
echo $res;
Je nach Funktionsaufruf, werden der Funktion die entsprechenden Parameter aus der Anfrage übergeben, z.B. der Name der Datei und den zu speichernden Text. Die verschiedenen Funktionen erledigen dann die angeforderten Dateioperationen lese, schreiben, löschen etc. und geben das Resultat der Operation zurück:

Code: Alles auswählen

function read_from_file ($file) {		// read data from file
	$fh = fopen($file, "r");
	if ($fh) {
	  $data = fread($fh, filesize($file));
	  fclose ($fh);
  	  return $data;
	} else {
	  return "#FileIO Error: cannot open file $file";
	}
}

function write_to_file ($file, $data) {		// write data to file
	$fh = fopen($file, "w");
	if ($fh) {
	  fputs($fh, $data);
	  fclose($fh);
	  return 1;
	} else {
	  return "#FileIO Error: cannot write to file $file";
	}
}

function delete_file ($file) {			// delete a file
	if (file_exists($file)) {
	  return unlink($file);
	} else {
	  return "#FileIO Error: cannot delete file $file";
	}
}

function rename_file ($file, $name) {	// rename a file
	if (file_exists($file)) {
	  return rename($file, $name);
	} else {
	  return "#FileIO Error: cannot rename file $file";
	}
}
Das ist schon alles. Ein im ganzen ein sehr einfaches und kurzes Server Script ermöglicht nun remote Dateioperationen wie sie ansonsten nur lokal über FileIO möglich waren.


Das FileIO-NET Script

Zurück zu Director und der weiteren Entwicklung von „FileIO-NET“. Es stehen nun zwei wichtige Tools zur Verfügung, ein Server Script für die Dateioperationen auf dem Server und ein Objekt zur Kommunikation mit diesem Server Script. Was jedoch noch fehlt, sind die entsprechenden Lingo Handler um die jeweiligen Dateioperationen zu starten.

Zu diesem Zweck wird ein einfaches Movie Script mit dem Namen „FileIO-NET“ mit den gleichen Funktionen wie beim Server Script auch auf der lokalen Seite erstellt. Diese Funktionen erzeugen jeweils ein „NetOperation Objekt“ mit den entsprechenden Daten als Parameter in Form einer Property Liste. Außerdem wird dem Objekt der Script Name und Handler übergeben, den das Objekt aufrufen soll wenn die Operation beendet wurde und die Ergebnisse zur Verfügung stehen.

Code: Alles auswählen

-- --------------------------
-- FileIO-NET Script
-----------------------------

on read_from_file (myUrl, myFile)
  myData = ["func": "read", "file": myFile]
  (script "NetOperation Class").new (myUrl, #get, myData, script "FileIO-NET", #net_callback)
end read_file

on write_to_file (myUrl, myFile, myData)
  myData = ["func": "write", "file": myFile, "data": myData] 
  (script "NetOperation Class").new (myUrl, #post, myData, script "FileIO-Net", #net_callback)
end write_file

on rename_file (myUrl, myFile, myName)
  myData = ["func": "rename", "file": myFile, "name": myName] 
  (script "NetOperation Class").new (myUrl, #post, myData, script "FileIO-Net", #net_callback)
end write_file

on delete_file (myUrl, myFile)
  myData = ["func": "write", "file": myFile] 
  (script "NetOperation Class").new (myUrl, #post, myData, script "FileIO-Net", #net_callback)
end write_file

on net_callback (me, myStatus, myData, myMsg)
  case myStatus of
    #ok:
      put "FileIO-Net result:" && myData
    #timeout:
      put "FileIO-Net timeout:" & RETURN & "Url:" && myData
    otherwise
      put "FileIO-Net error" & RETURN & "Url:" && myData & RETURN & "Desc:" && myMsg
  end case
end net_callback
Der Callback Handler nimmt die vom “NetOperation Objekt” übergebenen Parameter entgegen und gibt das Ergebnis im Nachrichtenfenster aus. Genauso könnte das Ergebnis auch an einen anderen Handler weitergeleitet, oder in einem Textfeld angezeigt werden. Natürlich könnte auch jeder Handler einen eigenen Callback Handler definieren, so dass nicht alle Ergebnisse an den gleichen Handler geschickt werden.

Mit diesem Movie Script ist nun die dritte und letzte Komponente für die „FileIO-NET“ Funktionalität fertig gestellt. Bleibt nur noch die gesamte Funktionalität zu testen:

Code: Alles auswählen

myScript = "http://www.lingopark.com/sbo/fileio/fileio.php"

write__to_file (myScript, "data/test.txt", "Dies ist ein Test")
-- FileIO-Net result: 1

read_from_file (myScript, "data/test.txt")
-- FileIO-Net result: “Dies ist ein Test”

rename_file (myScript, "data/test.txt", "data/test_new.txt")
-- FileIO-Net result: 1

delete_file (myScript, "data/test.txt")
-- FileIO-Net result: 1

Fazit

Dateioperationen auf einem Server sind auf diese Weise sehr einfach und schnell zu realisieren. Egal für welchen Anwendungsbereich, die Scripte sind komplett generisch und lassen jede erdenkliche Variation zu.

Die gezeigt Funktionalität umfasst zwar lediglich Basisfunktionen, Erweiterungen wie z.B. die Ausgabe aller Dateien in einem bestimmten Verzeichnis, inklusive Angabe eines Dateifilters, oder die Überprüfung ob eine Datei existiert sind schnell und einfach gemacht, sofern man sich ein bisschen mit PHP oder Perl auskennt oder gewillt ist etwas dazu zu lernen.

Alle Scripts und Beispielfilm zum Download: http://www.directordevelopers.com/forum ... io-net.zip


Autor: Martin Kloss

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste