コード例 #1
0
        public MqttPacketAwaiter <TResponsePacket> AddAwaiter <TResponsePacket>(ushort packetIdentifier) where TResponsePacket : MqttBasePacket
        {
            var awaiter = new MqttPacketAwaiter <TResponsePacket>(packetIdentifier, this);

            lock (_awaiters)
            {
                _awaiters.Add(awaiter);
            }

            return(awaiter);
        }
コード例 #2
0
        public MqttPacketAwaiter <TResponsePacket> AddAwaiter <TResponsePacket>(ushort?identifier) where TResponsePacket : MqttBasePacket
        {
            if (!identifier.HasValue)
            {
                identifier = 0;
            }

            var awaiter = new MqttPacketAwaiter <TResponsePacket>(identifier, this);

            var key = new Tuple <ushort, Type>(identifier.Value, typeof(TResponsePacket));

            if (!_awaiters.TryAdd(key, awaiter))
            {
                throw new InvalidOperationException($"The packet dispatcher already has an awaiter for packet of type '{key.Item2.Name}' with identifier {key.Item1}.");
            }

            return(awaiter);
        }