implement DHT data cache

This commit is contained in:
ghost 2022-01-02 06:46:07 +02:00
parent e7311b038c
commit 72949e0834
13 changed files with 70 additions and 49 deletions

Binary file not shown.

View File

@ -1,21 +0,0 @@
<?php
if (isset($_GET['hash'])) {
$fileName = md5($_GET['hash']);
$filePath = PROJECT_DIR . '/cache/image/' . $fileName . '.jpeg';
if (!file_exists($filePath)) {
$icon = new Icon();
$image = $icon->generateImageResource($fileName, 42, 42, false);
file_put_contents($filePath, $image);
}
$image = file_get_contents($filePath);
header("Content-Type: image/jpeg");
echo $image;
}

View File

@ -10,7 +10,15 @@ if (isset($_SESSION['userName'])) {
$userName = isset($_GET['userName']) ? Filter::userName($_GET['userName']) : $_SESSION['userName'];
if ($avatarVersions = $_twister->getDHT($userName, 'avatar', 's')) {
if ($avatar = $_memcache->get('api.user.avatar.' . $userName)) {
$response = [
'success' => true,
'message' => _('Avatar successfully received from Cache'),
'avatar' => $avatar
];
} else if ($avatarVersions = $_twister->getDHT($userName, 'avatar', 's')) {
// Check avatar exists
if ($userId = $_modelUser->getUserId($userName)) {
@ -36,10 +44,12 @@ if (isset($_SESSION['userName'])) {
$response = [
'success' => true,
'message' => _('Avatar successfully received'),
'message' => _('Avatar successfully received from DHT'),
'avatar' => $avatarInfo['data']
];
$_memcache->set('api.user.avatar.' . $userName, $avatarInfo['data'], MEMCACHE_COMPRESS, MEMCACHE_DHT_AVATAR_TIMEOUT);
} else {
$response = [
@ -49,12 +59,26 @@ if (isset($_SESSION['userName'])) {
];
}
// Generate identity icon
} else {
$fileName = md5($userName);
$filePath = PROJECT_DIR . '/cache/image/' . $fileName . '.jpeg';
if (!file_exists($filePath)) {
$icon = new Icon();
$image = $icon->generateImageResource($fileName, 42, 42, false);
file_put_contents($filePath, $image);
}
$image = file_get_contents($filePath);
$response = [
'success' => false,
'message' => _('Could not receive avatar details'),
'avatar' => false
'success' => true,
'message' => _('Avatar successfully received from Identity'),
'avatar' => 'data:image/jpeg;base64,' . base64_encode($image)
];
}

View File

@ -10,7 +10,15 @@ if (isset($_SESSION['userName'])) {
$userName = isset($_GET['userName']) ? Filter::userName($_GET['userName']) : $_SESSION['userName'];
if ($userProfileVersions = $_twister->getDHT($userName, 'profile', 's')) {
if ($profile = $_memcache->get('api.user.profile.' . $userName)) {
$response = [
'success' => true,
'message' => _('Profile successfully received from Cache'),
'profile' => $profile
];
} else if ($userProfileVersions = $_twister->getDHT($userName, 'profile', 's')) {
// Check user exists
if ($userId = $_modelUser->getUserId($userName)) {
@ -43,20 +51,24 @@ if (isset($_SESSION['userName'])) {
// Get latest version available
if ($profileInfo = $_modelProfile->get($userId)) {
$profile = [
'userName' => $userName,
'fullName' => $profileInfo['fullName'],
'location' => $profileInfo['location'],
'url' => $profileInfo['url'],
'bitMessage' => $profileInfo['bitMessage'],
'tox' => $profileInfo['tox'],
'bio' => nl2br($profileInfo['bio']),
];
$response = [
'success' => true,
'message' => _('Profile successfully received'),
'profile' => [
'userName' => $userName,
'fullName' => $profileInfo['fullName'],
'location' => $profileInfo['location'],
'url' => $profileInfo['url'],
'bitMessage' => $profileInfo['bitMessage'],
'tox' => $profileInfo['tox'],
'bio' => nl2br($profileInfo['bio']),
]
'message' => _('Profile successfully received from DHT'),
'profile' => $profile
];
$_memcache->set('api.user.profile.' . $userName, $profile, MEMCACHE_COMPRESS, MEMCACHE_DHT_PROFILE_TIMEOUT);
} else {
$response = [

View File

@ -1,7 +1,7 @@
<div class="modulePost" id="modulePost">
<form action="/" method="POST" name="post">
<div class="avatar">
<img src="<?php echo PROJECT_HOST ?>/api/image?hash=<?php echo $_SESSION['userName'] ?>" alt="" />
<img src="" alt="" />
</div>
<div class="message">
<textarea name="post" placeholder="<?php echo _('Enter your post...') ?>"></textarea>

View File

@ -25,6 +25,9 @@ define('TWISTER_PASSWORD', '');
// MEMCACHE
define('MEMCACHE_HOST', 'localhost');
define('MEMCACHE_PORT', 11211);
define('MEMCACHE_COMPRESS', false);
define('MEMCACHE_DHT_AVATAR_TIMEOUT', 3600);
define('MEMCACHE_DHT_PROFILE_TIMEOUT', 3600);
// COMMON
define('APPLICATION_ALLOW_REGISTRATION', true);

View File

@ -25,6 +25,7 @@
border: 2px #fff solid;
width: 46px;
height: 46px;
display: none
}
.moduleFeed .item .message {

View File

@ -32,6 +32,7 @@
border: 2px #fff solid;
width: 16px;
height: 16px;
display: none
}
.moduleFollowing .item .action {

View File

@ -17,6 +17,7 @@
border: 2px #fff solid;
width: 46px;
height: 46px;
display: none
}
.modulePost .message {

View File

@ -38,7 +38,7 @@ var ModuleFeed = {
'href': 'people/' + userName
}).append(
$('<img/>', {
'src': '/api/image?hash=' + userName,
'src': '',
'alt': '',
})
)
@ -83,7 +83,7 @@ var ModuleFeed = {
if (response.success) {
if (response.avatar) {
$(feed).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar);
$(feed).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar).show();
}
} else {

View File

@ -15,7 +15,7 @@ var ModuleFollowing = {
'href': 'people/' + userName
}).append(
$('<img/>', {
'src': '/api/image?hash=' + userName,
'src': '',
'alt': '',
})
)
@ -94,7 +94,7 @@ var ModuleFollowing = {
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
console.log(textStatus, errorThrown);
}
});
},
@ -110,7 +110,7 @@ var ModuleFollowing = {
if (response.success) {
if (response.avatar) {
$(list).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar);
$(list).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar).show();
}
} else {
@ -120,7 +120,7 @@ var ModuleFollowing = {
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
console.log(textStatus, errorThrown);
}
});
},
@ -149,7 +149,7 @@ var ModuleFollowing = {
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
console.log(textStatus, errorThrown);
}
});
},
@ -176,7 +176,7 @@ var ModuleFollowing = {
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
console.log(textStatus, errorThrown);
}
});
},

View File

@ -11,7 +11,7 @@ var ModulePost = {
if (response.success) {
if (response.avatar) {
$(element).find('img').attr('src', response.avatar);
$(element).find('img').attr('src', response.avatar).show();
}
} else {
@ -27,7 +27,7 @@ var ModulePost = {
},
add: function() {
var input = $('#modulePost > .message > textarea');
var input = $('#modulePost > .message > textarea');
$.ajax({
url: 'api/post/add',

View File

@ -14,7 +14,7 @@ var ModuleUsers = {
'href': 'people/' + userName
}).append(
$('<img/>', {
'src': '/api/image?hash=' + userName,
'src': '',
'alt': '',
})
)