Créer une application de conversation de bureau et mobile en 30 minutes
Nous allons maintenant créer quelques classes ViewModel très basiques qui serviront à gérer la connexion entre notre composant RadChat et l'application de serveur SimpleHub . Commençons par un HubViewModel :
utilisant Microsoft.AspNet.SignalR.Client;
utilisant Telerik.Windows.Controls;
espace de noms ClientWPF.ViewModels
{[19659007]
HubViewModel de classe publique: ViewModelBase
{
Proxy protégé IHubProxy {get; ensemble; }
protected HubConnection Connection {get; ensemble; }
HubViewModel public ()
{
{
this.Connection = new HubConnection (url);
this.Proxy = Connection.CreateHubProxy ("SampleHub");
this.Connection.Start (). Wait ();
}
}
}
La chose importante à noter ici est la création d'un objet HubConnection en utilisant l'URL générée après l'exécution du application serveur dans IIS .
classe publique ChatViewModel: HubViewModel
{
private TextMessage currentMessage;
public Tex tMessage CurrentMessage
{
get {return currentMessage; }
set
{
if (valeur! = Null || valeur! = CurrentMessage)
{
currentMessage = valeur ;
OnPropertyChanged ("CurrentMessage");
}
}
chaîne privée userName; [19659009]
chaîne publique UserName
{
get {return userName; }
set
{
if (valeur! = Null || valeur! = UserName)
{
userName = value ;
OnPropertyChanged ("UserName");
}
}
private Author currentAuthor; [19659009]
public Author CurrentAuthor
{
get {return currentAuthor; }
set
{
if (valeur! = Null || valeur! = CurrentAuthor)
{
currentAuthor = valeur ;
OnPropertyChanged ("CurrentAuthor");
}
private ObservableCollection <
TextMessage
> allMessages;
public ObservableCollection <
TextMessage
> AllMessages
{
get {return allMessages; }
set
{
if (valeur! = Null || valeur! = AllMessages)
{
allMessages = valeur ;
OnPropertyChanged ("AllMessages");
}
}
public ChatViewModel (string userName)
{
this.UserName = userName;
this.CurrentAuthor = new Author (this.UserName);
this.AllMessages = new ObservableCollection <
TextMessage
> ();
// Appelle la méthode Register sur le serveur
this.Proxy.Invoke ("Register", this.UserName);
// Abonne à la méthode broadcastMessage sur le serveur.
// La méthode OnBroadCastMessage sera déclenchée à chaque appel de la méthode Send sur le serveur.
this.Proxy.On ("broadcastMessage", (chaîne de, chaîne message) => this.OnBroadCastMessage (from, message));
}
void interne OnBroadCastMessage (chaîne de, message de chaîne)
{
App.Current.Dispatcher.BeginInvoke ((action) (() =>
{
this.AllMessages.Add (new TextMessage (new Author (from), message));
}));
}
void interne SendCurrentMessage ()
{
if (! String.IsNullOrEmpty ((this.CurrentMessage as TextMessage) .Text)) [19659009]
{
// Appelle la méthode d'envoi sur le serveur, qui à son tour appelle le message broadcastMessage de tous les clients.
this.Proxy.Invoke ("Envoyer", this.UserName, this.CurrentMessage.Text);
Source link