初步封装完成
This commit is contained in:
@ -61,12 +61,14 @@ std::vector<std::string> BookStoreEngineClass::Execute(
|
|||||||
login_stack.pop();
|
login_stack.pop();
|
||||||
}
|
}
|
||||||
if (!is_server) BookStore_ZYM::shut_down = true;
|
if (!is_server) BookStore_ZYM::shut_down = true;
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({"[Empty]"})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
if (operation_map.find(head) == operation_map.end()) {
|
if (operation_map.find(head) == operation_map.end()) {
|
||||||
for (int i = 0; i < cmd.length(); i++)
|
for (int i = 0; i < cmd.length(); i++)
|
||||||
if (cmd[i] != ' ') return std::vector<std::string>({"Invalid"});
|
if (cmd[i] != ' ') return std::vector<std::string>({"Invalid"});
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({"[Empty]"})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
if (!login_stack.empty())
|
if (!login_stack.empty())
|
||||||
log_data_base.AddOperationRecord(login_stack.top().first, cmd,
|
log_data_base.AddOperationRecord(login_stack.top().first, cmd,
|
||||||
@ -75,51 +77,79 @@ std::vector<std::string> BookStoreEngineClass::Execute(
|
|||||||
log_data_base.AddOperationRecord("[nobody]", cmd, user_data_base);
|
log_data_base.AddOperationRecord("[nobody]", cmd, user_data_base);
|
||||||
switch (operation_map[head]) {
|
switch (operation_map[head]) {
|
||||||
case OperationType::__Ksu: {
|
case OperationType::__Ksu: {
|
||||||
return ExecuteSu(cmd, login_stack);
|
auto ret = std::move(ExecuteSu(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Klogout: {
|
case OperationType::__Klogout: {
|
||||||
return ExecuteLogout(cmd, login_stack);
|
auto ret = std::move(ExecuteLogout(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kuseradd: {
|
case OperationType::__Kuseradd: {
|
||||||
return ExecuteUserAdd(cmd, login_stack);
|
auto ret = std::move(ExecuteUserAdd(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kregister: {
|
case OperationType::__Kregister: {
|
||||||
return ExecuteRegister(cmd, login_stack);
|
auto ret = std::move(ExecuteRegister(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kdelete: {
|
case OperationType::__Kdelete: {
|
||||||
return ExecuteDelete(cmd, login_stack);
|
auto ret = std::move(ExecuteDelete(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kpasswd: {
|
case OperationType::__Kpasswd: {
|
||||||
return ExecutePasswd(cmd, login_stack);
|
auto ret = std::move(ExecutePasswd(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kselect: {
|
case OperationType::__Kselect: {
|
||||||
return ExecuteSelect(cmd, login_stack);
|
auto ret = std::move(ExecuteSelect(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kmodify: {
|
case OperationType::__Kmodify: {
|
||||||
return ExecuteMOdify(cmd, login_stack);
|
auto ret = std::move(ExecuteMOdify(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kimport: {
|
case OperationType::__Kimport: {
|
||||||
return ExecuteImport(cmd, login_stack);
|
auto ret = std::move(ExecuteImport(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kshow: {
|
case OperationType::__Kshow: {
|
||||||
ss >> head;
|
ss >> head;
|
||||||
if (head == "finance") goto dst_showfinance;
|
if (head == "finance") goto dst_showfinance;
|
||||||
return ExecuteShow(cmd, login_stack);
|
auto ret = std::move(ExecuteShow(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kshowfinance: {
|
case OperationType::__Kshowfinance: {
|
||||||
dst_showfinance:;
|
dst_showfinance:;
|
||||||
return ExecuteShowFinance(cmd, login_stack);
|
auto ret = std::move(ExecuteShowFinance(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kbuy: {
|
case OperationType::__Kbuy: {
|
||||||
return ExecuteBuy(cmd, login_stack);
|
auto ret = std::move(ExecuteBuy(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Kreport: {
|
case OperationType::__Kreport: {
|
||||||
// return std::vector<std::string>({"Invalid"});
|
// return std::vector<std::string>({"Invalid"});
|
||||||
return ExecuteReport(cmd, login_stack);
|
auto ret = std::move(ExecuteReport(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
case OperationType::__Klog: {
|
case OperationType::__Klog: {
|
||||||
// return std::vector<std::string>({"Invalid"});
|
// return std::vector<std::string>({"Invalid"});
|
||||||
return ExecuteLog(cmd, login_stack);
|
auto ret = std::move(ExecuteLog(cmd, login_stack));
|
||||||
|
if (is_server && ret.size() == 0) return std::vector<std::string>({"[Empty]"});
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw FatalError("Unknown Command", 5);
|
throw FatalError("Unknown Command", 5);
|
||||||
@ -143,13 +173,15 @@ std::vector<std::string> BookStoreEngineClass::ExecuteSu(
|
|||||||
// debugPrint("has root previlege");
|
// debugPrint("has root previlege");
|
||||||
login_stack.push(std::make_pair(user_id, 0));
|
login_stack.push(std::make_pair(user_id, 0));
|
||||||
login_count[user_id]++;
|
login_count[user_id]++;
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
// debugPrint("Examining", user_id, password);
|
// debugPrint("Examining", user_id, password);
|
||||||
if (user_data_base.PAM(user_id, password)) {
|
if (user_data_base.PAM(user_id, password)) {
|
||||||
login_stack.push(std::make_pair(user_id, 0));
|
login_stack.push(std::make_pair(user_id, 0));
|
||||||
login_count[user_id]++;
|
login_count[user_id]++;
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
return std::vector<std::string>({"Invalid"});
|
return std::vector<std::string>({"Invalid"});
|
||||||
}
|
}
|
||||||
@ -163,7 +195,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteLogout(
|
|||||||
}
|
}
|
||||||
login_count[login_stack.top().first]--;
|
login_count[login_stack.top().first]--;
|
||||||
login_stack.pop();
|
login_stack.pop();
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecuteRegister(
|
std::vector<std::string> BookStoreEngineClass::ExecuteRegister(
|
||||||
@ -175,7 +208,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteRegister(
|
|||||||
if (user_data_base.GetPrevilege(user_id) != -1)
|
if (user_data_base.GetPrevilege(user_id) != -1)
|
||||||
return std::vector<std::string>({"Invalid"});
|
return std::vector<std::string>({"Invalid"});
|
||||||
user_data_base.AddUser(user_id, password, user_name, 1);
|
user_data_base.AddUser(user_id, password, user_name, 1);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecutePasswd(
|
std::vector<std::string> BookStoreEngineClass::ExecutePasswd(
|
||||||
@ -198,12 +232,14 @@ std::vector<std::string> BookStoreEngineClass::ExecutePasswd(
|
|||||||
return std::vector<std::string>({"Invalid"});
|
return std::vector<std::string>({"Invalid"});
|
||||||
}
|
}
|
||||||
user_data_base.ChangePassword(user_id, new_password);
|
user_data_base.ChangePassword(user_id, new_password);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
if (!user_data_base.PAM(user_id, current_password))
|
if (!user_data_base.PAM(user_id, current_password))
|
||||||
return std::vector<std::string>({"Invalid"});
|
return std::vector<std::string>({"Invalid"});
|
||||||
user_data_base.ChangePassword(user_id, new_password);
|
user_data_base.ChangePassword(user_id, new_password);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecuteUserAdd(
|
std::vector<std::string> BookStoreEngineClass::ExecuteUserAdd(
|
||||||
@ -222,7 +258,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteUserAdd(
|
|||||||
if (user_data_base.GetPrevilege(user_id) != -1)
|
if (user_data_base.GetPrevilege(user_id) != -1)
|
||||||
return std::vector<std::string>({"Invalid"});
|
return std::vector<std::string>({"Invalid"});
|
||||||
user_data_base.AddUser(user_id, password, user_name, privilege);
|
user_data_base.AddUser(user_id, password, user_name, privilege);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecuteDelete(
|
std::vector<std::string> BookStoreEngineClass::ExecuteDelete(
|
||||||
@ -238,7 +275,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteDelete(
|
|||||||
if (user_data_base.GetPrevilege(user_id) == -1)
|
if (user_data_base.GetPrevilege(user_id) == -1)
|
||||||
return std::vector<std::string>({"Invalid"});
|
return std::vector<std::string>({"Invalid"});
|
||||||
user_data_base.DeleteUser(user_id);
|
user_data_base.DeleteUser(user_id);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecuteShow(
|
std::vector<std::string> BookStoreEngineClass::ExecuteShow(
|
||||||
@ -324,7 +362,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteSelect(
|
|||||||
tmp.second = BI_tmp.bid;
|
tmp.second = BI_tmp.bid;
|
||||||
// debugPrint("selected bid=", tmp.second);
|
// debugPrint("selected bid=", tmp.second);
|
||||||
login_stack.push(tmp);
|
login_stack.push(tmp);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecuteMOdify(
|
std::vector<std::string> BookStoreEngineClass::ExecuteMOdify(
|
||||||
@ -362,7 +401,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteMOdify(
|
|||||||
// debugPrint("successfully checked keyword");
|
// debugPrint("successfully checked keyword");
|
||||||
book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second),
|
book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second),
|
||||||
new_ISBN, name, author, keyword, price, -1);
|
new_ISBN, name, author, keyword, price, -1);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecuteImport(
|
std::vector<std::string> BookStoreEngineClass::ExecuteImport(
|
||||||
@ -385,7 +425,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteImport(
|
|||||||
book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second),
|
book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second),
|
||||||
"", "", "", "", -1, tmp.quantity_remain + quantity);
|
"", "", "", "", -1, tmp.quantity_remain + quantity);
|
||||||
log_data_base.AddImport(tmp.bid, quantity, total_cost);
|
log_data_base.AddImport(tmp.bid, quantity, total_cost);
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> BookStoreEngineClass::ExecuteShowFinance(
|
std::vector<std::string> BookStoreEngineClass::ExecuteShowFinance(
|
||||||
@ -450,7 +491,8 @@ std::vector<std::string> BookStoreEngineClass::ExecuteReport(
|
|||||||
log_data_base.FetchOperationRecord(ret, true);
|
log_data_base.FetchOperationRecord(ret, true);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
return std::vector<std::string>();
|
return is_server ? std::vector<std::string>({""})
|
||||||
|
: std::vector<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string BookStoreEngineClass::QueryUserInfo(const std::string &user_name) {
|
std::string BookStoreEngineClass::QueryUserInfo(const std::string &user_name) {
|
||||||
|
@ -7,54 +7,71 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- <ul id="messages"></ul>
|
|
||||||
<form id="form" action="">
|
|
||||||
<textarea id="input" autocomplete="off" ></textarea><button id="submit_button" type="button">Send</button>
|
|
||||||
</form> -->
|
|
||||||
<script src="/socket.io/socket.io.js"></script>
|
<script src="/socket.io/socket.io.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
function generateRandomString(length) {
|
||||||
|
let result = '';
|
||||||
|
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
|
const charactersLength = characters.length;
|
||||||
|
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
const socket = io();
|
const socket = io();
|
||||||
// const form = document.getElementById('form');
|
let __raw_response="";
|
||||||
// const input = document.getElementById('input');
|
|
||||||
// const messages = document.getElementById('messages');
|
|
||||||
// form.addEventListener("keydown", function(event) {
|
|
||||||
// if (event.key === "Enter") {
|
|
||||||
// event.stopPropagation();
|
|
||||||
// console.log('enter triggered');
|
|
||||||
// if (event.ctrlKey) {
|
|
||||||
// console.log('ctrl triggered');
|
|
||||||
// event.preventDefault();
|
|
||||||
// if (input.value) {
|
|
||||||
// socket.emit('request', input.value);
|
|
||||||
// input.value = '';
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// console.log('ctrl not triggered');
|
|
||||||
// event.preventDefault();
|
|
||||||
// input.value=input.value;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// form.addEventListener('submit', (e) => {
|
|
||||||
// console.log('submit triggered');
|
|
||||||
// e.preventDefault();
|
|
||||||
// });
|
|
||||||
// var button = document.getElementById("submit_button");
|
|
||||||
// button.addEventListener('click', function(e) {
|
|
||||||
// e.preventDefault();
|
|
||||||
// console.log('button triggered');
|
|
||||||
// if (input.value) {
|
|
||||||
// socket.emit('request', input.value);
|
|
||||||
// input.value = '';
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
socket.on('response', (msg) => {
|
socket.on('response', (msg) => {
|
||||||
console.log("Get response from sever: "+msg);
|
__raw_response=msg;
|
||||||
// const item = document.createElement('div');
|
|
||||||
// item.textContent = msg;
|
|
||||||
// messages.appendChild(item);
|
|
||||||
// window.scrollTo(0, document.body.scrollHeight);
|
|
||||||
});
|
});
|
||||||
|
function sleep(ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
async function RawRequest(raw_request){
|
||||||
|
socket.emit('request', raw_request);
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
if(__raw_response!=""){
|
||||||
|
let response=__raw_response;
|
||||||
|
__raw_response="";
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
await sleep(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function Request(req)
|
||||||
|
{
|
||||||
|
let operation_count=localStorage.getItem("operation_count");
|
||||||
|
let session_token=localStorage.getItem("session_token");
|
||||||
|
let outhentication_key=localStorage.getItem("outhentication_key");
|
||||||
|
operation_count++;
|
||||||
|
let raw_request="#Request "+session_token+" "+operation_count+" "+outhentication_key+"\n"+req;
|
||||||
|
let raw_response=await RawRequest(raw_request);
|
||||||
|
let line_numbers_of_res=parseInt(raw_response.split('\n')[0].split(' ')[2]);
|
||||||
|
let response="";
|
||||||
|
if(line_numbers_of_res>=1) response=raw_response.split('\n')[1];
|
||||||
|
for(let i=0;i<line_numbers_of_res-1;i++){
|
||||||
|
response+="\n"+raw_response.split('\n')[i+2];
|
||||||
|
}
|
||||||
|
localStorage.setItem("operation_count", operation_count);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
let session_token=localStorage.getItem("session_token");
|
||||||
|
let outhentication_key=localStorage.getItem("outhentication_key");
|
||||||
|
let operation_count=localStorage.getItem("operation_count");
|
||||||
|
(async () => {
|
||||||
|
if(session_token==null||outhentication_key==null||operation_count==null){
|
||||||
|
let tmp_channel=generateRandomString(10);
|
||||||
|
let ret=await RawRequest('#OpenSession '+tmp_channel);
|
||||||
|
operation_count=0;
|
||||||
|
session_token=ret.split('\n')[1].split(' ')[0];
|
||||||
|
outhentication_key=ret.split('\n')[1].split(' ')[1];
|
||||||
|
localStorage.setItem("session_token", session_token);
|
||||||
|
localStorage.setItem("outhentication_key", outhentication_key);
|
||||||
|
localStorage.setItem("operation_count", operation_count);
|
||||||
|
}
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Reference in New Issue
Block a user