You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.0 KiB

function startup()
{
var FileSystem = function(root) {
this.root = root;
};
FileSystem.BAD_NO_ENTRY = -1;
FileSystem.prototype.getEntry = function(path) {
var items = path.split('/');
var curItem = this.root;
var item;
var i, len;
for(i = 0, len = items.length; curItem && (i < len); i++) {
item = items[i];
if ("" !== item) {
curItem = curItem.entries && curItem.entries[item];
}
}
return curItem;
}
FileSystem.prototype.getattr = function(path) {
entry = this.getEntry(path);
if (entry) {
return {
mode: entry.mode || 0755,
type: entry.type || 'file',
size: entry.size || 0,
atime: entry.atime || 0,
mtime: entry.mtime || 0,
ctime: entry.ctime || 0
};
}
else {
return FileSystem.BAD_NO_ENTRY;
}
};
var fs = new FileSystem({
mode: 0755,
type: "dir",
entries: {
"hello": { mode: 0755, type: "file", size: 10, contents: "Hello, World!"}
}
});
var ws = new WebSocket('ws://localhost:4711/', 'fs');
ws.onopen = function() {
console.log('open');
};
ws.onclose = function() {
console.log('close');
};
ws.onmessage = function(message) {
console.log(message);
try {
var request = JSON.parse(message.data);
var result = -42;
var response;
if (("string" === typeof(request.method)) &&
("number" === typeof(request.id)) &&
(request.params)) {
switch(request.method)
{
case "getattr":
result = fs.getattr(request.params[0]);
break;
default:
break;
}
if ("number" !== typeof(result)) {
response = {result: result, id: request.id};
}
else {
response = {error: {code: result}, id: request.id};
}
console.log(response);
ws.send(JSON.stringify(response));
}
}
catch (ex) { console.log(ex); }
};
var sendButton = document.getElementById('sendButton');
sendButton.addEventListener('click', function() {
var content = document.getElementById('content').value;
ws.send(content);
console.log(content);
});
}
document.onload=startup();