Beispiel #1
0
 protected Yield ReplaceSubscribeSet(DreamContext context, DreamMessage request, Result <DreamMessage> response)
 {
     try {
         string setId = context.GetParam("id");
         _log.DebugFormat("Updating set {0}", setId);
         if (!string.IsNullOrEmpty(request.Headers.DreamEventId))
         {
             _log.DebugFormat("'{0}' update is event: {1} - {2}", setId, request.Headers.DreamEventChannel, request.Headers.DreamEventId);
         }
         XDoc subscriptionDocument = request.ToDocument();
         PubSubSubscriptionSet set = _dispatcher.ReplaceSet(setId, subscriptionDocument);
         if (set != null)
         {
             long?version = subscriptionDocument["@version"].AsLong;
             if (version.HasValue && version.Value <= set.Version)
             {
                 _log.DebugFormat("set not modified: {0}", setId);
                 response.Return(DreamMessage.NotModified());
             }
             else
             {
                 if (version.HasValue)
                 {
                     _log.DebugFormat("Updating set '{0}' from version {1} to {2}", setId, set.Version, version);
                 }
                 else
                 {
                     _log.DebugFormat("Updating set '{0}'", setId);
                 }
                 response.Return(DreamMessage.Ok());
             }
         }
         else
         {
             _log.DebugFormat("no such set: {0}", setId);
             response.Return(DreamMessage.NotFound("There is no subscription set at this location"));
         }
     } catch (ArgumentException e) {
         response.Return(DreamMessage.Forbidden(e.Message));
     }
     yield break;
 }