Nedarvning og asynkrone kald
Hej eksperter.Jeg arbejder med Flash Media Server, hvor jeg transmitterer live-video, men har et OOP-spørgsmål. Projektet består af 5 kameraer, 1 monitor og 1 live-vindue samt et editor-vindue, der instantiates under Camera-klassen.
Jeg har en række klasser, hvor f.eks. klassen Camera nedarver Stream.
I Stream sker initialiseringen af netStream og netConnections og det meste virker efter hensigten.
Imidlertid har jeg følgende metode i Stream og den bliver kaldt, når forbindelsen til server og channel er oprettet:
protected function netstreamStatus(e:NetStatusEvent):void {
if (e.info.code == "NetStream.Buffer.Full") {
if (!_channelConnected) {
_channelConnected = true;
trace("Vi er i movieclip "+this);
trace(e.currentTarget);
MovieClip(this).stream_lv.attachNetStream(_ns);
}
}
}
Som det ses, forbindes _ns med videoelementet "stream_lv" når der er forbindelse.
Imidlertid har jeg et separat movieclip (som har klassen Editor. Editor nedarver MovieClip men includer Stream-klassen) som i det store hele skal kunne det samme, lige bortset fra at videovinduet nu ikke hedder "stream_lv" men "editor_lv".
Herudover ønsker jeg at editoren skal opføre sig lidt anderledes, da den ikke skal vise en live-stream, men tage fat i den fil, der i øjeblikket optages på serveren og afspille den fra 00:00:00
Min umiddelbare tanke var at placere netstreamStatus i den klasse, der tilhører hhv. kamera og editor og så referere direkte til de respektive videovinduer dér - men hvis jeg gør det, kan Stream vel næppe nå dem, da f.eks. Camera-klassen nedarver Stream og ikke omvendt.
En anden løsning var at overføre et "target" under initialiseringen, således at attachNetStream-kommandoen blev sat, dynamisk. Det giver ingen fejl, men videoen vises ikke i editor-vinduet og selvom det måske kan komme til at virke, synes jeg at det er noget rod at gøre det på den måde.
DET STORE SPØRGSMÅL ER DERFOR: Hvor skal jeg generelt lægge metoder som denne? Stream-klassen forventer jo at metoden ligger i samme klasse (eller i en overordnet) og kan ikke nå metoder i Camera-klassen som jo nedarver Stream.