mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
Add file operations to ffi
This commit is contained in:
parent
469ee0cd65
commit
5a9c31f119
44
README.md
44
README.md
@ -57,7 +57,11 @@ var ffi = require('ffi-napi');
|
||||
|
||||
var executor_server = ffi.Library('./executor_server', {
|
||||
'Init': ['int', ['string']],
|
||||
'Exec': ['string', ['string']]
|
||||
'Exec': ['string', ['string']],
|
||||
'FileList': ['string', []],
|
||||
'FileAdd': ['string', ['string']],
|
||||
'FileGet': ['string', ['string']],
|
||||
'FileDelete': ['string', ['string']]
|
||||
});
|
||||
|
||||
if (executor_server.Init(JSON.stringify({
|
||||
@ -92,7 +96,7 @@ const result = JSON.parse(executor_server.Exec(JSON.stringify({
|
||||
})));
|
||||
console.log(result);
|
||||
|
||||
// Async
|
||||
// Async
|
||||
executor_server.Exec.async(JSON.stringify({
|
||||
"cmd": [{
|
||||
"args": ["/bin/cat", "test.txt"],
|
||||
@ -119,6 +123,42 @@ executor_server.Exec.async(JSON.stringify({
|
||||
if (err) throw err;
|
||||
console.log(JSON.parse(res));
|
||||
});
|
||||
|
||||
const fileAdd = (param) => new Promise((resolve, reject) => {
|
||||
executor_server.FileAdd.async(JSON.stringify(param), (err, res) => {
|
||||
if (err != null) { reject(err); } else { resolve(res); }
|
||||
});
|
||||
});
|
||||
const fileList = () => new Promise((resolve, reject) => {
|
||||
executor_server.FileList.async((err, res) => {
|
||||
if (err != null && res == null) { reject(err); } else { resolve(JSON.parse(res)); }
|
||||
});
|
||||
});
|
||||
const fileGet = (param) => new Promise((resolve, reject) => {
|
||||
executor_server.FileGet.async(JSON.stringify(param), (err, res) => {
|
||||
if (err != null && res == null) { reject(err); } else { resolve(res); }
|
||||
});
|
||||
});
|
||||
const fileDelete = (param) => new Promise((resolve, reject) => {
|
||||
executor_server.FileDelete.async(JSON.stringify(param), (err, res) => {
|
||||
if (err != null && res == null) { reject(err); } else { resolve(res); }
|
||||
});
|
||||
});
|
||||
|
||||
const fileOps = async () => {
|
||||
const fileId = await fileAdd({ name: 'Name', content: 'Content' });
|
||||
console.log(fileId);
|
||||
const list = await fileList();
|
||||
console.log(list);
|
||||
const file = await fileGet({ id: fileId });
|
||||
console.log(file);
|
||||
const d = await fileDelete({ id: fileId });
|
||||
console.log(d);
|
||||
const e = await fileList();
|
||||
console.log(e);
|
||||
};
|
||||
|
||||
fileOps();
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
@ -73,3 +73,78 @@ func Exec(e *C.char) *C.char {
|
||||
}
|
||||
return C.CString(buf.String())
|
||||
}
|
||||
|
||||
// FileList get the list of files in the file store
|
||||
//export FileList
|
||||
func FileList() *C.char {
|
||||
ids := fs.List()
|
||||
|
||||
var buf bytes.Buffer
|
||||
if err := json.NewEncoder(&buf).Encode(ids); err != nil {
|
||||
return nil
|
||||
}
|
||||
return C.CString(buf.String())
|
||||
}
|
||||
|
||||
// FileAdd adds file to the file store
|
||||
//export FileAdd
|
||||
func FileAdd(e *C.char) *C.char {
|
||||
type fileAdd struct {
|
||||
Name string `json:"name"`
|
||||
Content string `json:"content"`
|
||||
}
|
||||
es := C.GoString(e)
|
||||
|
||||
var f fileAdd
|
||||
if err := json.NewDecoder(bytes.NewBufferString(es)).Decode(&f); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
id, err := fs.Add(f.Name, []byte(f.Content))
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return C.CString(id)
|
||||
}
|
||||
|
||||
// FileGet gets file from file store by id
|
||||
//export FileGet
|
||||
func FileGet(e *C.char) *C.char {
|
||||
type fileGet struct {
|
||||
ID string `json:"id"`
|
||||
}
|
||||
es := C.GoString(e)
|
||||
|
||||
var f fileGet
|
||||
if err := json.NewDecoder(bytes.NewBufferString(es)).Decode(&f); err != nil {
|
||||
return nil
|
||||
}
|
||||
file := fs.Get(f.ID)
|
||||
if file == nil {
|
||||
return nil
|
||||
}
|
||||
c, err := file.Content()
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return C.CString(string(c))
|
||||
}
|
||||
|
||||
// FileDelete deletes file from file store by id
|
||||
//export FileDelete
|
||||
func FileDelete(e *C.char) *C.char {
|
||||
type fileDelete struct {
|
||||
ID string `json:"id"`
|
||||
}
|
||||
es := C.GoString(e)
|
||||
|
||||
var f fileDelete
|
||||
if err := json.NewDecoder(bytes.NewBufferString(es)).Decode(&f); err != nil {
|
||||
return nil
|
||||
}
|
||||
ok := fs.Remove(f.ID)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user