forked from cory/tildefriends
Work in progress moving SSB RPC handlers into javascript.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3657 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
85
core/ssb.js
Normal file
85
core/ssb.js
Normal file
@ -0,0 +1,85 @@
|
||||
var g_wants_requests = {};
|
||||
|
||||
ssb.registerConnectionsChanged(function(change, connection) {
|
||||
if (change == 'add') {
|
||||
connection.send_json({'name': ['createHistoryStream'], 'type': 'source', 'args': [{'id': connection.id, 'seq': 0}]}, function(message) {
|
||||
ssb.storeMessage(message.message);
|
||||
});
|
||||
connection.send_json({'name': ['blobs', 'createWants'], 'type': 'source', 'args': []}, function(message) {
|
||||
Object.keys(message.message).forEach(function(id) {
|
||||
if (message.message[id] < 0) {
|
||||
var blob = ssb.blobGet(id);
|
||||
if (blob) {
|
||||
var out_message = {};
|
||||
out_message[id] = blob.byteLength;
|
||||
g_wants_requests[connection.id].send_json(out_message);
|
||||
//connection.wants_request.send_json(out_message);
|
||||
}
|
||||
} else {
|
||||
debug_print("blobs.get", id);
|
||||
connection.send_json({'name': ['blobs', 'get'], 'type': 'source', 'args': [{'id': id}]}, function(message) {
|
||||
debug_print(id, '=>', debug_utf8Decode(message.message));
|
||||
ssb.blobStore(message.message);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
} else if (change == 'remove') {
|
||||
debug_print('REMOVE', connection.id);
|
||||
delete g_wants_requests[connection.id];
|
||||
} else {
|
||||
debug_print('CHANGE', change);
|
||||
}
|
||||
});
|
||||
|
||||
ssb.registerRpc(['blobs', 'createWants'], function(request) {
|
||||
g_wants_requests[request.connection.id] = request;
|
||||
function blob_want_discovered(id) {
|
||||
debug_print('discovered', id);
|
||||
var message = {};
|
||||
message[id] = -1;
|
||||
request.send_json(message);
|
||||
}
|
||||
ssb.registerBlobWantAdded(blob_want_discovered);
|
||||
ssb.sqlStream(
|
||||
'SELECT id FROM blob_wants',
|
||||
[],
|
||||
row => blob_want_discovered(row.id));
|
||||
});
|
||||
|
||||
ssb.registerRpc(['blobs', 'has'], function(request) {
|
||||
var found = false;
|
||||
ssb.sqlStream(
|
||||
'SELECT 1 FROM blobs where id = ?1',
|
||||
[request.args[0]],
|
||||
function(row) {
|
||||
found = true;
|
||||
});
|
||||
request.send_json(found);
|
||||
});
|
||||
|
||||
ssb.registerRpc(['blobs', 'get'], function(request) {
|
||||
var blob = ssb.blobGet(request.args[0].id);
|
||||
request.send_binary(blob);
|
||||
});
|
||||
|
||||
ssb.registerRpc(['createHistoryStream'], function(request) {
|
||||
var id = request.args[0].id;
|
||||
var seq = request.args[0].seq;
|
||||
ssb.sqlStream(
|
||||
'SELECT previous, sequence, timestamp, hash, content, signature FROM messages WHERE author = ?1 AND sequence >= ?2 ORDER BY sequence',
|
||||
[id, seq ?? 0],
|
||||
function(row) {
|
||||
var message = {
|
||||
'previous': row.previous,
|
||||
'author': id,
|
||||
'sequence': row.sequence,
|
||||
'timestamp': row.timestamp,
|
||||
'hash': row.hash,
|
||||
'content': JSON.parse(row.content),
|
||||
'signature': row.signature,
|
||||
};
|
||||
debug_print('sending1', JSON.stringify(message));
|
||||
request.send_json(message);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user