/** * Create an EventMessageBundle from JSON data * * @param array $_jsonData * * @return EventMessageBundle */ public static function fromJson($_jsonData) { $eventMessageBundle = new phpMyWave_EventMessageBundle(); // Collect and add events. if (isset($_jsonData['events']['list']) && is_array($_jsonData['events']['list'])) { $events = array(); foreach ($_jsonData['events']['list'] as $eventJSON) { if (isset($eventJSON['type'])) { // Default event values. $eventType = strtoupper((string) $eventJSON['type']); // Validate event type. $eventType = strtoupper((string) $eventJSON['type']); if (!in_array($eventType, phpMyWave_Enum_EventType::values())) { throw new Exception('Invalid type "' . $eventType . '" detected'); } // Define event properties. $eventNamespace = phpMyWave_Enum_EventType::$namespaceMapping[$eventType]; $eventWavelet = (object) array('waveId' => $_jsonData['wavelet']['waveId'], 'waveletId' => $_jsonData['wavelet']['waveletId']); $eventBundle = $eventMessageBundle; $eventModifiedBy = isset($eventJSON['modifiedBy']) ? (string) $eventJSON['modifiedBy'] : null; $eventTimestamp = isset($eventJSON['timestamp']) ? (int) $eventJSON['timestamp'] : null; $eventBlipId = isset($eventJSON['properties']['map']['blipId']) ? (string) $eventJSON['properties']['map']['blipId'] : null; // Create event instance. $events[] = new $eventNamespace($eventType, $eventWavelet, $eventBundle, $eventModifiedBy, $eventTimestamp, $eventBlipId); } } $eventMessageBundle->setEvents($events); } return $eventMessageBundle; }
/** * Processes the incoming event bundle. * * @param phpMyWave_EventMessageBundle $eventMessageBundle */ public function processEvents(phpMyWave_EventMessageBundle $eventMessageBundle) { foreach ($eventMessageBundle->getEvents() as $event) { if (method_exists($this, phpMyWave_Enum_EventType::$methodMapping[$event->getType()])) { call_user_func(array($this, phpMyWave_Enum_EventType::$methodMapping[$event->getType()]), $event); } } }
public function handle() { $eventMessageBundle = phpMyWave_EventMessageBundle::fromJson($this->getJSONRequest()); foreach ($this->_robots as $robotReflection) { // Initialize robot. $robotNamespace = $robotReflection->getName(); $robotInstance = new $robotNamespace(); // Process events. $robotInstance->processEvents($eventMessageBundle); } }