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
42
README.md
42
README.md
@ -57,7 +57,11 @@ var ffi = require('ffi-napi');
|
|||||||
|
|
||||||
var executor_server = ffi.Library('./executor_server', {
|
var executor_server = ffi.Library('./executor_server', {
|
||||||
'Init': ['int', ['string']],
|
'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({
|
if (executor_server.Init(JSON.stringify({
|
||||||
@ -119,6 +123,42 @@ executor_server.Exec.async(JSON.stringify({
|
|||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log(JSON.parse(res));
|
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:
|
Output:
|
||||||
|
|||||||
@ -73,3 +73,78 @@ func Exec(e *C.char) *C.char {
|
|||||||
}
|
}
|
||||||
return C.CString(buf.String())
|
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