/** * Run tasks * * If no tasks are subscribed to, this does nothing * * @param string $event Event to run * @param mixed $args, One or many arguments to pass to the callback function * @throws PubSubException */ public static function publish($event, ...$args) { $pubSub = PubSub::getInstance(); if (empty($event) || !is_string($event)) { throw new PubSubException('Event name must be a string'); } if (!isset($pubSub->tasks[$event])) { return; } ksort($pubSub->tasks[$event]); foreach ($pubSub->tasks[$event] as $values) { foreach ($values as $callback) { $callback(...$args); } } }
public static function getProductInformation($requester, $body) { $body = str_replace(' ', '', $body); $url = self::$flipkartSearchURL . $body . '&resultCount=1'; $searchJson = self::getURLContent($url, self::$fKAffiliateId, self::$fKAffiliateToken); echo $searchJson; $json = json_decode($searchJson, true); $productObj = $json['productInfoList'][0]['productBaseInfo']['productAttributes']; echo $json['productInfoList'][0]['productBaseInfo']['productAttributes']['title']; $newLine = '\\n'; $fkMRP = "MRP: " . $productObj['maximumRetailPrice']['amount']; $fkSellngPrice = "Selling Price: " . $productObj['sellingPrice']['amount']; $fkProductLink = $productObj['productUrl']; $fkTittle = $productObj['title']; $fkPriceProduct = "{$fkTittle}\n{$fkMRP}\n{$fkSellngPrice}\n{$fkProductLink}"; MessaggingController::sendMessage($requester, $fkPriceProduct); PubSub::publish(GenieConstants::$SERVICE_REQUEST_COMPLETE, $requester); }
public static function getMovieReview($requester, $movieTitle) { echo "\n\n\n\n\n"; var_dump($movieTitle); echo "\n\n\n\n\n"; $movieTitle = str_replace(' ', '+', $movieTitle); $url = self::$omdbURL . $movieTitle . '&y=&plot=short&r=json'; $movieReview = file_get_contents($url); if ($movieReview) { $json = json_decode($movieReview, true); if ($json['Response'] == 'false') { MessaggingController::sendMessage($requester, $json['Error']); } else { $response = "Tittle: " . $json['Title'] . "\n" . "imdb Rating: " . $json['imdbRating'] . "\n" . "Year: " . $json['Year'] . "\n" . "Released: " . $json['Released'] . "\n" . "Actors: " . $json['Actors'] . "\n" . "Plot: " . $json['Plot'] . "\n"; MessaggingController::sendMessage($requester, $response); } } else { MessaggingController::sendMessage($requester, GenieConstants::$SERVICE_UNAVAILABLE); } PubSub::publish(GenieConstants::$SERVICE_REQUEST_COMPLETE, $requester); }
public static function exitMenu($requester) { PubSub::publish(GenieConstants::$SERVICE_REQUEST_COMPLETE, $requester); }
public static function getLiveRunningStatus($requester, $request, $isDetailedStatusRequired = false) { $requestParams = explode(",", $request); $trainNumber = $requestParams[0]; $doj = $requestParams[1]; $date = DateTime::createFromFormat('d/m/Y', $doj); $doj = date_format($date, 'Ymd'); $url = self::$liveStatusURL . $trainNumber . '/doj/' . $doj . '/apikey/' . self::$railwayApikey . '/'; echo "************\n\n\n\n" . $url; $liveStatus = file_get_contents($url); $json = json_decode($liveStatus, true); if ($json['total'] == 0) { echo $json; $invalidDataMsg = "Invalid train number or journey date"; MessaggingController::sendMessage($requester, $invalidDataMsg); } else { if ($liveStatus) { // if(!$isDetailedStatusRequired) // { // $response = $json['position']; // MessaggingController::sendMessage($requester, $response); // } // else // { $response = "Current Status \n"; for ($count = 0; $count < $json['total']; $count++) { if ($json['route'][$count + 1]['status'] == '-') { $response .= "Station: " . $json['route'][$count]['station'] . "\nScheduled Dep: " . $json['route'][$count]['schdep'] . "\nActual Dep: " . $json['route'][$count]['actdep'] . "\nStatus: " . $json['route'][$count]['status']; break; } } // $response+=$json['position']; MessaggingController::sendMessage($requester, $response); //} } else { MessaggingController::sendMessage($requester, GenieConstants::$SERVICE_UNAVAILABLE); } } PubSub::publish(GenieConstants::$SERVICE_REQUEST_COMPLETE, $requester); }
if (is_callable(self::$events[$name][0])) { return call_user_func_array(self::$events[$name][0], $params); } else { return false; } } // Loop through all the events and call them foreach (self::$events[$name] as $event) { if (is_callable($event)) { call_user_func_array($event, $params); } } } public static function unsubscribe($name) { if (!empty(self::$events[$name])) { unset(self::$events[$name]); } } } // Basic usage PubSub::subscribe('beforeSave', function ($helo) { echo $helo; echo 'PubSub::beforeSave'; }); PubSub::subscribe('afterSave', function () { echo 'PubSub::afterSave'; }); PubSub::publish('beforeSave', "Helo"); PubSub::unsubscribe('beforeSave');
public static function getWeatherInformation($requester, $body) { PubSub::publish(GenieConstants::$SERVICE_REQUEST_COMPLETE, $requester); }
function onMessage($mynumber, $from, $id, $type, $time, $name, $body) { echo $from; echo $id; echo $type; addMessage($from, GenieConstants::$GENIE, $body); PubSub::publish('message_received', $mynumber, $from, $id, $type, $time, $name, $body); }
<?php require_once __DIR__ . "/../../src/utils/PubSub.php"; $channel = new PubSub(__DIR__ . "/test.channel"); //$channel->subscribe(); $data = $channel->wait(); error_log("got data: " . print_r($data, TRUE)); print_r($data);
<?php //@see https://github.com/reactphp/event-loop $runloop = null; use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; require __DIR__ . '/Ratchet/vendor/autoload.php'; require __DIR__ . '/../index.php'; require __DIR__ . '/../application/controllers/pubsub.php'; $app = new Ratchet\App('localhost', 9090); $app->route('/pubsub', PubSub::instance('WebSocket'), array('*')); $app->run();
/** * Removes a callback for the given $event * @param string $event * @param callback $callback */ public static function unsubscribe($event = null, $callback = null) { if (null === $event) { self::$events = array(); return; } if (!isset(self::$events[$event])) { return; } if (null === $callback) { unset(self::$events[$event]); return; } $id = self::getCallbackHash($callback); // remove all callbacks for specific event unset(self::$events[$event][$id]); }
static function handleMessageReceived($mynumber, $from, $id, $type, $time, $name, $body) { $number = ExtractNumber($from); $contact = getUserInfo($number); if (!$contact) { addContact($number, $name); $contact = getUserInfo($number); $main_menu = GenieConstants::searchElement(GenieConstants::$MAIN_MENU_CONTEXT, GenieConstants::$REGISTRATION_MENU_CONTEXT, 'subMenu'); setMessageContext($main_menu, NULL, $contact['phone']); } //Handle ShortCut in request $requestArray = $data = preg_split('/\\s+/', $body); if ($requestArray[0][0] == '#') { self::handleShortCuts($contact, $requestArray); return; } $context = getMessageContext($number); $callBackFunction = 'initializeService'; if ($context['main_menu'] == -1) { self::handleGeneralConversation($body, $context, $contact); return; } if ($context['main_menu'] == 0) { if (GenieConstants::searchElement(GenieConstants::$MAIN_MENU_CONTEXT, $body, 'id') != NULL) { updateMessageContext($body, NULL, $contact['phone']); PubSub::publish(GenieConstants::$MAIN_MENU_CONTEXT[$body]->menuItem, $callBackFunction, $contact); } else { MessaggingController::sendMessage($contact, GenieConstants::$INVALID_SERVICE); MessaggingController::sendMessage($contact, GenieConstants::$MAIN_MENU_STRING); } return; } if ($context['main_menu'] != 0 && $context['main_menu'] != 8 && $context['sub_menu'] == NULL) { $subMenuKey = GenieConstants::searchElement(GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->subMenu, $body, 'id'); $SubMenuDict = GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->subMenu; if ($subMenuKey != NULL) { updateMessageContext($context['main_menu'], $body, $contact['phone']); $callBackFunction = $SubMenuDict[$subMenuKey]->callBackMethod; PubSub::publish(GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->menuItem, $callBackFunction, $contact); } else { MessaggingController::sendMessage($contact, GenieConstants::$INVALID_SERVICE); PubSub::publish(GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->menuItem, $callBackFunction, $contact); } return; } else { if ($context['main_menu'] != 0 && $context['main_menu'] != 8 && $context['sub_menu'] != NULL) { $SubMenuDict = GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->subMenu; $callBackFunction = $SubMenuDict[$context['sub_menu']]->requestServer; PubSub::publish(GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->menuItem, $callBackFunction, $contact, $body); return; } else { if ($context['sub_menu'] != NULL) { $callBackFunction = GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->subMenu[$context['sub_menu']]->callBackMethod; } else { if (GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->callBackMethod != NULL) { $callBackFunction = GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->callBackMethod; } } } } PubSub::publish(GenieConstants::$MAIN_MENU_CONTEXT[$context['main_menu']]->menuItem, $callBackFunction, $contact, $body); }
<?php require_once __DIR__ . "/../../src/utils/PubSub.php"; $channel = new PubSub(__DIR__ . "/test.channel"); $channel->publish(array("id" => "10"));
<?php include_once '../dbManager.php'; include_once '../ServiceController.php'; PubSub::subscribe('UserManagement', function () { $moduleName = 'UserManagement'; $params = func_get_args(); $callBackMethod = $params[0]; array_shift($params); call_user_func_array(array(__NAMESPACE__ . '\\UserManagement', $callBackMethod), $params); }); class UserManagement { public static function initializeService($receiver, $response) { $replyMsg = "Hi " . $receiver['nickname'] . GenieConstants::$WELCOME_MESSAGE; MessaggingController::sendMessage($receiver, $replyMsg); self::askForGenderInformation($receiver, $response); $menu_Context = GenieConstants::searchElement(GenieConstants::$MAIN_MENU_CONTEXT, GenieConstants::$REGISTRATION_MENU_CONTEXT, 'subMenu'); $subMenu_Context = GenieConstants::searchElement(GenieConstants::$REGISTRATION_MENU_CONTEXT, GenieConstants::$GENDER_SUB_MENU_STRING, 'menuItem'); updateMessageContext($menu_Context, $subMenu_Context, $receiver['phone']); } public static function processGenderInformation($receiver, $response) { $regex = GenieConstants::$genderRegex; if (preg_match($regex, $response) == 0) { $errorMessage = GenieConstants::$ERROR_MESSAGE; MessaggingController::sendMessage($receiver, $errorMessage); self::askForGenderInformation($receiver, $response); return; } else {
/** * @covers PubSub::unsubscribe */ public function testRemove() { $callbacks = array(function () { PubSubTest::$callbackCalled = true; }, array('PubSubTest', 'staticCallback'), array($this, 'instanceCallback'), 'global_pub_sub_test_callback'); foreach ($callbacks as $key => $callback) { PubSub::subscribe('my_event', $callback); $this->assertEquals(1, count(PubSub::subscriptions('my_event')), '1 callback was added, so 1 callback should be in array.'); PubSub::unsubscribe('my_event', $callback); $this->assertEquals(0, count(PubSub::subscriptions('my_event')), '1 callback was unsubscribed, so 0 callbacks should be in array.'); } }