CTcpManager

Manager utilizzabile per connettere due applicazioni differenti via IP

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

Il manager funge da Server su porta TCP per ricevere i messaggi.
Il manager sfrutta l'invio di messaggi TCP per spedire i messaggi.
Il manager stabilisce un metodo per l'identificazione del Manager in modo che il nome getAddress() del Manager consenta di identificarlo in una rete di computer.
Il manager stabilisce altresì un formato di spedizione dei pacchetti TCP in modo che il destinatario possa comprenderlo ricreando a sua volta l'CEnvelope.
Ad ogni richiesta di invio di un messaggio il manager legge la lista di connessioni aperte per verificare se conosce il destinatario, altrimenti crea una nuova connessione.
Ad ogni richiesta di connessione dall'esterno, questa viene recuperata indicando che si conosce già il mittente.
Importante: le socket vanno chiuse esplicitamente altrimenti il GarbageCollector di Visual Basic le lascia aperte indefinitamente causando spiacevoli errori ed inconvenienti!
Usare il metodo Destroy per pulire tutto.

Codice
Const Summary
Private mDEFAULT_PORT
Porta di default per l'apertura di una nuova Socket server
 
Event Summary
Public OnAddressChange()
Indica che l'indirizzo del manager potrebbe essere cambiato
 
Field Summary
Private(IDispatcher) mDispatcher
Variabile contenente il valore della proprietà omonima dell'oggetto
Private(CRemoteHost) mHostData
Variabile contenente il valore della proprietà omonima dell'oggetto
Private(Collection) mManagers
Variabile contenente il valore della proprietà omonima dell'oggetto
Private(CSocket) mServerSocket
Socket Server usata per accettare le connessioni dall'esterno
Private(String) mstrLastError
 
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 Private(IDispatcher)
Set Private(IDispatcher)
Property Get IMsgManager_Dispatcher()
Property Set IMsgManager_Dispatcher( RHS As IDispatcher)

Codice
Get Public(String)
Let Private(String)
Property Get LastError()
Property Let LastError( newValue As String)

Codice
Descrizione dell'ultimo errore
 
Method Summary
Private Class_Initialize()
Codice
Private Class_Terminate()
Codice
Public Destroy()
Codice
IMPORTANTE: Funzione che distrugge l'oggetto.
Private(CTcpManagerSlave) FindPeerServer( MngAddress As String)
Codice
Recupera un elemento da una collection se esiste, altrimenti restituisce Nohting
Private GenerateError( Description As String, Optional l As Long)
Codice
Gestisce l'errore
Private GenerateErrorGenerico( Procedure As String)
Codice
Gestisce l'errore
Public(String) getAddress()
Codice
Indirizzo logico del manager. Identifica il manager specificandolo in maniera univoca
Public(Long) getKnownManagerNumber()
Codice
Indica il numero di manager conosciuti.
Public(String) getLocalIpAddress()
Codice
Indirizzo IP di ascolto per il manager
Public(Long) getPort()
Codice
Porta di ascolto per il manager
Private(String) IMsgManager_getAddress()
Codice
Private(Boolean) IMsgManager_Send( Env As CEnvelope, MngAddress As String)
Codice
Private mServerSocket_OnConnectionRequest( ByVal requestID As Long)
Codice
Public(Boolean) Send( Env As CEnvelope, ByVal l As String)
Codice
La funzione ignora il MngAddress
Public(Variant) setLocalIpAddress( newValue As String)
Codice
Porta di ascolto per il manager
Public(Variant) setPort( newValue As Long)
Codice
Porta di ascolto per il manager
Public(Boolean) StartListenForMessages()
Codice
Permette di cominciare ad ascoltare sulla porta indicata i messaggi in ingresso
Public StopListenForMessages()
Codice
Permette di cominciare ad ascoltare sulla porta indicata i messaggi in ingresso
 
Details

mDEFAULT_PORT

Private Const mDEFAULT_PORT As Long = 5230

Codice
Porta di default per l'apertura di una nuova Socket server

OnAddressChange

Public Event OnAddressChange()

Codice
Indica che l'indirizzo del manager potrebbe essere cambiato

mDispatcher

Private mDispatcher     As IDispatcher

Codice
Variabile contenente il valore della proprietà omonima dell'oggetto

mHostData

Private mHostData       As CRemoteHost

Codice
Variabile contenente il valore della proprietà omonima dell'oggetto

mManagers

Private mManagers       As Collection

Codice
Variabile contenente il valore della proprietà omonima dell'oggetto

mServerSocket

Private WithEvents mServerSocket   As CSocket

Codice
Socket Server usata per accettare le connessioni dall'esterno

mstrLastError

Private mstrLastError           As String

Codice

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

IMsgManager_Dispatcher

Private Property Get IMsgManager_Dispatcher() As IDispatcher

Codice

IMsgManager_Dispatcher

Private Property Set IMsgManager_Dispatcher(RHS As IDispatcher)

Codice

LastError

Public Property Get LastError() As String

Codice
Descrizione dell'ultimo errore

LastError

Private Property Let LastError(newValue As String)

Codice
Descrizione dell'ultimo errore

Class_Initialize

Private Sub Class_Initialize()

Codice

Class_Terminate

Private Sub Class_Terminate()

Codice

Destroy

Public Sub Destroy()

Codice
IMPORTANTE: Funzione che distrugge l'oggetto.
E' importante chiamare questa funzione perché il Garbage Collector di Visual Basic ritarda molto a pulire le risorse non più usate a causa dei riferimenti circolari.

FindPeerServer

Private Function FindPeerServer(MngAddress As String) As CTcpManagerSlave

Codice
Recupera un elemento da una collection se esiste, altrimenti restituisce Nohting

GenerateError

Private Sub GenerateError(Description As String, Optional Number As Long = vbObjectError)

Codice
Gestisce l'errore

GenerateErrorGenerico

Private Sub GenerateErrorGenerico(Procedure As String)

Codice
Gestisce l'errore

getAddress

Public Function getAddress() As String

Codice
Indirizzo logico del manager. Identifica il manager specificandolo in maniera univoca
L'indirizzo viene generato automaticamente alla creazione dell'oggetto.

getKnownManagerNumber

Public Function getKnownManagerNumber() As Long

Codice
Indica il numero di manager conosciuti.

getLocalIpAddress

Public Function getLocalIpAddress() As String

Codice
Indirizzo IP di ascolto per il manager

getPort

Public Function getPort() As Long

Codice
Porta di ascolto per il manager

IMsgManager_getAddress

Private Function IMsgManager_getAddress() As String

Codice

IMsgManager_Send

Private Function IMsgManager_Send(Env As CEnvelope, MngAddress As String) As Boolean

Codice

mServerSocket_OnConnectionRequest

Private Sub mServerSocket_OnConnectionRequest(ByVal requestID As Long)

Codice

Send

Public Function Send(Env As CEnvelope, ByVal MngAddress As String) As Boolean

Codice
La funzione ignora il MngAddress
Restituisce False se il manager non è nell'elenco dei manager registrati.
Se il manager destinazione è vuoto o è l'oggetto stesso, restituisce False se il Dispatcher non è stato specificato.

setLocalIpAddress

Public Function setLocalIpAddress(newValue As String)

Codice
Porta di ascolto per il manager

setPort

Public Function setPort(newValue As Long)

Codice
Porta di ascolto per il manager

StartListenForMessages

Public Function StartListenForMessages() As Boolean

Codice
Permette di cominciare ad ascoltare sulla porta indicata i messaggi in ingresso

StopListenForMessages

Public Sub StopListenForMessages()

Codice
Permette di cominciare ad ascoltare sulla porta indicata i messaggi in ingresso