$transaction_id = Neuron_Core_Tools::getInput('_GET', 'transaction_id', 'varchar');
    $transaction_key = Neuron_Core_Tools::getInput('_GET', 'transaction_key', 'varchar');
    $player = Neuron_GameServer::getPlayer($plid);
    if ($player) {
        if ($player->handleUseRequest($_GET, $transaction_id, $transaction_key)) {
            echo '<p>Premium action was executed.</p>';
        } else {
            echo '<p>Something went wrong: ' . $player->getError() . '</p>';
        }
    } else {
        echo '<p>Invalid input: user not found.</p>';
    }
    echo "\n\nProfiler: \n" . $profiler;
} else {
    // Start counter
    $pgen = Neuron_Core_PGen::__getInstance();
    $pgen->start();
    // Fetch input
    $output_type = Neuron_Core_Tools::getInput('_REQUEST', 'output', 'varchar', false);
    $output = array();
    $output['request'] = $_GET;
    $output['content'] = array();
    // Requests
    switch ($request) {
        case 'invitation':
            $id = Neuron_Core_Tools::getInput('_REQUEST', 'id', 'int', false);
            $player = Neuron_GameServer::getPlayer($id);
            if ($player->isFound()) {
                $sender = Neuron_GameServer_Player::getFromOpenID(Neuron_Core_Tools::getInput('_REQUEST', 'sender', 'varchar'));
                $receiver = Neuron_GameServer_Player::getFromOpenID(Neuron_Core_Tools::getInput('_REQUEST', 'receiver', 'varchar'));
                if (!$receiver) {
 public function dispatch()
 {
     if (!isset($this->objGame)) {
         throw new Neuron_Core_Error('Neuron_GameServer did not receive a Neuron_GameServer_Game object.');
     }
     if ($this->objGame instanceof Neuron_GameServer_Interfaces_Dispatch) {
         if (!$this->getRidOfSessionID()) {
             return;
         }
         $this->objGame->dispatch();
         return;
     }
     Neuron_URLBuilder::getInstance()->setOpenCallback(array($this, 'getOpenUrl'));
     Neuron_URLBuilder::getInstance()->setUpdateCallback(array($this, 'getUpdateUrl'));
     $pgen = Neuron_Core_PGen::__getInstance();
     $pgen->start();
     // Start counter
     $sInputs = explode('/', isset($_GET['module']) ? $_GET['module'] : null);
     $sModule = $sInputs[0];
     switch ($sModule) {
         case 'openid':
             $this->openid();
             break;
         case 'gameserver':
             array_shift($sInputs);
             array_shift($sInputs);
             $assetPath = realpath(__DIR__ . '/../../assets/');
             $filename = $assetPath . '/' . implode('/', $sInputs);
             if (file_exists($filename)) {
                 $ext = explode('.', $filename);
                 $ext = array_pop($ext);
                 switch ($ext) {
                     case 'css':
                         header('Content-Type: text/css');
                         break;
                     default:
                         $finfo = finfo_open(FILEINFO_MIME_TYPE);
                         $mimetype = finfo_file($finfo, $filename);
                         finfo_close($finfo);
                         header('Content-Type: ' . $mimetype);
                         break;
                 }
                 echo file_get_contents($filename);
             } else {
                 http_response_code(404);
                 echo 'File not found: ' . implode('/', $sInputs);
             }
             break;
         case 'dialog':
             // A little overwrite
             $output = $this->objGame->getCustomOutput();
             if ($output) {
                 header("Content-Type: text/xml; charset=utf-8;");
                 echo '<?xml version="1.0" encoding="utf-8"?>';
                 echo '<root><command command="refresh"></command></root>';
                 return;
             }
             require_once self::SCRIPT_PATH . 'dialog/dialog.php';
             break;
         case 'api':
             require_once self::SCRIPT_PATH . 'api/api.php';
             break;
         case 'map':
             // Close the session (lock)
             //session_write_close ();
             require_once self::SCRIPT_PATH . 'map/map.php';
             break;
         case 'image':
             // Close the session (lock)
             session_write_close();
             require_once self::SCRIPT_PATH . 'image/image.php';
             break;
         case 'test':
             // Close the session (lock)
             session_write_close();
             // Login
             $player = Neuron_GameServer::getPlayer();
             $overwritelogin = true;
             if ((!$player || !$player->isAdmin()) && !$overwritelogin) {
                 echo 'You must login.';
             } else {
                 $file = isset($sInputs[1]) ? $sInputs[1] : null;
                 if (@(include 'scripts/tests/' . $sInputs[1] . '.php')) {
                     //include_once ('scripts/tests/' . $sInputs[1] . '.php');
                 } else {
                     if (include self::SCRIPT_PATH . 'tests/' . $file . '.php') {
                         // ok
                     } else {
                         echo "File not found: " . self::SCRIPT_PATH . 'tests/' . $file . '.php';
                     }
                 }
                 /*if (file_exists (self::SCRIPT_PATH.'tests/'.$file.'.php'))
                 		{
                 		*/
                 /*}
                 		else
                 		{
                 			echo "File not found: " . self::SCRIPT_PATH.'tests/'.$file.'.php';
                 		}*/
             }
             break;
         case 'admin':
             // Check for page
             setcookie('session_id', session_id(), 0, COOKIE_BASE_PATH . 'admin/');
             $login = Neuron_Core_Login::getInstance(1);
             if (!$login->isLogin()) {
                 $objPage = new Neuron_GameServer_Pages_Admin_Login($login);
             } else {
                 $sPage = isset($sInputs[1]) ? $sInputs[1] : 'Index';
                 $sClassname = 'Neuron_GameServer_Pages_Admin_' . ucfirst(strtolower($sPage));
                 $myself = Neuron_GameServer::getPlayer();
                 if ($myself && $myself->isChatModerator()) {
                     if ($objPage = $this->objGame->getAdminPage($sPage)) {
                     } elseif (class_exists($sClassname)) {
                         $objPage = new $sClassname();
                     } else {
                         $objPage = new Neuron_GameServer_Pages_Admin_Index();
                     }
                 } else {
                     $objPage = new Neuron_GameServer_Pages_Admin_Invalid();
                 }
             }
             echo $objPage->getHTML();
             break;
         case 'page':
             // Check for page
             $sPage = isset($sInputs[1]) ? $sInputs[1] : 'Index';
             $sClassname = 'Neuron_GameServer_Pages_' . ucfirst(strtolower($sPage));
             $myself = Neuron_GameServer::getPlayer();
             if ($objPage = $this->objGame->getPage($sPage)) {
             } else {
                 if (class_exists($sClassname)) {
                     $objPage = new $sClassname();
                 } else {
                     $objPage = new Neuron_GameServer_Pages_Index();
                 }
             }
             echo $objPage->getOutput();
             break;
         case 'time':
             echo 'time=' . round(microtime(true) * 1000);
             break;
         case '':
             $_SESSION['tmp'] = null;
             // Now, if we have a NOLOGIN_REDIRECT set, redirect here
             if (defined('NOLOGIN_REDIRECT') && !isset($_GET['DEBUG'])) {
                 $player = Neuron_GameServer::getPlayer();
                 if (!$player) {
                     header("Location: " . NOLOGIN_REDIRECT);
                     echo "Redirecting to " . NOLOGIN_REDIRECT;
                 } else {
                     $this->showIndexPage();
                 }
             } else {
                 $this->showIndexPage();
             }
             break;
         case 'favicon.ico':
         case 'favicon.icon':
             header('Content-type: image/x-icon');
             echo file_get_contents('./favicon.ico');
             break;
         default:
             //throw new Exception ('Invalid API call: module "'.$sModule.'" not found.');
             echo '<p>Invalid module: ' . $sModule . '</p>';
             break;
     }
     if (isset($profiler) && defined(USE_PROFILE) && USE_PROFILE) {
         // Dump the profiler
         if (intval($profiler->getTotalDuration()) > 2) {
             $cache = Neuron_Core_Cache::__getInstance('profiler/' . $_SERVER['REMOTE_ADDR'] . '/');
             $cache->setCache(date('dmYHis'), (string) $profiler);
         }
     }
 }