Also die Eventssteuerung funktioniert in beide Richtungen!
Du solltest aber in deinem Fall vielleicht folgendes versuchen:
//Verbindung herstellen
$ISDN_CONNECTION = ISDN_Connect($ISDN,$rufnummer);
$callinfo = ISDN_GetConnectionInfo($ISDN,$ISDN_CONNECTION);
//IPS soll so lange warten bis einer das Gespräch abnimmt.
do {
IPS_Sleep(1000);
} while ($callinfo["State"] != 4 );
//Sobald die Verbindung hergestellt wird Script abfeuern!
if (($callinfo["State"] == 4 ) {
for ($i=0;$i<4;$i++) {
$len = ISDN_PlayWave($ISDN, $ISDN_CONNECTION, $file);
IPS_Sleep ($len + 500);
ISDN_StopPlay($ISDN, $ISDN_CONNECTION);
IPS_Sleep(500);
}
}
ISDN_Disconnect($ISDN, $ISDN_CONNECTION);
So könnte ich mir das vorstellen. Habe so etwas ähnliches schon mal gebaut. Habe noch ein Ausstiegstürchen in der Do schleife bei mir eingebaut, wenn keiner ran geht. So würde das Script immer in der Schleife hängen.
Ich glaube ich hatte das dann mit microtime() gelöst. Sprich wenn 15sec vergangen in der DO schleife einen Break gesetzt.
Wie gesagt die Eventsteuerung ist da besser:
Du löst mit einem Script den Anruf aus.
$ISDN_CONNECTION = ISDN_Connect($ISDN,$rufnummer);
$callinfo = ISDN_GetConnectionInfo($ISDN,$ISDN_CONNECTION);
Anschließend baust Du Dir ein Ereignissscript:
switch($_IPS['EVENT']) {
case "Connect":
ISDN_PlayWave($ISDN, $ISDN_CONNECTION, $file);
break;
case "PlayFinish":
ISDN_StopPlay($ISDN, $_IPS['CONNECTION']);
ISDN_Disconnect($ISDN, $_IPS['CONNECTION']);
break;
}
Da Du ja mehrere Files hintereinander abspielen willst müsste man sich Gedanken machen wie das ISDN_PlayWave mehrmals ausgeführt wird. Ich könnte mir vorstellen, dass das man das über eine Variable erschlagen könnte.
Prüfen wieviele Meldungen anliegen dann in die Variable schreiben (evtl in einem Array) welche Files abgespielt werden müssten und dann im PlayWave eine Meldung abfeuern. Warten bis das Ereignis PlayFinish kommt. Wave stoppen. Prüfen ob noch weitere Meldungen abgespielt werden müssen (wenn ja letzten Array eintrag löschen, so dass sich die Variable automatisch leert), wenn nein Disconnect. So könntest Du ohne Set_time_limit auskommen.
So auf die schnelle fällt mir da aber auch nichts besseres ein.