public QuoteInquirySubscription( RfqQuoteInquiry quoteInquiry, IEventStreamSubscriber subscriber) { Subscriber = subscriber; QuoteInquiry = quoteInquiry; }
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); } }
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(); } } }
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); }
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); }
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); }); }