Scopo
Questo metodo serve ad inviare una messaggio ad una sessione server; alla sessione destinataria verrà notificato l'evento OnSessionMessage.
E' possibile inviare messaggi sincroni (Timeout>=0) o asincroni (Timeout=-1). In entrambi i casi la funzione tenta per 30 secondi di inviare il messaggio; appena ci riesce, in caso di messaggio asincrono, la funzione termina altrimenti attende l'esecuzione del messaggio o lo scadere del Timeout.
Sintassi
string res = NuovaApplicazioneWeb.sendSessionMessage("nome sessione",
"messaggio", timeout, parametri)
Argomenti
Nome Sessione | Nome della sessione a cui inviare il messaggio |
Messaggio | Testo del messaggio |
Timeout | Tempo (ms) che si è disposti ad aspettare per l'esecuzione del messaggio; se -1 il messaggio è asincrono, se 0 il timeout è infinito |
Parametri | Parametro opzionale di tipo IDArray contenente gli eventuali parametri del messaggio |
Valore di ritorno
Viene ritornata una stringa contenente la risposta del messaggio. La stringa restituita è il risultato dell'elaborazione del messaggio che la sessione ha valorizzato nel parametro Risultato dell'evento OnSessionMessage; se non si è ottenuta la risposta del messaggio i valori di ritorno sono:
- null se il messaggio non è stato recapitato entro 30 secondi;
- "0" se il messaggio è stato recapitato, ma il messaggio è asincrono o è scaduto il Timeout prima che la sessione abbia iniziato ad elaborare il messaggio;
- "-1" se è scaduto il Timeout mentre la sessione stava elaborando il messaggio.
Esempio di codice
// Termina la sessione selezionata
// *******************************
public void SessionMonitor.Termina()
{
if (EsempiMS.controlKey)
{
// Invio un messaggio alla sessione dicendogli di autoterminarsi
EsempiMS.sendSessionMessage(ServerSessionsLog.NomeSessione, Terminate
, -1, ...)
}
else
{
// Termino la sessione direttamente
// Se è premuto il tasto SHIFT la termino immediatamente
if (!(endSession(ServerSessionsLog.NomeSessione, EsempiMS.shiftKey)))
{
ServerSessionsLog.setInfoMessage(WARN, "Non è stata trovata nessuna
sessione con nome '" + ServerSessionsLog.NomeSessione + "'", ...
)
}
}
}
- Il tempo di Timeout comprende anche l'elaborazione del messaggio.
- Quando si invia un messaggio con Timeout infinito la funzione aspetta al massimo 24h.
- N.B. Una sessione è in grado di gestire un messaggio alla volta, percui non è in grado di ricevere altri messaggi mentre ne sta elaborando uno.
- N.B. Nelle applicazioni online è altamente sconsigliato passare oggetti come parametri per non incorrere in conflitti di accesso concorrente alla memoria dovuti al fatto che la server session è un altro thread. Qualora venga comunque fatto viene segnalato un warning nel debug.
- N.B.Nelle applicazioni offline non è proprio ammesso passare oggetti come parametri, quindi il messaggio non viene neanche inviato segnalando un errore nel debug.
Ultima modifica: 23/03/2021 / Validità: da 9.5.4160