Õpin hetkel Silverlight 4 Beta eksamiks ning sellega seoses sirvin MSDN-is dokumentatsiooni, millest ma avastasin ühe põneva funktsionaalsuse – ühes masinas töötavate Silverlight rakenduste omavaheline suhtlus. Seda võiks näiteks kasutada siis, kui veebilehe navigatsioon on loodud mitme Silverlight rakenduse abil – ekraani ülemises osas asub peamenüü , ekraani paremas servas asub alammenüü ning nende vahel tavaline HTML veebileht.
Selleks, et peamenüü saaks alammenüüle teadaanda, millist sisu näidata, milline nupp allajoonida saadab esimene rakendus teisele sõnumi.
Sõnumite kasutamiseks Silverlight rakenduses on vaja viidada System.Windows.Messaging nimeruumile.
Saatjarakendus peab looma instansi LocalMessageSender klassist ning vastuvõtjarakendus instantsi klassist LocalMessageReceiver.
Sõnumisaatja
Kõigepealt loome LocalMessageSender klassimuutuja.
Järgmisena on meil vaja see initsialiseerida ning lisada sündmushaldur, et me teaks, kas sõnumisaatmine õnnestus.
Initsialiseerimise juures on olulised kaks asja – esiteks vastuvõtja nimi – siin näites “receiver” ning nime skoop – kas sõnumeid saadetakse ainult samas domeenis asuvatele rakendustele või ükskõik kuhu – LocalMessageSender.Global.
Sündmusehalduris lihtsalt kuvame saadud vastuse ekraanile tekstikasti nimega resultText.
Sõnumisaatmine ise on väga lihtne:
Sõnumivastuvõtja
Sõnumite vastuvõtmiseks on meil vaja instansi LocalMessageReceiver klassist, peame sellele instantsile panema nime. Kasutame siin sama nime “receiver”, millele viitasime sõnumisaatjas. Nimevalik on siinkohal väga oluline, ühes arvutis ei saa olla mitut ühe nimega LocalMessageReceiver klassi instantsi, kui nii juhtub, kuvatakse ekraanile veateade, et see nimi on võetud.
Kui sõnumivastuvõtja on initsialiseeritud on vaja vastuvõtja sõnumeid kuulama panna
ja siis ei jää muud üle kui oodata sõnumeid MessageReceived sündmusehalduris.
Sõnum vastuvõetud sündmusehalduris saame ise määrata, milline vastus esialgsele sõnumisaatjale saadetakse, selleks väärtustame muutuja e.Response.
Ja nii lihtne see ongi. Tuleb vaid tähelepanna, et saadetavad sõnumid ei ületaks 40kb-i aga ma arvan, et see väga keeruline ei ole, sest antud tehnoloogia on siiski mõeldud mingisuguste staatus-teadete saatmiseks-vastuvõtmiseks, mitte pikemate dokumentide jagamiseks.
Lähemalt dokumentatsioonis:
http://msdn.microsoft.com/en-us/library/dd833075(v=VS.95).aspx