Пример #1
0
        private void OnDeclareQueue(Guid clientId, TopicDeclare topicDeclare)
        {
            _logger.LogInformation($"declaring topic: {topicDeclare.Name}");

            // if queue exists
            if (_topicStore.TryGetValue(topicDeclare.Name, out var queue))
            {
                // if queue route match
                if (queue.Route == topicDeclare.Route)
                {
                    SendReceivedPayloadOk(clientId, topicDeclare.Id);
                }
                else
                {
                    SendReceivePayloadError(clientId, topicDeclare.Id, "Queue name already exists");
                }

                return;
            }

            // create new queue
            _topicStore.Add(topicDeclare.Name, topicDeclare.Route);

            SendReceivedPayloadOk(clientId, topicDeclare.Id);
        }
        public SerializedPayload NewDeclareTopic(string name, string route)
        {
            var payload = new TopicDeclare
            {
                Id    = Guid.NewGuid(),
                Name  = name,
                Route = route
            };

            return(_serializer.Serialize(payload));
        }
        public void Serialization_TopicDeclare_MatchResults()
        {
            var queue = new TopicDeclare
            {
                Id    = Guid.NewGuid(),
                Name  = RandomGenerator.GenerateString(10),
                Route = RandomGenerator.GenerateString(10)
            };

            var b = _serializer.Serialize(queue);

            var result = _deserializer.ToTopicDeclare(b.DataWithoutSize);

            Assert.Equal(queue.Id, result.Id);
            Assert.Equal(queue.Name, result.Name);
            Assert.Equal(queue.Route, result.Route);
        }
        public SerializedPayload Serialize(TopicDeclare topicDeclare)
        {
            var binaryWriter = ObjectPool.Shared.Rent <BinaryProtocolWriter>();

            try
            {
                return(binaryWriter
                       .WriteType(PayloadType.TopicDeclare)
                       .WriteId(topicDeclare.Id)
                       .WriteStr(topicDeclare.Name)
                       .WriteStr(topicDeclare.Route)
                       .ToSerializedPayload());
            }
            finally
            {
                ObjectPool.Shared.Return(binaryWriter);
            }
        }