<?php use Silex\Application; use FP\Larmo\Domain\Service\LarmoEvents; use FP\Larmo\Application\Event\IncomingMessageEvent; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $app->post('/registerPacket', function (Request $request) use($app) { $packetDataAsObject = json_decode($request->getContent()); $packetDataAsArray = json_decode($request->getContent(), true); $packetValidation = $app['packet_validation.service']->setSchemaFromFile($app['config.path.packet_scheme'])->setPacket($packetDataAsObject); if ($packetValidation->isValid()) { // transform messages from packet to domain collection $messages = $app['messages.factory']->fromArray($packetDataAsArray['data']); $incomingMsgEvent = new IncomingMessageEvent(); $incomingMsgEvent->setMessages($messages); $app['dispatcher']->dispatch(LarmoEvents::INCOMING_MESSAGE, $incomingMsgEvent); if ($incomingMsgEvent->hasErrors()) { return $app->json(['message' => $incomingMsgEvent->getErrors()], Response::HTTP_BAD_REQUEST); } else { return $app->json(['message' => 'OK'], Response::HTTP_OK); } } else { return $app->json(['message' => $packetValidation->getErrors()], Response::HTTP_BAD_REQUEST); } })->before(function (Request $request, Application $app) { // make sure there is a plugin that will be able to handle this request if (!$app['dispatcher']->hasListeners(LarmoEvents::INCOMING_MESSAGE)) { return $app->json(['message' => 'Hub is not yet configured to handle incoming messages.'], Response::HTTP_BAD_REQUEST); } });
/** * @param IncomingMessageEvent $event */ public function onStoreMessages(IncomingMessageEvent $event) { if (false === $this->storage->store($event->getMessages())) { $event->setError('MongoDB Write failed: ' . $this->storage->getLastErrorMsg()); } }