Ejemplo n.º 1
0
        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);
Ejemplo n.º 2
0
        /// <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();
            }
        }
Ejemplo n.º 3
0
 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}");
     }
 }
Ejemplo n.º 4
0
        /// <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);
 }