public void DataReceived_DataIsMessage_DispatchToSubscription() { var deserializer = new Deserializer(); var subscriptionStore = new Mock <ISubscriptionStore>(); var taskManager = new Mock <ITaskManager>(); var connectionManager = new Mock <IConnectionManager>(); var sendDataProcessor = new Mock <ISendDataProcessor>(); var payloadFactory = new Mock <IPayloadFactory>(); var subscription = new Mock <Subscription>(payloadFactory.Object, connectionManager.Object, sendDataProcessor.Object); var subscriptionObject = subscription.Object as ISubscription; subscriptionStore.Setup(s => s.TryGet(It.IsAny <string>(), out subscriptionObject)).Returns(true); var receiveDataProcessor = new ReceiveDataProcessor(deserializer, subscriptionStore.Object, taskManager.Object); var message = new TopicMessage() { Id = Guid.NewGuid(), Route = RandomGenerator.GenerateString(10), TopicName = RandomGenerator.GenerateString(10), Data = RandomGenerator.GenerateBytes(10) }; var realSerializer = new Serializer(); var serializedPayload = realSerializer.Serialize(message); var clientSessionDataReceivedEventArgs = new ClientSessionDataReceivedEventArgs { Data = serializedPayload.DataWithoutSize, Id = Guid.NewGuid() }; receiveDataProcessor.DataReceived(default, clientSessionDataReceivedEventArgs);
/// <summary> /// Will try to read the payload from BinaryDataProcessor /// if any payload is completely received then it is dispatched to OnDataReceived event /// </summary> private void ProcessReceivedData() { try { // we are calling BeginLock so that if Dispose is called on BinaryDataProcessor it waits until EndLock is called _binaryDataProcessor.BeginLock(); while (_binaryDataProcessor.TryRead(out var binaryPayload)) { try { var dataReceivedEventArgs = new ClientSessionDataReceivedEventArgs { Data = binaryPayload.DataWithoutSize, Id = Id }; OnDataReceived?.Invoke(this, dataReceivedEventArgs); } finally { binaryPayload.Dispose(); } } } finally { _binaryDataProcessor.EndLock(); } }
private void ClientDataReceived(object clientSession, ClientSessionDataReceivedEventArgs eventArgs) { try { _payloadProcessor.OnDataReceived(eventArgs.Id, eventArgs.Data); } catch (Exception e) { _logger.LogError($"An error occured while trying to dispatch messages, error: {e}"); } }
/// <inheritdoc /> public void DataReceived(object clientSessionObject, ClientSessionDataReceivedEventArgs dataReceivedEventArgs) { var data = dataReceivedEventArgs.Data; var payloadType = _deserializer.ParsePayloadType(data); switch (payloadType) { case PayloadType.Ok: OnOk(data); break; case PayloadType.Error: OnError(data); break; case PayloadType.TopicMessage: OnMessage(data); break; default: throw new InvalidOperationException( "Failed to map type to appropriate action while parsing payload"); } }
private void ClientDataReceived(object clientSession, ClientSessionDataReceivedEventArgs eventArgs) { _receiveDataProcessor.DataReceived(clientSession, eventArgs); }