CDynamicStub

Stub di base con chiamate dinamiche funzionante per una qualsiasi classe

Autore: Giorgio Bernardi
E-Mail: Giorgio.Bernardi@studio.unibo.it
Data : Settembre 2004

Questo Stub può essere utilizzato per ogni oggetto in quanto contiene chiamate standard grazie all'utilizzo del costrutto linguistico di Visual Basisc ParamArray.
Creare una istanza di questa classe e chiamare la funzione CallRemoteFunction specificando i parametri necessari.
E' possibile usare la classe indicando di non attendere il risultato delle funzioni e poi recuperare il risultato stesso in modalità polling tramite le funzioni IsResultArrived e GetResult.

Codice
Const Summary
Private DEFAULT_TIMEOUT_MILLI_SECONDS
TimeOut di default applicato all'inizializzazione della classe
 
Field Summary
Private(IDispatcher) mDispatcher
Dispatcher al quale inviare le richieste
Private(Long) mlngTimeOutMilliSeconds
Milli-Secondi dopo il quale scatterà il timeout se non giunge il risultato della chiamata a funzione
Private(String) mstrObjectID
Variabile contenente il valore della proprietà omonima
Private(String) mstrRemoteMsgManagerAddress
Indirizzo di ricezione del manager remoto
Private(String) mstrSkeletonObjectID
Indirizzo di ricezione dello Skeleton remoto
Private(Collection) Risultati
Collezione dei risultati delle funzioni attualmente disponibili
 
Properties Summary
Get Public(IDispatcher)
Set Public(IDispatcher)
Property Get Dispatcher()
Property Set Dispatcher( dsptchr As IDispatcher)

Codice
Identificativo dell'oggetto che si occuperà di indirizzare i messaggi ai destinatari
Get Public(String)
Let Public(String)
Property Get RemoteMsgManagerAddress()
Property Let RemoteMsgManagerAddress( Value As String)

Codice
Indirizzo di ricezione del manager remoto
Get Public(String)
Let Public(String)
Property Get RemoteSkeletonID()
Property Let RemoteSkeletonID( Value As String)

Codice
Restituisce l'identificativo univoco all'interno della applicazione remota dello skeleton di destinazione
Get Public(String)
Let Public(String)
Property Get StubID()
Property Let StubID( Value As String)

Codice
Restituisce l'identificativo univoco all'interno di questa applicazione dell'oggetto
Get Public(Long)
Let Public(Long)
Property Get TimeOutMilliSeconds()
Property Let TimeOutMilliSeconds( Value As Long)

Codice
Secondi dopo il quale scatterà il timeout se non giunge il risultato della chiamata a funzione
 
Method Summary
Public(Variant) CallRemoteFunction( MethodName As String, HoldOnForResult As Boolean, ParamArray y() As Variant)
Codice
Funzione da chiamare per contattare lo Skeleton remoto.
Private Class_Initialize()
Codice
Private Class_Terminate()
Codice
Public(CFunctionResult) GetResult( ProcedureInstanceID As String)
Codice
Restituisce il risultato della invocazione remota.
Public(Variant) HoldResult( ByVal ProcedureInstanceID As String, ByVal l As Long)
Codice
Chiamare questa procedura se si desidera attendere il risultato della chiamata a funzione remota precedentemente effettuata.
Private(String) IReceiver_getObjectID()
Codice
Private IReceiver_msgArrived( Env As CEnvelope)
Codice
Private(String) ISender_getObjectID()
Codice
Public(Boolean) IsResultArrived( ProcedureInstanceID As String)
Codice
Verifica se è arrivato il risultato della richiesta
Private ResultArrived( Result As CFunctionResult)
Codice
Indica che è arrivato il risultato della richiesta
 
Details

DEFAULT_TIMEOUT_MILLI_SECONDS

Private Const DEFAULT_TIMEOUT_MILLI_SECONDS = 10000

Codice
TimeOut di default applicato all'inizializzazione della classe

mDispatcher

Private mDispatcher             As IDispatcher

Codice
Dispatcher al quale inviare le richieste

mlngTimeOutMilliSeconds

Private mlngTimeOutMilliSeconds      As Long

Codice
Milli-Secondi dopo il quale scatterà il timeout se non giunge il risultato della chiamata a funzione

mstrObjectID

Private mstrObjectID            As String

Codice
Variabile contenente il valore della proprietà omonima

mstrRemoteMsgManagerAddress

Private mstrRemoteMsgManagerAddress   As String

Codice
Indirizzo di ricezione del manager remoto

mstrSkeletonObjectID

Private mstrSkeletonObjectID    As String

Codice
Indirizzo di ricezione dello Skeleton remoto

Risultati

Private Risultati               As Collection

Codice
Collezione dei risultati delle funzioni attualmente disponibili

Dispatcher

Public Property Get Dispatcher() As IDispatcher

Codice
Identificativo dell'oggetto che si occuperà di indirizzare i messaggi ai destinatari

Dispatcher

Public Property Set Dispatcher(dsptchr As IDispatcher)

Codice
Identificativo dell'oggetto che si occuperà di indirizzare i messaggi ai destinatari

RemoteMsgManagerAddress

Public Property Get RemoteMsgManagerAddress() As String

Codice
Indirizzo di ricezione del manager remoto

RemoteMsgManagerAddress

Public Property Let RemoteMsgManagerAddress(Value As String)

Codice
Indirizzo di ricezione del manager remoto

RemoteSkeletonID

Public Property Get RemoteSkeletonID() As String

Codice
Restituisce l'identificativo univoco all'interno della applicazione remota dello skeleton di destinazione

RemoteSkeletonID

Public Property Let RemoteSkeletonID(Value As String)

Codice
Restituisce l'identificativo univoco all'interno della applicazione remota dello skeleton di destinazione

StubID

Public Property Get StubID() As String

Codice
Restituisce l'identificativo univoco all'interno di questa applicazione dell'oggetto

StubID

Public Property Let StubID(Value As String)

Codice
Restituisce l'identificativo univoco all'interno di questa applicazione dell'oggetto

TimeOutMilliSeconds

Public Property Get TimeOutMilliSeconds() As Long

Codice
Secondi dopo il quale scatterà il timeout se non giunge il risultato della chiamata a funzione
ATTENZIONE: in questa implementazione Visual Basic viene usata una precisione al centesimo di secondo, non al millesimo! Impostare valori multipli di 10!

TimeOutMilliSeconds

Public Property Let TimeOutMilliSeconds(Value As Long)

Codice
Secondi dopo il quale scatterà il timeout se non giunge il risultato della chiamata a funzione
ATTENZIONE: in questa implementazione Visual Basic viene usata una precisione al centesimo di secondo, non al millesimo! Impostare valori multipli di 10!

CallRemoteFunction

Public Function CallRemoteFunction(MethodName As String, HoldOnForResult As Boolean, ParamArray Arguments() As Variant)

Codice
Funzione da chiamare per contattare lo Skeleton remoto.
Impostare tutti i parametri della funzione da chiamare nella variabile ParamArray
E' necessario indicare se attendere o meno il risultato della computazione remota. Questo è importante sia nel caso in cui il metodo chiamato sia semplicemente una procedura senza ritorno, sia nel caso in cui non si desideri attendere il risultato ma semplicemente andarlo a pescare dopo eseguendo un polling sulla funzione IsResultAvailable.
Nota: se non si desidera attendere il risultato, la funzione restituisce il nome univoco della richiesta di procedura remota necessario per eseguire successivamente il polling del risultato.

Class_Initialize

Private Sub Class_Initialize()

Codice

Class_Terminate

Private Sub Class_Terminate()

Codice

GetResult

Public Function GetResult(ProcedureInstanceID As String) As CFunctionResult

Codice
Restituisce il risultato della invocazione remota.
Restituisce Nothing se il risultato non è ancora giunto.
Se il risultato è giunto lo restituisce e lo rimuove dalla collezione dei risultati arrivati

HoldResult

Public Function HoldResult(ByVal ProcedureInstanceID As String, ByVal TimeOutS As Long)

Codice
Chiamare questa procedura se si desidera attendere il risultato della chiamata a funzione remota precedentemente effettuata.

IReceiver_getObjectID

Private Function IReceiver_getObjectID() As String

Codice

IReceiver_msgArrived

Private Sub IReceiver_msgArrived(Env As SMom.CEnvelope)

Codice

ISender_getObjectID

Private Function ISender_getObjectID() As String

Codice

IsResultArrived

Public Function IsResultArrived(ProcedureInstanceID As String) As Boolean

Codice
Verifica se è arrivato il risultato della richiesta

ResultArrived

Private Sub ResultArrived(Result As CFunctionResult)

Codice
Indica che è arrivato il risultato della richiesta
Registra il risultato fra quelli disponibili