Beispiel #1
0
 /**
  * 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);
         }
     }
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 public static function exitMenu($requester)
 {
     PubSub::publish(GenieConstants::$SERVICE_REQUEST_COMPLETE, $requester);
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
            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');
Beispiel #7
0
 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);
Beispiel #10
0
<?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();
Beispiel #11
0
 /**
  * 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"));
Beispiel #14
0
<?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 {
Beispiel #15
0
 /**
  * @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.');
     }
 }