1
0
Fork 0
mirror of synced 2024-09-19 19:07:21 +12:00

realtime connection

This commit is contained in:
shimon 2024-09-02 18:14:40 +03:00
parent b851b66b0c
commit 69738aed9a
3 changed files with 30 additions and 13 deletions

View file

@ -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
{

View file

@ -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,

View file

@ -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);
}