MySQL (experimental)

This commit is contained in:
Eason010212
2023-03-07 00:38:25 +08:00
parent 8e7b85828b
commit 5ad36c5fd0
5 changed files with 183 additions and 20 deletions

View File

@@ -15,16 +15,12 @@ mkdir logs
cd ../
chmod -R 777 mixio
cd mixio
if [ ! -d "node_modules" ]; then
npm install
fi
npm install
cd node_modules/cliff/node_modules/winston/lib/winston
find -name 'common.js' | xargs perl -pi -e 's|target.padLevels|false|g'
cd ../../../../../../
cd src
if [ ! -d "node_modules" ]; then
npm install
fi
npm install
pkg -t node16-linux-arm64 package.json
mv -f loader ../../mixio_linux_arm64/src/loader
cp -r certs ../../mixio_linux_arm64/src

View File

@@ -1,3 +1,5 @@
curpath=$(cd "$(dirname "$0")"; pwd)
cd ${curpath}
version="{
\"version\":\"1.9.6\",
\"platform\":\"win-x64\",
@@ -13,10 +15,12 @@ mkdir logs
cd ../
chmod -R 777 mixio
cd mixio
npm install
cd node_modules/cliff/node_modules/winston/lib/winston
find -name 'common.js' | xargs perl -pi -e 's|target.padLevels|false|g'
cd ../../../../../../
cd src
npm install
pkg -t node16-win-x64 package.json
mv -f loader ../../mixio_win_x64/src/loader
cp -r certs ../../mixio_win_x64/src

View File

@@ -12,5 +12,11 @@
"BAIDU_MAP_AK": "",
"BAIDU_MAP_SERVER_AK": "",
"ADMIN_USERNAME":"admin",
"ADMIN_PASSWORD":"public"
"ADMIN_PASSWORD":"public",
"STORAGE_ENGINE":"sqlite",
"MYSQL_HOST":"localhost",
"MYSQL_PORT":3306,
"MYSQL_USER":"",
"MYSQL_PASS":"",
"MYSQL_DB":"mixio"
}

View File

@@ -29,6 +29,15 @@ if(!fs.existsSync(configPath)){
var configs = fs.readFileSync(configPath);
configs = JSON.parse(configs.toString());
var STORAGE_ENGINE = configs["STORAGE_ENGINE"]
var mysql = require('mysql8');
var MYSQL_HOST = configs["MYSQL_HOST"]
var MYSQL_USER = configs["MYSQL_USER"]
var MYSQL_PASS = configs["MYSQL_PASS"]
var MYSQL_DB = configs["MYSQL_DB"]
var MYSQL_PORT = configs["MYSQL_PORT"]
var MAX_MESSAGE_PER_USER = configs["MAX_MESSAGE_PER_USER"]
var MAX_MESSAGE_PER_SECOND = configs["MAX_MESSAGE_PER_SECOND"]
@@ -547,7 +556,10 @@ var mixioServer = function() {
var payload = String(packet.payload)
if (topic.length == 3) {
if (topic[2] == 'b640a0ce465fa2a4150c36b305c1c11b') {
db.run("insert or ignore into devices (userName, clientid) values (?,?)", [topic[0], payload])
if(STORAGE_ENGINE == "sqlite")
db.run("insert or ignore into devices (userName, clientid) values (?,?)", [topic[0], payload])
else if(STORAGE_ENGINE == "mysql")
db.run("insert ignore into devices (userName, clientid) values (?,?)", [topic[0], payload])
} else if (topic[2] == '9d634e1a156dc0c1611eb4c3cff57276') {
db.run("delete from devices where userName = ? and clientid = ?", [topic[0], payload])
delete globalConnectionControl[client.id]
@@ -1569,22 +1581,89 @@ var mixioServer = function() {
if(fs.existsSync(mixlyPath)){
app.use('/mixly', express.static(mixlyPath));
}
var dbPath = "./mixio.db"
if(!fs.existsSync(dbPath)) {
dbPath = path.join(__dirname,'./mixio.db')
if(STORAGE_ENGINE == 'sqlite'){
var dbPath = "./mixio.db"
if(!fs.existsSync(dbPath)) {
dbPath = path.join(__dirname,'./mixio.db')
}
db = new sqlite3.Database(
dbPath,
sqlite3.OPEN_READWRITE,
function(err) {
if (err) {
console.log(err.message)
}
db.run('delete from devices')
console.log('[INFO] Storage Engine: SQLite')
console.log('[INFO] Database Connected!')
}
)
}
db = new sqlite3.Database(
dbPath,
sqlite3.OPEN_READWRITE,
function(err) {
else if(STORAGE_ENGINE == 'mysql'){
db = mysql.createConnection({
host: MYSQL_HOST,
port: MYSQL_PORT,
user: MYSQL_USER,
password: MYSQL_PASS
})
db.get = function(sql, params, callback) {
db.query(sql, params, function(err, rows) {
if (err) {
callback(err, null)
} else {
callback(null, rows[0])
}
})
}
db.run = function(sql, params, callback) {
db.query(sql, params, function(err, result) {
if(err)
{
if(callback)
{
callback(err)
}
}
else if(callback)
callback()
})
}
db.all = function(sql, params, callback) {
db.query(sql, params, function(err, rows) {
if (err) {
callback(err, null)
} else {
callback(null, rows)
}
})
}
// create database if not exists
db.query('create database if not exists ' + MYSQL_DB, function(err) {
if (err) {
console.log(err.message)
}
db.run('delete from devices')
console.log('[INFO] Database Connected!')
}
)
db.query('use ' + MYSQL_DB, function(err) {
if (err) {
console.log(err.message)
}
init_mysql(function(status,reason){
if(status == "error")
console.log(reason)
else if(status == "success")
{
console.log("[INFO] Database Initialized!")
db.query('delete from devices')
console.log('[INFO] Storage Engine: MySQL (' + MYSQL_HOST + ')')
console.log('[INFO] Database Connected!')
}
})
})
})
}
reserveDBs = []
for (var i = 1; i <= 8; i = i + 1) {
@@ -1654,6 +1733,83 @@ var mixioServer = function() {
}
function init_mysql(cb){
db.query(`CREATE TABLE IF NOT EXISTS devices (
userName VARCHAR(255),
clientid VARCHAR(255),
timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(clientid)
)`, function(err, result) {
if (err) {
cb("error", err)
}
else {
db.query(`CREATE TABLE IF NOT EXISTS project (
projectName VARCHAR(255),
userName VARCHAR(255),
projectLayout MEDIUMTEXT,
dataStorage MEDIUMTEXT,
logicStorage MEDIUMTEXT,
timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
projectType INTEGER
)`, function(err, result) {
if (err) {
cb("error", err)
}
else {
db.query(`CREATE TABLE IF NOT EXISTS share (
shareid VARCHAR(255),
userName VARCHAR(255),
projectName VARCHAR(255),
projectLayout MEDIUMTEXT,
dataStorage MEDIUMTEXT,
logicStorage MEDIUMTEXT,
timeStamp timestamp DEFAULT CURRENT_TIMESTAMP,
status INTEGER DEFAULT 1,
shareCount INTEGER DEFAULT 0
)`, function(err, result) {
if (err) {
cb("error", err)
}
else {
db.query(`CREATE TABLE IF NOT EXISTS share_key (
userName VARCHAR(255),
projectPass VARCHAR(255),
projectName VARCHAR(255),
share_key VARCHAR(255)
)`, function(err, result) {
if (err) {
cb("error", err)
}
else {
db.query(`CREATE TABLE IF NOT EXISTS user (
id INTEGER AUTO_INCREMENT,
username VARCHAR(255),
password VARCHAR(255),
salt VARCHAR(255),
is_superuser INTEGER DEFAULT 0,
verified INTEGER DEFAULT 1,
question VARCHAR(255),
answer VARCHAR(255),
PRIMARY KEY(id)
)`, function(err, result) {
if(err){
cb("error", err)
}
else{
cb("success", null)
}
})
}
})
}
})
}
})
}
})
}
daemon_start()
async function startOnce() {
mixio = await mixioServer()

View File

@@ -9,6 +9,7 @@
"js-md5": "^0.7.3",
"jsdom": "^19.0.0",
"mqtt": "^4.3.7",
"mysql8": "^2.17.3",
"net": "^1.0.2",
"sqlite3": "^5.0.2",
"websocket-stream": "^5.5.2"