| Pubblicazione File: CDynamicSkeleton Documento generato mediante: Documentation Creator By BGSoftware |
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "CDynamicSkeleton"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' *********************************************************************
'* CLASS Skeleton di base con chiamate dinamiche funzionante per una qualsiasi classe Servant
'* <BR/>Autore: <B>Giorgio Bernardi</B>
'* E-Mail: <A HREF="mailto:giorgio.bernardi@studio.unibo.it">Giorgio.Bernardi@studio.unibo.it</A>
'* Data : Settembre 2004
'* <DIV CLASS="ClassDescription">
'* Questo skeleton può essere utilizzato per ogni oggetto in quanto contiene chiamate _
dinamiche grazie alla <B>CallByName</B>.
'* <B>A causa della limitatezza della CallByName, è possibile chiamare funzioni o procedure con _
un massimo di 10 argomenti.</B>
'* Creare una istanza della classe e associarvi il Servant attribuendo eventualmente un _
ObjectID idoneo per l'applicazione.
'* Associare la classe ad un Dispatcher in modo che riceva le richieste da parte dello Stub _
corrispondente.
'* </DIV>
' *********************************************************************
Option Explicit
Implements IReceiver 'Necessario
Implements ISender 'Necessario per le funzioni
'* Classe reale che implementa le funzionalità fruibili dall'esterno
Private mServant As Object
'* Variabile contenente il valore della proprietà omonima
Private mstrObjectID As String
'* Restituisce l'identificativo univoco all'interno di questa applicazione dell'oggetto
Public Property Get SkeletonID() As String
SkeletonID = mstrObjectID
End Property
'* Restituisce l'identificativo univoco all'interno di questa applicazione dell'oggetto
Public Property Let SkeletonID(Value As String)
mstrObjectID = Value
End Property
'* Oggetto Servant che esegue le operazioni
Public Property Get Servant() As Object
Set Servant = mServant
End Property
'* Oggetto Servant che esegue le operazioni
Public Property Set Servant(Value As Object)
Set mServant = Value
End Property
Private Function IReceiver_getObjectID() As String
IReceiver_getObjectID = SkeletonID
End Function
Private Function ISender_getObjectID() As String
ISender_getObjectID = SkeletonID
End Function
Private Sub Class_Initialize()
mstrObjectID = "CDynamicSkeleton|" & Utilities.getUniqueIdentifier()
End Sub
'* Gestisce il messaggio in arrivo rimbalzando la richiesta alla classe Servant
Private Sub IReceiver_msgArrived(Env As SMom.CEnvelope)
Dim Procedure As New CProcedure
Dim i As Long
Dim Risultato As Variant
Dim FunctionResult As CFunctionResult
Dim ResultValue As CValue
'Ricreo la procedura e la mando all'oggetto
If Procedure.fromEnvelope(Env) Then
'Chiamo la procedura per nome
On Error GoTo CallByNameError
'NOTA: NON POSSO PASSARE ALLA CallByName un VETTORE! DEVO PREVEDERE PER FORZA
'N CHIAMATE DIVERSE A SECONDA DEL NUMERO DI PARAMETRI! (CHE SCHIFO!)
Select Case Procedure.GetParamsCount()
Case 0
Risultato = CallByName(Servant, Procedure.Name, VbMethod)
Case 1
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant())
Case 2
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant())
Case 3
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant())
Case 4
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant(), Procedure.GetParam(4).toVariant())
Case 5
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant(), Procedure.GetParam(4).toVariant(), Procedure.GetParam(5).toVariant())
Case 6
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant(), Procedure.GetParam(4).toVariant(), Procedure.GetParam(5).toVariant(), Procedure.GetParam(6).toVariant())
Case 7
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant(), Procedure.GetParam(4).toVariant(), Procedure.GetParam(5).toVariant(), Procedure.GetParam(6).toVariant(), Procedure.GetParam(7).toVariant())
Case 8
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant(), Procedure.GetParam(4).toVariant(), Procedure.GetParam(5).toVariant(), Procedure.GetParam(6).toVariant(), Procedure.GetParam(7).toVariant(), Procedure.GetParam(8).toVariant())
Case 9
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant(), Procedure.GetParam(4).toVariant(), Procedure.GetParam(5).toVariant(), Procedure.GetParam(6).toVariant(), Procedure.GetParam(7).toVariant(), Procedure.GetParam(8).toVariant(), Procedure.GetParam(9).toVariant())
Case 10
Risultato = CallByName(Servant, Procedure.Name, VbMethod, Procedure.GetParam(1).toVariant(), Procedure.GetParam(2).toVariant(), Procedure.GetParam(3).toVariant(), Procedure.GetParam(4).toVariant(), Procedure.GetParam(5).toVariant(), Procedure.GetParam(6).toVariant(), Procedure.GetParam(7).toVariant(), Procedure.GetParam(8).toVariant(), Procedure.GetParam(9).toVariant(), Procedure.GetParam(10).toVariant())
Case Else
On Error Resume Next
Call Env.Replay( _
Procedure.getResponseMessage(False, Utilities.CreateCValue(Procedure.toString() & vbCrLf & _
Utilities.GetStandardSMomExceptionDescription(TooManyArgumentsForCallByName))).toMsgEnvelope(), _
Me)
Exit Sub
End Select
'Se ho un risultato lo restituisco al chiamante
'Se viene restituito Empty significa che era probabilmente una Sub
If Not IsEmpty(Risultato) Then
On Error Resume Next
Call Env.Replay( _
Procedure.getResponseMessage(True, Utilities.CreateCValue(Risultato)).toMsgEnvelope(), _
Me)
End If
End If
Exit Sub
CallByNameError:
Dim StrErrorMessage As String
Select Case Err.Number
'TODO gestire eventuali errori gestibili
Case Else
StrErrorMessage = "UnknownError calling " & Procedure.toString() & " in SMom.CDynamicSkeleton." & vbCrLf & Err.Description
End Select
On Error Resume Next
Call Env.Replay( _
Procedure.getResponseMessage(False, Utilities.CreateCValue(StrErrorMessage)).toMsgEnvelope(), _
Me)
End Sub
|
Documento generato mediante: Documentation Creator By BGSoftware |