English
Instant Developer Foundation Documentazione
  • Reference Librerie
  • Libreria Client
  • Libreria Applicazione
  • Server Sessions

Send Session Message

funzione copia link

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

IDArray parametri = new()
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

Vedi Anche

  • On Session Message (evento)
  • ID Array

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum