2016-03-25 22 views
1

Bir uygulama için Microsoft.Web.WebSockets kullanıyorum.IEnumerable <WebSocketHandler> 'ı WebSocketCollection' a dönüştürün

Ben kullanıcılara WebSocketCollection group; bir koleksiyon var ve biri

group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1)).Broadcast("Message"); 

hariç herkese mesaj göndermek gerekiyor Ama fıkra WebSocketCollection hariç kullanmak an IEnumerable<WebSocketHandler> olur ve sonra ben Yayın yöntemi kullanmak olamaz.

Başka herhangi bir yaklaşım yardımcı olabilir.

+0

varacak bu iş '((WebSocketCollection) group.Except (group.Where (r => ((MicrosoftWebSockets) r) .user_id == 1))) Broadcast ("İleti") ' –

+0

Bu hatayı aldığımda hata alıyorum 'Microsoft'un adını yazmak için' d__72'1 [Microsoft.Web.WebSockets.WebSocketHandler] yazın .Web.WebSockets.WebSocketCollection'. – deepakgates

cevap

3

Broadcast yöntemi, WebSocketCollection sınıfında tanımlanmıştır. WebSocketCollection üzerinde bir LINQ sorgusu uygularken, Broadcast yöntemine sahip olmayan bir IEnumerable<WebSocketHandler> olsun.

Yeni WebSocketCollection oluşturup sonra böyle Add yöntemi kullanarak öğeleri tek tek ekleyebilirsiniz: Böyle bir uzantısı yöntem haline bu mantığı sarabilirdiniz

var handlers = group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1)); 

var collection = new WebSocketCollection(); 

foreach(var item in handlers) 
{ 
    collection.Add(item); 
} 

collection.Broadcast("Message"); 

:

public static class ExtentionMethods 
{ 
    public static WebSocketCollection ToCollection(this IEnumerable<WebSocketHandler> handlers) 
    { 
     var collection = new WebSocketCollection(); 

     foreach (var item in handlers) 
     { 
      collection.Add(item); 
     } 

     return collection; 
    } 
} 

Ve bu şekilde kullanın:

group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1)) 
.ToCollection() 
.Broadcast("Message"); 

w ah, senin LINQ sorgusu böyle koşulunu olumsuzlaştırılmasıyla daha iyi bir şekilde yapılabilir:

group.Where(r=> !(((MicrosoftWebSockets)r).user_id == 1)) 
.ToCollection() 
.Broadcast("Message"); 
+0

Cevabınız için teşekkürler, öğeleri yinelemeyi düşündüm ama büyük gruplarda yinelenirken performansı etkilemez olay her tetiklendiğinde – deepakgates

+0

Performans etkisini ölçmelisiniz. Muhtemelen ihmal edilebilir olacak. –

+1

Yani bir WebSocketCollection yapmak yerine ben de sadece iletinin içine kendi kendine döngü içinde gönderebilir miyim? – deepakgates

İlgili konular