Pubblicazione File: CEnvelope
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 = "CEnvelope"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
' *********************************************************************
'* CLASS Rappresentazione di una busta (lettera) tramite cui si inviano messaggi con il middleware
'* <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">
'*  La classe rappresenta una busta a livello applicativo. A basso livello il messaggio _
    verrà incapsulato in maniera differente a seconda del Canale usato per la spedizione.
'*  In fase di ricezione il messaggio viene ricreato prima di consegnarlo al ricevente e _
    alla busta vengono aggiunte le informazioni di tracciabilità per consentire un <B>Replay</B> _
    del messaggio in maniera quanto più automatica possibile.
'* </DIV>
' *********************************************************************
Option Explicit

'* Attributo contenente il valore della proprietà omonima dell'oggetto
Private mSender         As ISender
'* Attributo contenente il valore della proprietà omonima dell'oggetto
Private mReceiver       As IReceiver
'* Attributo contenente il valore della proprietà omonima dell'oggetto
Private mstrMessage     As String
'* Attributo contenente il valore della proprietà omonima dell'oggetto
Private mTraceRoute     As CEnvelopeTrace

'* Carattere delimitatore utilizzato
Private Const CharDelimiter As String = ":"

'* Identificativo del mittente del messaggio
Public Property Get Sender() As ISender
    Set Sender = mSender
End Property

'* Identificativo del mittente del messaggio
Public Property Set Sender(sndr As ISender)
    Set mSender = sndr
End Property

'* Informazioni per la tracciabilità del messaggio
'* Questo attributo viene valorizzato dal Manager e dal Dispatcher di ricezione.
Public Property Get TraceRoute() As CEnvelopeTrace
    Set TraceRoute = mTraceRoute
End Property

'* Informazioni per la tracciabilità del messaggio
'* Questo attributo viene valorizzato dal Manager e dal Dispatcher di ricezione.
Public Property Set TraceRoute(sndr As CEnvelopeTrace)
    Set mTraceRoute = sndr
End Property

'* Identificativo del destinatario del messaggio
Public Property Get Receiver() As IReceiver
    Set Receiver = mReceiver
End Property

'* Identificativo del destinatario del messaggio
Public Property Set Receiver(rcvr As IReceiver)
    Set mReceiver = rcvr
End Property

'* Setta come ricevente un semplice segnaposto con l'ID indicato
Public Sub SetReceiverByObjectID(ObjID As String)
    Dim NewReceiver As New CEmptySender
    NewReceiver.ObjectID = ObjID
    Set Receiver = NewReceiver
End Sub

'* Rappresentazione in forma di stringa del messaggio da inviare
Public Property Get Message() As String
    Message = mstrMessage
End Property

'* Rappresentazione in forma di stringa del messaggio da inviare
Public Property Let Message(msg As String)
    mstrMessage = msg
End Property

'* Permette di recuperare una rappresentazione in forma di stringa dell'oggetto
'* Formato:
'* <SenderObjIDLen>|<ReceiverObjIDLen>|<MessageLen|<SenderObjID><ReceiverObjID><Message>
Public Function toString() As String
    toString = CStr(Len(Sender.getObjectID())) & CharDelimiter & _
                CStr(Len(Receiver.getObjectID())) & CharDelimiter & _
                CStr(Len(Message)) & CharDelimiter & _
                Sender.getObjectID() & _
                Receiver.getObjectID() & _
                Message
End Function

'* Permette di creare un oggetto CEnvelope ottenendo i dati dalla rappresentazione in forma di stringa.
Public Function fromString(ByVal StrEnvelope As String) As Boolean
Dim Env()   As String
Dim tmpSender   As New CEmptySender
Dim tmpReceiver As New CEmptySender
Dim headerLenght    As Integer

    Env = Split(StrEnvelope, CharDelimiter)
    If UBound(Env) < 2 Then Exit Function
    If Not (IsNumeric(Env(0)) And IsNumeric(Env(1)) And IsNumeric(Env(2))) Then Exit Function
    headerLenght = 3 + Len(Env(0)) + Len(Env(1)) + Len(Env(2))
    tmpSender.ObjectID = Mid(StrEnvelope, headerLenght + 1, Val(Env(0)))
    tmpReceiver.ObjectID = Mid(StrEnvelope, headerLenght + CLng(Env(0)) + 1, Val(Env(1)))
    Message = Mid(StrEnvelope, headerLenght + CLng(Env(0)) + CLng(Env(1)) + 1, Val(Env(2)))
    Set Sender = tmpSender
    Set Receiver = tmpReceiver
    fromString = True
End Function

'* Grazie alle funzionalità di tracciabilità è possibile rispondere al messaggio _
semplicemente indicando il messaggio di ritorno
'* La funzione restituisce il risultato della Send applicata al MsgManager locale che ha _
ricevuto il messaggio.
'* Non è ovviamente garantito che il MsgManager di origine conosca il Receiver.
Public Function Replay(Message As String, Optional ByVal MsgSender As ISender = Nothing) As Boolean
Dim snd     As CEmptySender
    'Se non è specificato il Sender ne creo uno fittizio
    If MsgSender Is Nothing Then
        Set snd = New CEmptySender
        snd.ObjectID = Receiver.getObjectID()
        Set MsgSender = snd
    End If
    'Spedisco il messaggio al MsgManager locale con indirizzo il MsgManager remoto
    Replay = TraceRoute.LocalMsgManager.Send( _
            Utilities.CreateStrEnvelope(MsgSender, Me.Sender.getObjectID(), Message), _
            TraceRoute.RemoteMsgManagerAddress)

End Function


Documento generato mediante: Documentation Creator By BGSoftware