|
22 | 22 |
|
23 | 23 | namespace Uecode\Bundle\QPushBundle\EventListener; |
24 | 24 |
|
| 25 | +use Psr\Log\LoggerInterface; |
25 | 26 | use Symfony\Component\HttpKernel\HttpKernel; |
26 | 27 | use Symfony\Component\HttpFoundation\Response; |
27 | 28 | use Symfony\Component\HttpKernel\Event\GetResponseEvent; |
@@ -49,7 +50,7 @@ class RequestListener |
49 | 50 | */ |
50 | 51 | public function __construct(EventDispatcherInterface $dispatcher) |
51 | 52 | { |
52 | | - $this->dispatcher = $dispatcher; |
| 53 | + $this->dispatcher = $dispatcher; |
53 | 54 | } |
54 | 55 |
|
55 | 56 | /** |
@@ -85,21 +86,16 @@ private function handleIronMqNotifications(GetResponseEvent $event) |
85 | 86 | $headers = $event->getRequest()->headers; |
86 | 87 | $messageId = $headers->get('iron-message-id'); |
87 | 88 |
|
88 | | - // We add the message in an array with Queue as the property name |
89 | | - $message = json_decode($event->getRequest()->getContent(), true); |
90 | | - |
91 | | - if (empty($message['_qpush_queue'])) { |
92 | | - return; |
| 89 | + if (null === ($message = json_decode($event->getRequest()->getContent(), true))) { |
| 90 | + throw new \InvalidArgumentException('Unable to decode JSON'); |
93 | 91 | } |
94 | 92 |
|
95 | | - $queue = $message['_qpush_queue']; |
96 | | - $metadata = [ |
| 93 | + $queue = $this->getIronMqQueueName($event, $message); |
| 94 | + $metadata = [ |
97 | 95 | 'iron-subscriber-message-id' => $headers->get('iron-subscriber-message-id'), |
98 | 96 | 'iron-subscriber-message-url' => $headers->get('iron-subscriber-message-url') |
99 | 97 | ]; |
100 | 98 |
|
101 | | - unset($message['_qpush_queue']); |
102 | | - |
103 | 99 | $notification = new Notification( |
104 | 100 | $messageId, |
105 | 101 | $message, |
@@ -174,4 +170,30 @@ private function handleSnsNotifications(GetResponseEvent $event) |
174 | 170 |
|
175 | 171 | return "SNS Subscription Confirmation Received."; |
176 | 172 | } |
| 173 | + |
| 174 | + /** |
| 175 | + * Get the name of the IronMq queue. |
| 176 | + * |
| 177 | + * @param GetResponseEvent $event |
| 178 | + * @param array $message |
| 179 | + * |
| 180 | + * @return string |
| 181 | + */ |
| 182 | + private function getIronMqQueueName(GetResponseEvent $event, array &$message) |
| 183 | + { |
| 184 | + if (array_key_exists('_qpush_queue', $message)) { |
| 185 | + return $message['_qpush_queue']; |
| 186 | + } else if (null !== ($subscriberUrl = $event->getRequest()->headers->get('iron-subscriber-message-url'))) { |
| 187 | + if (preg_match('#/queues/([a-z0-9_-]+)/messages/#i', $subscriberUrl, $matches)) { |
| 188 | + $queue = $matches[1]; |
| 189 | + if (substr($queue, 0, 6) == 'qpush_') { |
| 190 | + $queue = substr($queue, 6); |
| 191 | + } |
| 192 | + |
| 193 | + return $queue; |
| 194 | + } |
| 195 | + } |
| 196 | + |
| 197 | + throw new \RuntimeException('Unable to get queue name'); |
| 198 | + } |
177 | 199 | } |
0 commit comments