Lehallgatott üzeneteket sobjectizer

Az ötlet, hogy SObjectizer kívánatos lenne, hogy valamilyen mechanizmus, hogy elkapjam a kommunikáció, van egy hosszú idő. Annak végrehajtását hagyja a két pontot: először is, nem gyakran volt probléma, ahol az ilyen elfogás lenne rendkívül fontos (mert egy ilyen mechanizmus SObjectizer még senki sem lehet mondani, hogy ezek a problémák nem is létezik) [1]; másrészt nem akarom bonyolítani SObjectizer kiegészítő mechanizmusok.

Néha azonban vannak problémák, hogy lehetne megoldani elfogó üzenetek könnyebb, mint anélkül, elfogás. Példaként egy ilyen feladat lehet vizsgálni a szer szervizelés szerver TCP / IP socket. Ezt a szert fel kell dolgoznia több aljzat, és számos - maga a szerver socket, amely elvégzi az elfogadja működnek, és az egyes csatlakozó csatlakozni.

Egy ilyen kiszolgáló ügynök lehetett, minden ügyfél kapcsolatot hozzon létre külön kliens szervizelése csak egy kapcsolatot. Server ügynök létrehozása leányvállalata szerek titokban. azaz körülbelül létezésük nem kell, hogy bárki megtudja, kívülről csak akkor látható, hogy a kiszolgáló ügynök.

De egy ilyen implicit ügynök probléma: a kliens szerver küld msg_send_package üzenetét. msg_unblock_channel. msg_close_channel kiszolgáló ügynök. Sőt, a felhasználó elküldi ezeket az üzeneteket tanácsos. Ennek eredményeként, a kiszolgáló ügynök volna fogadni ezeket az üzeneteket küldeni őket a megfelelő szert a gyermek. De például, mert túl pazarló msg_send_package döntést.

Pontosabban a probléma, ami döntő volt lehallgatás és átirányítás üzeneteket is létezett, és sikeresen megoldotta a segítségével MBAPI könyvtárban. De MBAPI mellett, hogy elfogják és üzenetek átirányítása hozzá néhány sajátosságait. De a kritikus elfogás pontosan feladatok SObjectizer-üzenete nem volt.

Interceptor szolgálhat, mint egy tárgy, amely megvalósítja az alábbi felületen:

Módszer message_interceptor_t :: fogantyú fogadja érvként SOURCE_INFO szerkezet teljes leírása az esetben üzenet (amely magában foglalja az ügynök, a tulajdonos nevét, az üzenet, a név a fogadó szer, egy mutatót az üzenet szövegét azonosítóját a kommunikációs csatorna, amelyben egy üzenetet küldött, és így tovább. d.). current_info érvelés tartalmaz a teljes leírását az aktuális példányt az üzenet. Kezdeti és folyamatos leírás nem feltétlenül esik egybe az átmenet az egyik a elfogó a listán, hogy egy másik.

Módszer message_interceptor_t :: fogantyú kell visszaküldeni az eredmény paraméterértékek, amelyek helyettesítik a paramétereket az eredeti üzenetet. Tehát, ha az elfogó helyettesíti a címzett nevét, a név meg kell adni az eredmény.

Interceptor jelezheti:

  • amelyek áthaladnak a listát elfogó kell állítani, és a másolatot az üzenet, hogy dobja, és ne hajtson végre az ütemező üzenet;
  • amelyek áthaladnak a listáját elfogó le kell állítani és használja azokat az értékeket és eredményeket current_info kialakulásának megváltozott az üzenet másolatát. Ezt a példányt költenek beosztása;
  • amelyek áthaladnak a listáját elfogó kell folytatni, és használja azokat az értékeket és eredményeket current_info kialakulásának új current_info mielőtt a következő elfogó.

A lehallgató lehet változtatni:

  • a neve a címzett az üzenet;
  • csatorna azonosítót, amelyben az üzenet elküldése.

Telepítéséhez az elfogó, akkor használja a következő funkciókat:

funkciót lehet használni eltávolítására elfogó:

Megjegyzés. A kérdés továbbra is az, hogy mi köze a lefoglalás a elfogó, mellyel hozzá egy funkciót vagy setup_interceptor_before setup_interceptor_after - mert akkor szakadt speciálisan épített a felhasználó által láncot.

Várhatóan használni az elfogó után például Hibaellenőrzések kerül sor üzenetek (azaz a módszer magában foglalja-ellenőrző) és az alkalmazások előtt elhelyezett küldő sorban.

Ez azt jelenti, hogy a halasztott és időszakos üzenet megy át a listát elfogó után az időzítő menet, hogy küldje el a beosztása.

Mivel az üzenetek helyességét ellenőrzést végzünk, ha engedélyezve van SObjectizer kernel, és a hívás üzenetet elfogó érdemes megtenni, ha képes rendszermag. Ez azt jelenti, hogy elfogó lehet hívást kezdeményezni funkciók SObjectizer Run-Time, például új üzeneteket küldeni.

Mielőtt az eredeti objektum létrehozásakor elfogó message_routing_info_t a kezdeti leírása az üzenetet. Ez lesz az objektum paraméter SOURCE_INFO. Belőle épített objektum paraméter current_info.

Ezt követően, a mozgás elfogó listán. A hívás után a következő elfogó eredménye alapján és current_info épít új értéket current_info. Ha elfogó tiltja hivatkozás a többi elfogó (pl lehallgatási), a mozgás megáll elfogó listán. Ellenkező esetben hívja a következő elfogó a listán.

Befejezése után a mozgás a lista elfogó:

  • Ha az üzenet routing betiltották egyáltalán, az az üzenet másolatát egyszerűen kidobják;
  • különben alapján current_info módosította az eredeti példányát az üzenetet, és hogy ő küldte a routing.

Az alábbiakban egy példát elfogó msg_send_package üzenetet az ügynök, a szolgáltató szerver socket. Ez a szer létrehoz egy gyermek szer minden ügyfél kapcsolat. A leányvállalatok ügynök nevét kialakítva elve szerint :. ahol a szülő - a név a szülő szert, és az ügyfél - ez egy belső ügyfél azonosító illeszkedik az érték comm_channel_t :: kliens ().

Lehallgatást rendelni a bejegyzést leányvállalata ügynök neve, mint a neve a címzett szer (azaz, hogy készítsen egy célzott szer üzeneteket küld a gyermek).

Kapcsolódó cikkek