const http = require('http');
const fs = require('fs');
const events= require('events');
function post(path, json, cb) {
let options = {
host: 'hr.amiaodaifu.com',
port: 50000,
path: `/1610/${path}`,
method: 'GET'
};
let content = undefined;
if(json!==null) {
content = new Buffer(JSON.stringify(json));
options.method = 'POST';
options.headers = {
"Content-Type": "application/json; charset=utf-8",
"Content-Length": content.length
};
}
let req = http.request(options, function(res) {
let content = "";
res.on("data", (data) => content += data);
res.on("end", () => cb(
res.statusCode===200 ? JSON.parse(content) : null
));
});
req.on("error", (e) => cb(null));
req.end(content);
}
function _new(cb) {
post('new-question', {mail: 'john.zhang@yishizhencang.com'}, cb);
}
function _get(questionId, id, cb) {
post(`questions/${questionId}/get-children/${id}`, null, cb);
}
function _check(questionId, json, cb) {
post(`questions/${questionId}/check`, {root: json}, cb);
}
function _submit(questionId, cb) {
post(`questions/${questionId}/submit`, {
name: "amiao",
forFun: true,
phone: 01234567890,
sourceCode: fs.readFileSync(__filename, 'utf-8')
}, cb);
}
class p1610 extends events {
constructor() {
super();
_new((question) => {
if(question===null) return;
this.questionId = question.id;
this.root = {id: question.rootId, children: []};
this.queue = [this.root];
this.tasks = 0;
this.emit('get');
});
}
run(father) {
_get(this.questionId, father.id, (childrenId) => {
if(childrenId===null)
this.queue.push(father);
else
for(let i=0; i<childrenId.length; i++) {
let leaf = {id: childrenId[i], children: []};
this.queue.push(leaf);
father.children.push(leaf);
}
this.tasks--;
this.emit('get');
});
}
get() {
while(this.queue.length && this.tasks<5) {
this.tasks++;
this.run(this.queue.shift());
}
if(!this.queue.length && !this.tasks) this.emit('check');
}
check() {
_check(this.questionId, this.root, (judge) => {
if(judge===null) return;
if(judge.pass) this.emit('submit');
console.log(judge);
});
}
submit() {
_submit(this.questionId, (message) => console.log(message));
}
}
let p = new p1610;
p.on('get', p.get);
p.on('check', p.check);
p.on('submit', p.submit);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。