mirror of
https://github.com/Yetangitu/ampache
synced 2025-10-05 19:41:55 +02:00
Begin WebSocket support for Broadcast and Player control
This commit is contained in:
parent
2b128b122d
commit
6adf8307c4
516 changed files with 64260 additions and 18 deletions
82
modules/React/Dns/Query/RecordCache.php
Normal file
82
modules/React/Dns/Query/RecordCache.php
Normal file
|
@ -0,0 +1,82 @@
|
|||
<?php
|
||||
|
||||
namespace React\Dns\Query;
|
||||
|
||||
use React\Cache\CacheInterface;
|
||||
use React\Dns\Model\Message;
|
||||
use React\Dns\Model\Record;
|
||||
use React\Promise;
|
||||
|
||||
class RecordCache
|
||||
{
|
||||
private $cache;
|
||||
private $expiredAt;
|
||||
|
||||
public function __construct(CacheInterface $cache)
|
||||
{
|
||||
$this->cache = $cache;
|
||||
}
|
||||
|
||||
public function lookup(Query $query)
|
||||
{
|
||||
$id = $this->serializeQueryToIdentity($query);
|
||||
|
||||
$expiredAt = $this->expiredAt;
|
||||
|
||||
return $this->cache
|
||||
->get($id)
|
||||
->then(function ($value) use ($query, $expiredAt) {
|
||||
$recordBag = unserialize($value);
|
||||
|
||||
if (null !== $expiredAt && $expiredAt <= $query->currentTime) {
|
||||
return Promise\reject();
|
||||
}
|
||||
|
||||
return $recordBag->all();
|
||||
});
|
||||
}
|
||||
|
||||
public function storeResponseMessage($currentTime, Message $message)
|
||||
{
|
||||
foreach ($message->answers as $record) {
|
||||
$this->storeRecord($currentTime, $record);
|
||||
}
|
||||
}
|
||||
|
||||
public function storeRecord($currentTime, Record $record)
|
||||
{
|
||||
$id = $this->serializeRecordToIdentity($record);
|
||||
|
||||
$cache = $this->cache;
|
||||
|
||||
$this->cache
|
||||
->get($id)
|
||||
->then(
|
||||
function ($value) {
|
||||
return unserialize($value);
|
||||
},
|
||||
function ($e) {
|
||||
return new RecordBag();
|
||||
}
|
||||
)
|
||||
->then(function ($recordBag) use ($id, $currentTime, $record, $cache) {
|
||||
$recordBag->set($currentTime, $record);
|
||||
$cache->set($id, serialize($recordBag));
|
||||
});
|
||||
}
|
||||
|
||||
public function expire($currentTime)
|
||||
{
|
||||
$this->expiredAt = $currentTime;
|
||||
}
|
||||
|
||||
public function serializeQueryToIdentity(Query $query)
|
||||
{
|
||||
return sprintf('%s:%s:%s', $query->name, $query->type, $query->class);
|
||||
}
|
||||
|
||||
public function serializeRecordToIdentity(Record $record)
|
||||
{
|
||||
return sprintf('%s:%s:%s', $record->name, $record->type, $record->class);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue