realtime connection
This commit is contained in:
parent
b851b66b0c
commit
69738aed9a
3 changed files with 30 additions and 13 deletions
|
@ -36,10 +36,12 @@ use Appwrite\Extend\Exception;
|
|||
use Appwrite\GraphQL\Promises\Adapter\Swoole;
|
||||
use Appwrite\GraphQL\Schema;
|
||||
use Appwrite\Hooks\Hooks;
|
||||
use Appwrite\Messaging\Adapter\Realtime;
|
||||
use Appwrite\Network\Validator\Email;
|
||||
use Appwrite\Network\Validator\Origin;
|
||||
use Appwrite\OpenSSL\OpenSSL;
|
||||
use Appwrite\URL\URL as AppwriteURL;
|
||||
use Appwrite\Utopia\Request;
|
||||
use MaxMind\Db\Reader;
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use Swoole\Database\PDOProxy;
|
||||
|
@ -1457,10 +1459,17 @@ App::setResource('deviceForBuilds', function ($project, $connectionString) {
|
|||
return getDevice(APP_STORAGE_BUILDS.'/app-'.$project->getId(), $connectionString);
|
||||
}, ['project', 'connectionString']);
|
||||
|
||||
App::setResource('realtimeConnection', fn($pools) => $pools->get('pubsub')->pop()->getResource()
|
||||
, ['pools']);
|
||||
|
||||
App::setResource('connectionString', function () {
|
||||
return System::getEnv('_APP_CONNECTIONS_STORAGE', '');
|
||||
});
|
||||
|
||||
Realtime::setRedis(
|
||||
$register->get('pools')->get('pubsub')->pop()->getResource()
|
||||
);
|
||||
|
||||
|
||||
function getDevice(string $root, string $connectionString = ''): Device
|
||||
{
|
||||
|
|
|
@ -7,10 +7,12 @@ use Utopia\Database\DateTime;
|
|||
use Utopia\Database\Document;
|
||||
use Utopia\Database\Helpers\ID;
|
||||
use Utopia\Database\Helpers\Role;
|
||||
use Utopia\Pools\Connection;
|
||||
use Utopia\System\System;
|
||||
|
||||
class Realtime extends Adapter
|
||||
{
|
||||
|
||||
/**
|
||||
* Connection Tree
|
||||
*
|
||||
|
@ -36,6 +38,21 @@ class Realtime extends Adapter
|
|||
*/
|
||||
public array $subscriptions = [];
|
||||
|
||||
private static ?\Redis $redis = null;
|
||||
|
||||
public static function setRedis($redis): void
|
||||
{
|
||||
self::$redis = $redis;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Redis|null
|
||||
*/
|
||||
public static function getRedis(): ?\Redis
|
||||
{
|
||||
return self::$redis;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a subscription.
|
||||
*
|
||||
|
@ -124,24 +141,23 @@ class Realtime extends Adapter
|
|||
* Sends an event to the Realtime Server
|
||||
* @param string $projectId
|
||||
* @param array $payload
|
||||
* @param string $event
|
||||
* @param array $events
|
||||
* @param array $channels
|
||||
* @param array $roles
|
||||
* @param array $options
|
||||
* @return void
|
||||
* @throws \RedisException
|
||||
*/
|
||||
public static function send(string $projectId, array $payload, array $events, array $channels, array $roles, array $options = []): void
|
||||
{
|
||||
if (empty($channels) || empty($roles) || empty($projectId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$permissionsChanged = array_key_exists('permissionsChanged', $options) && $options['permissionsChanged'];
|
||||
$userId = array_key_exists('userId', $options) ? $options['userId'] : null;
|
||||
|
||||
$redis = new \Redis(); //TODO: make this part of the constructor
|
||||
$redis->connect(System::getEnv('_APP_REDIS_HOST', ''), System::getEnv('_APP_REDIS_PORT', ''));
|
||||
$redis->publish('realtime', json_encode([
|
||||
|
||||
self::getRedis()->publish('realtime', json_encode([
|
||||
'project' => $projectId,
|
||||
'roles' => $roles,
|
||||
'permissionsChanged' => $permissionsChanged,
|
||||
|
|
|
@ -195,14 +195,6 @@ class Databases extends Action
|
|||
);
|
||||
}
|
||||
} finally {
|
||||
var_dump([
|
||||
'database'=> $database,
|
||||
'collection'=> $collection,
|
||||
'attribute'=> $attribute,
|
||||
'database'=> $database,
|
||||
'events'=> $events,
|
||||
|
||||
]);
|
||||
$this->trigger($database, $collection, $attribute, $project, $projectId, $events);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue