2016-03-23 30 views
0

Websockets aracılığıyla sunucuya iletişim kuran bir windows uygulamasına sahibim, istemcide iletişim için server ve websockets4net olarak meteor sunucusunu kullanıyorum. Sunucuya bazı mesajlar gönderirken (json formatı). sunucusu, websocket'e farklı düzende yanıt verecektir. Sunucuya gönderilen mesajları takip edebilirim. C# içinde tüketici kodu üretebilir, burada messageid ve callback'i sözlük 'da saklayabilir ve yanıt alındığında geri arama yapabiliriz.Websockets kullanarak eşzamansız olay yürütme

//<int, Action>(<messageid,Callback delegate>) 
ConcurrentDictionary<int, Action> serverResponseCollection = new ConcurrentDictionary<int, Action>(); 

public send(JObject message,Action Callback) 
{ 
     socket.Send(message); 
     serverResponseCollection.Add(message.id,Callback); 
} 

void socket_MessageReceived(object sender, MessageReceivedEventArgs e) 
{ 
    //server response contains message id 
    //get callback function and execute 
    var callbackObj = serverResponseCollection[e.id]; 
    Callback(); 
} 
+0

Neden farklı geri çağrıları sunucuya gönderdiğiniz her istek ile ilişkilendirmek istersiniz? – gaurawerma

+0

evet, farklı sunucu yöntemlerini çağırıyorum, farklı yanıt verebilir, bağımsız olarak ele alınabilir. –

+0

client.Execute ("ConfirmOrder", geri arama) bölümünde ne yaptığınızı bana gösterebilir misiniz? – gaurawerma

cevap

0

Sen json nesnesine "Yöntem" adlı bir alan eklemek ve bir istek mesajı oluştururken kullandığınız operasyondaki adına değerini ayarlayabilirsiniz.

message.Add("Method", "GetUser"); 

ayrıca istemci istekte bulunmuştur aynı değere sahip cevaben "Yöntem" alanını katacak vermektedir.

Ve sonra yanıt işleyicinizde, hangi işlemin gerçekleştirmeniz gerektiğini öğrenmek için Yöntem alanının değerini ayrıştırabilirsiniz. Ayrıca, mesaj kimliklerini geri aramalarla eşleştirmekten de kurtulacaksınız.

+0

Doğru ama benim uygulama çok iş parçacıklı, birçok iş parçacığı aynı sunucu yöntemlerini çağırabilir ve yanıt farklı olacak, bu senaryoda yanıtı işleyemiyor. –

+0

Ardından sorunuz eksik. Önce değiştirmelisin. – gaurawerma