public MqttPacketAwaiter <TResponsePacket> AddAwaiter <TResponsePacket>(ushort packetIdentifier) where TResponsePacket : MqttBasePacket { var awaiter = new MqttPacketAwaiter <TResponsePacket>(packetIdentifier, this); lock (_awaiters) { _awaiters.Add(awaiter); } return(awaiter); }
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); }