Frage zur Programmierung mit Listener (SipListener von JMF)

tanerc

Grünschnabel
Hallo Zusammen,

ich versuche ein "Library" zu programmieren, den ich später in einem anderen Projekt einbinden möchte. Dabei implementiere ich den SipListener von JMF, der u.A. "processRequest(RequestEvent re)" und "processResponse(ResponseEvent re)" zu implementieren hat.

Ich schreibe nun eine weitere Methode, die die Anfragen an den Server schick und jenachdem (anhand den Ergebnissen vom Server) Rückgabewerte liefern soll!

Mein Problem dabei ist: die Antwort kommt an die Methode "processResponse()", ich bin aber dann in der Methode "MyClass sendRequest(..)".
Wie sollen diese beiden denn kommunizieren ? Wie gehe ich das um ? Gibt es Muster die hier verwendet werden können?

Weiteres Problem wegen Wartezeiten bis Response kommt, wenn ich mit Threads arbeite und die SendeMethode als Thread aufrufe, gibt es eine Möglichkeit das Ergebnis davon in das Mainprogramm zu bekommen ?

Ich habe derzeit eine Lösung:
eigene Interface (implementiert vom Aufrufer), um den eigentlichen Rückgabewert von sendRequest() manuell dem Aufrufer zu übergeben. Dabei liefert natürlich sendRequest() nichts oder wartet bis sich der Zustand geändert hat (Problem mit evetl. längeren Wartezeiten). Den Response speichere ich dann auch Global in einer Variable, so dass ich diese später von anderen Methoden verwenden kann.

Ist das so üblich? Wie ist es am geschicktesten ?

Ich hoffe das Problem verständlich beschrieben zu haben.

Gruß
Taner
 
Zuletzt bearbeitet:
Hallo Zusammen,

so ungefähr siehts derzeit aus..

Code:
// implementiert wird dieser vom MainClass 
public interface IBindCompListener {
    public void processState(BindCompEvent bce);
    class BindCompEvent {
        // set/get etc.
    }
}

public class MainClass implements IBindCompListener{
    public void processState(..) {
       // z.B. State = "geliefert" : Rückgabe werte sind da!
    }
}

// Interface zu Programmlogic
public interface ISIPFunktionen{
    ...
   public void addBindCompListener(IBindCompListener iBindCompListener) ;
}

// 
public class ISIPFunktionenImpl implements ISIPFunktionen {
  ...
  addBindCompListener(IBindCompListener iBindCompListener) {}
  public void setState(){ // rufe alle Listener's processState auf}
}

Gruß
Taner
 
Zurück