2016-04-05 16 views
0

Push keskin sürüm PushSharp 4.0.4 kullanıyorum.Sıra kayıtları nasıl gruplandırılır ve farklı bir iş parçacığında yürütülür ve beklemeye devam eder?

Bir windows uygulamasında kullanıyorum.

üç ana yöntem

1- BroadCastToAll

2- BrodcatsToIOS

3- BrodcatsToAndriod

bir düğme calld gönderme sahip bulunmaktadır. Düğmenin tıklama olayında.

BroadCastToAll işlevini çağırıyorum. İşte

private void btnSend_Click(object sender, EventArgs e) 
{ 
    var url = "www.mohammad-jouhari.com" 
    var promotion = new Promotion(); 
    BroadCastToAll(promotion, url); 
} 

İşte BrodcastToAndriod Fonksiyon

public void BroadCastToAndriod(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs) 
{ 
    if (deviceCatalogs.Count == 0) 
     return; 
     lock (_lock)// Added this lock because there is a potential chance that PushSharp callback execute during registering devices 
     { 
      QueueAllGcmDevicesForNotification(promotion, url, deviceCatalogs, logsMessage); 
     } 
} 

QueueAllAppleDevic olan BrodcastToAll Fonksiyonu İşte

public void BroadCastToAll(Promotion promotion, string url) 
{ 
    var deviceCatalogs = GetDeviceCatalog(); 
    BroadCastToIOS(promotion, url, deviceCatalogs.Where(d => d.OS == "IOS").ToList()); 
    BroadCastToAndriod(promotion, url, deviceCatalogs.Where(d => d.OS == "Android").ToList()); 
} 

olan BrodcastToIOS Fonksiyonu İşte

public void BroadCastToIOS(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs) 
{ 
    if (deviceCatalogs.Count == 0) 
     return; 
     lock (_lock)// Added this lock because there is a potential chance that PushSharp callback execute during registering devices 
     { 
      QueueAllAppleDevicesForNotification(promotion, url, deviceCatalogs, logsMessage); 
     } 
} 

olduğu Ben gönder düğmesine tıkladığınızda burada

private void QueueAllAppleDevicesForNotification(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs) 
     { 
      var apnsServerEnviroment = UseProductionCertificate ? ApnsConfiguration.ApnsServerEnvironment.Production : ApnsConfiguration.ApnsServerEnvironment.Sandbox; 
      var fileService = new FileService(); 
      var filePath = Application.StartupPath+ "/Certifcates/" + (UseProductionCertificate ? "prod.p12" : "dev.p12"); 
      var buffer = fileService.GetFileBytes(filePath); 
      var config = new ApnsConfiguration(apnsServerEnviroment, buffer, APPLE_CERTIFICATE_PWD); 
      apnsServiceBroker = new ApnsServiceBroker(config); 
      apnsServiceBroker.OnNotificationFailed += (notification, aggregateEx) => { 
       aggregateEx.Handle (ex => { 
        // Log the Resposne 
       }); 

      }; 
      apnsServiceBroker.OnNotificationSucceeded += (notification) => { 
        // Log The Response 
      }; 
      apnsServiceBroker.Start(); 
      foreach (var deviceToken in deviceCatalogs) { 
       var title = GetTitle(promotion, deviceToken); 
       //title += DateTime.UtcNow.TimeOfDay.ToString(); 
       var NotificationPayLoadObject = new NotificationPayLoadObjectApple(); 
       NotificationPayLoadObject.aps.alert = title; 
       NotificationPayLoadObject.aps.badge = 0; 
       NotificationPayLoadObject.aps.sound = "default"; 
       NotificationPayLoadObject.url = url; 
       var payLoad = JObject.Parse(JsonConvert.SerializeObject(NotificationPayLoadObject)); 
       apnsServiceBroker.QueueNotification(new ApnsNotification 
       { 
        Tag = this, 
        DeviceToken = deviceToken.UniqueID, 
        Payload = payLoad 
       }); 
      } 
      var fbs = new FeedbackService(config); 
      fbs.FeedbackReceived += (string deviceToken, DateTime timestamp) => 
      { 
       // This Token is no longer avaialble in APNS 
       new DeviceCatalogService().DeleteExpiredIosDevice(deviceToken); 
      }; 
      fbs.Check(); 

      apnsServiceBroker.Stop(); 
     } 

Ve esForNotification fonksiyonu

Şimdi QueueAllGcmDevicesForNotification

private void QueueAllGcmDevicesForNotification(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs,) 
    { 
     var config = new GcmConfiguration(ANDROID_SENDER_ID, ANDROID_SENDER_AUTH_TOKEN, ANDROID_APPLICATION_ID_PACKAGE_NAME); 
     gcmServiceBroker = new GcmServiceBroker(config); 
     gcmServiceBroker.OnNotificationFailed += (notification, aggregateEx) => { 
      aggregateEx.Handle (ex => { 
       // Log Response 
       return true; 
      }); 
     }; 

     gcmServiceBroker.OnNotificationSucceeded += (notification) => { 
      // Log Response 
     }; 
     var title = GetTitle(shopexPromotion); 
     gcmServiceBroker.Start(); 
     foreach (var regId in deviceCatalogs) { 
      var NotificationPayLoadObject = new NotificationPayLoadObjectAndriod(url, title, "7", promotion.ImageUrl); 
      var payLoad = JObject.Parse(JsonConvert.SerializeObject(NotificationPayLoadObject)); 
      gcmServiceBroker.QueueNotification(new GcmNotification 
      { 
       RegistrationIds = new List<string> { 
        regId.UniqueID 
       }, 
       Data = payLoad 
      }); 
     } 
     gcmServiceBroker.Stop(); 

    } 

olduğunu. Etkinlik çalışmaya başlayacaktır.

BrodcastToAll işlevi çağrılacaktır. BrodcastToIOS cihazlarını önce ve sonra BrodcatsToAndriod'u arıyorum.

BrodcastToIOS'u arayabilmemin ve tüm aygıtların Kuyruğa girmesini bekleyene kadar bekleyebilmenin ve bildirimin kitaplık tarafından itildiğini ve geri arama olaylarının tam olarak başlatılmasının ardından BrodcastToAndriod Fucntion'u çalıştırmaya başladığım herhangi bir yol var mı?

Hangi kod satırlarını eklemem gerekiyor?

Ayrıca Kuyruğa alınacak cihaz sayısını toplu olarak ayarlamanın bir yolu var mı? Örneğin,

.

bize ben 1000 Aygıtlar

500 IOS

500 Andriod

Ben IOS için 100, 100100100100 sıraya Can ve

bitince Andriod için 100,100,100,100,100 sıraya var diyelim.

Herhangi bir Yardım için teşekkür ederiz.

Teşekkürler.

cevap

0

Varsayılan olarak broker.Stop() numaralı çağrı, sıradaki tüm bildirimler işlenene kadar engellenir.

+0

Bunu kullanmak ve o – user123456

+0

https://github.com/Redth/PushSharp/blob/master/PushSharp.Core/ServiceBroker.cs#L70-L95 O engelliyor ... – Redth

+0

Tamam engellemediğinden Task.WaitAll (all) kullanıyor; Kodumda kullanmam gerekiyor mu? – user123456

İlgili konular