2017-02-10 2 views
0

J'essaie de répliquer un comportement comme un navigateur client mais en C# (raison de performance). Ce que j'essaie de réaliser, c'est que pour chaque nouvel événement reçu, mon programme devrait déclencher le côté serveur (Hub) qui informerait alors le client. Plutôt que d'avoir une boucle while qui frapperait la méthode hub à chaque fois, même s'il n'y a pas de messages, est-il possible de la traiter comme un trigger/détection de sorte qu'une fois le message détecté, exécuter la méthode Hub? Espérons que cela fait sensEvénements déclencheurs Client SignalR

instantané du code client ci-dessous:

IHubProxy _hub; 
string url = @"http://localhost:8080/"; 
var connection = new HubConnection(url); 
_hub = connection.CreateHubProxy("PersonHub"); 
connection.Start().Wait(); 

//client side method 
_hub.On("checkedIn", x => Console.WriteLine(x)); 

Console.WriteLine("Enter Person Name"); 
var answer = Console.ReadLine(); 
while (true) // Better way doing this? trigger or detect new message? 
{ 
    //server side method 
    _hub.Invoke("GetByName", answer).Wait(); 
} 

Snapshot code Hub ci-dessous:

[HubName("PersonHub")] 
public class PersonHub: Hub 
{ 
    public Person GetByName(string name) 
    { 
     //logic and etc ... 

     Clients.All.checkedIn(name); 
    } 
} 

En définissant la boucle while true Cela signifie que ce sera toujours appeler le serveur méthode latérale (méthode Hub) que je ne veux pas. Si theres de nouveaux événements déclenchés alors il devrait frapper la méthode de hub. Y at-il un moyen d'écouter en quelque sorte le nouveau message mais de ne pas l'exécuter si aucun message n'a été détecté?

Répondre

0

Une solution possible est:

string line; 
    while ((line = Console.ReadLine()) != "exit") 
    { 
     _hub.Invoke("GetByName", line).Wait(); 
    }