public QuoteInquirySubscription(
     RfqQuoteInquiry quoteInquiry,
     IEventStreamSubscriber subscriber)
 {
     Subscriber   = subscriber;
     QuoteInquiry = quoteInquiry;
 }
Esempio n. 2
0
        public Task ReadAsync(IEventStreamSubscriber <TEvent> subscriber, CancellationToken ct)
        {
            var workerTask = new Task(() => ProcessMessages(subscriber, ct), TaskCreationOptions.LongRunning);

            workerTask.Start();
            return(workerTask);
        }
        private void OnCounterToRequestPartyCommentSubscriberRemoved(IEventStreamSubscriber subscriber)
        {
            var args         = subscriber.Subscription.SubscriptionContext.Arguments.ToDictionary(cv => cv.Name, cv => cv);
            var counterParty = args["counterParty"].Value.AsString;

            var unsubscribe = false;

            lock (mx_)
            {
                HashSet <IEventStreamSubscriber> subscribers;
                if (counterToRequestPartyCommentSubscriptions_.TryGetValue(
                        counterParty,
                        out subscribers))
                {
                    unsubscribe = true;
                    subscribers.Remove(subscriber);
                    if (subscribers.Count == 0)
                    {
                        counterToRequestPartyCommentSubscriptions_.Remove(counterParty);
                    }
                }
            }

            if (unsubscribe)
            {
                bridge_.UnsubscribeForRequestPartyComments(counterParty);
            }
        }
 private void OnQuoteInquirySubscriberRemoved(IEventStreamSubscriber subscriber)
 {
     lock (mx_)
     {
         var requestId = requestsBySubscriber_[subscriber];
         requestsById_.Remove(requestId);
         requestsBySubscriber_.Remove(subscriber);
     }
 }
        // NB: all handlers intentionally don't trap any errors, let AGM handle these

        private void OnQuoteInquirySubscriberAdded(IEventStreamSubscriber subscriber)
        {
            var args                  = subscriber.Subscription.SubscriptionContext.Arguments.ToDictionary(cv => cv.Name, cv => cv);
            var requestParty          = args["requestParty"].Value.AsString;
            var counterParties        = args["counterParties"].Value.AsStringArray;
            var productName           = args["productName"].Value.AsString;
            var quantity              = args.SafeGetDouble("quantity");
            var requestExpirationDate = GetDate(args["requestExpirationDate"].Value);
            var requestId             = GenerateRequestId();

            var quoteInquiry = new RfqQuoteInquiry(
                requestId,
                requestParty,
                productName,
                null,
                quantity,
                requestExpirationDate,
                counterParties);

            lock (mx_)
            {
                // track request
                requestsById_.Add(requestId, new QuoteInquirySubscription(quoteInquiry, subscriber));
                requestsBySubscriber_.Add(subscriber, requestId);
                // do the actual work
                try
                {
                    // push SetRequestId(requestId) back to subscriber
                    subscriber.Push(cb =>
                    {
                        cb.AddValue("responseType", RfqResponseType.SetRequestId.ToString());
                        cb.AddValue("requestId", requestId);
                    });

                    // send request via the bridge
                    bridge_.SendQuoteInquiry(quoteInquiry);
                }
                catch (Exception e)
                {
                    // undo tracking
                    requestsById_.Remove(requestId);
                    requestsBySubscriber_.Remove(subscriber);

                    Logger.Error(string.Format("Failed to send {0}", quoteInquiry), e);

                    subscriber.Push(cb =>
                    {
                        cb.AddValue("responseType", RfqResponseType.Error.ToString());
                        cb.AddValue("requestId", requestId);
                        cb.AddValue("responseMessage", string.Format("Unexpected error: {0}", e.Message));
                    });
                }
            }
        }
 public void HandleSubscriber(
     IServerEventStream serverEventStream,
     IEventStreamSubscriber subscriber,
     IEventStreamBranch branch,
     object streamCookie = null)
 {
     if (subscriberAdded_ != null)
     {
         subscriberAdded_(subscriber);
     }
 }
 public void HandleSubscriberRemoved(
     IServerEventStream serverEventStream,
     IEventStreamSubscriber subscriber,
     EventStreamSubscriberRemovedContext subscriberRemovedContext,
     IEventStreamBranch branch = null,
     object streamCookie       = null)
 {
     if (subscriberRemoved_ != null)
     {
         subscriberRemoved_(subscriber);
     }
 }
Esempio n. 8
0
        private void ProcessMessages(IEventStreamSubscriber <TEvent> subscriber, CancellationToken ct)
        {
            var eventStream = new InputEventSteam <TEvent>(_path, _serializer);

            while (!ct.IsCancellationRequested)
            {
                var anEvent = eventStream.ReadEventAsync(ct).Result;
                if (anEvent != null)
                {
                    subscriber.HandleEventAsync(anEvent).Wait();
                }
            }
        }
Esempio n. 9
0
 public EventStoreBusConnector(
     IGeneralBus bus,
     IEventStoreHttpConnection conn,
     string stream,
     string name)
 {
     _conn       = conn;
     _subscriber = EventStreamSubscriber.Create(_conn, HandleJsonEvent, new MemoryBackedStreamPositionRepositoryForDebugging());
     _stream     = stream;
     _name       = name;
     _bus        = new BusAdapter(bus);
     _bus.Subscribe(this);
     _subscriber.SubscribeTo(stream);
 }
        private void OnQuoteRequestSubscriberAdded(IEventStreamSubscriber subscriber)
        {
            var args         = subscriber.Subscription.SubscriptionContext.Arguments.ToDictionary(cv => cv.Name, cv => cv);
            var counterParty = args["counterParty"].Value.AsString;

            Logger.InfoFormat("Adding quote request subscriber for counter party {0} - {1}",
                              counterParty,
                              subscriber.Subscription.Caller);

            lock (mx_)
            {
                counterPartyRequestSubscribers_.Add(counterParty, subscriber);
            }
            bridge_.SubscribeForQuoteRequests(counterParty);
        }
Esempio n. 11
0
        private void UnsubscribeHandler(
            IServerEventStream stream,
            IEventStreamSubscriber subscriber,
            EventStreamSubscriberRemovedContext context,
            IEventStreamBranch branch,
            object cookie)
        {
            IEventStreamSubscriptionRequest request = subscriber.Subscription;

            // log the subscription cancellation
            LogMessage($"Removed subscriber {request.Caller} {request.SubscriptionContext.Arguments.AsString()}");

            // remove subscriptions when cancelled
            var subscriptionItem = $"{request.Caller.ApplicationName} {request.SubscriptionContext.Arguments.AsString()}";

            DispatchAction(() => ListViewSubscriptions.Items.Remove(subscriptionItem));
        }
        private void OnQuoteRequestSubscriberRemoved(IEventStreamSubscriber subscriber)
        {
            var args         = subscriber.Subscription.SubscriptionContext.Arguments.ToDictionary(cv => cv.Name, cv => cv);
            var counterParty = args["counterParty"].Value.AsString;

            Logger.InfoFormat("Removing quote request subscriber for counter party {0} - {1}",
                              counterParty,
                              subscriber.Subscription.Caller);

            bool unsubscribe;

            lock (mx_)
            {
                unsubscribe = counterPartyRequestSubscribers_.Remove(counterParty);
            }
            if (unsubscribe)
            {
                bridge_.UnsubscribeForQuoteRequests(counterParty);
            }
        }
        private void OnCounterToRequestPartyCommentSubscriberAdded(IEventStreamSubscriber subscriber)
        {
            var args         = subscriber.Subscription.SubscriptionContext.Arguments.ToDictionary(cv => cv.Name, cv => cv);
            var counterParty = args["counterParty"].Value.AsString;

            lock (mx_)
            {
                HashSet <IEventStreamSubscriber> subscribers;
                if (!counterToRequestPartyCommentSubscriptions_.TryGetValue(
                        counterParty,
                        out subscribers))
                {
                    subscribers = new HashSet <IEventStreamSubscriber>();
                    counterToRequestPartyCommentSubscriptions_.Add(
                        counterParty,
                        subscribers);
                }
                subscribers.Add(subscriber);
            }

            bridge_.SubscribeForRequestPartyComments(counterParty);
        }
Esempio n. 14
0
        private void SubscriberHandler(IServerEventStream stream, IEventStreamSubscriber subscriber, IEventStreamBranch branch, object cookie)
        {
            IEventStreamSubscriptionRequest request = subscriber.Subscription;

            // log the subscriber
            LogMessage($"New subscriber {request.Caller} {request.SubscriptionContext.Arguments.AsString()}");

            // push an 'image' to that subscriber which is received *only* by it (last image pattern)

            // this will be received as an OOB data - see the demo subscriber code
            subscriber.Push(cb =>
                            cb.AddValue("SubscribersAsImage", _glue.AGMObjectSerializer.Serialize(stream.GetBranches()
                                                                                                  .SelectMany(b =>
                                                                                                              b.GetSubscribers().Select(sb => sb.Subscription.Caller)))));

            // e.g. keep the subscriptions in a list
            var subscriptionItem = $"{request.Caller.ApplicationName} {request.SubscriptionContext.Arguments.AsString()}";

            DispatchAction(() =>
            {
                ListViewSubscriptions.Items.Add(subscriptionItem);
                ListViewSubscriptions.ScrollIntoView(subscriptionItem);
            });
        }