container-db
Version:
Database with embedded sockets for real-time communication
635 lines (452 loc) • 15.9 kB
JavaScript
const DB = require("../DB/db.js")
const io = require("socket.io-client");
const express = require("express")
const app = express();
class Client{
constructor(address){
this.db = new DB(address);
this.socket = io("http://localhost:2310");
this.socket2 = io("http://localhost:2310");
this.server = app.listen(2311, ()=>{
console.log("Client Running")
})
this.socketServer = require("socket.io")(this.server, {cors:{origin: "*"}})
this.socket2.on("added", (data)=>{
this.socketServer.sockets.emit("added", data);
})
this.socket2.on("createdContainer", (data) => {
this.socketServer.sockets.emit("createdContainer", data);
})
this.socket2.on("updatedField", (data)=>{
this.socketServer.sockets.emit("updatedField", data);
})
this.socket2.on("deletedField", (data)=>{
this.socketServer.sockets.emit("deletedField", data);
})
this.socket2.on("deletedContainer", (data)=>{
this.socketServer.sockets.emit("deletedContainer", data);
})
this.socket2.on("foundOneAndUpdated", (data)=>{
this.socketServer.sockets.emit("foundOneAndUpdated", data);
})
this.socket2.on("foundOneAndDeleted", (data)=>{
this.socketServer.sockets.emit("foundOneAndDeleted", data);
})
this.socket2.on("foundOneAndUpdated", (data)=>{
this.socketServer.sockets.emit("foundOneAndUpdated", data);
})
this.socket2.on("foundOneAllAndDeleted", (data)=>{
this.socketServer.sockets.emit("foundAllAndDeleted", data);
})
this.socket2.on("pushed", (data)=>{
this.socketServer.sockets.emit("pushed", data);
})
this.socket2.on("pulled", (data)=>{
this.socketServer.sockets.emit("pulled", data);
})
this.socket2.on("pulledAll", (data)=>{
this.socketServer.sockets.emit("pulledAll");
})
}
createContainer(name, type, data){
if(!data){
data = {}
}
const opts = {
name : name,
type: type,
data: data
}
return new Promise((resolve, reject) => {
let timer;
this.socket.emit("createContainer", opts)
function responseHandler(message) {
// resolve promise with the value we got
resolve(message);
clearTimeout(timer);
}
this.socket.once('createdContainer', responseHandler);
timer = setTimeout(() => {
reject(new Error("timeout waiting for msg"));
this.socket.removeListener('msg', responseHandler);
}, 10000);
});
}
addField(name, container, data){
const opts = {
field: name,
container: container,
data: data
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("addField", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("added", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
getField(container, field){
const opts = {
field: field,
container : container
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("getField", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("gotField", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
getContainer(container){
const opts = {
container: container
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("getContainer", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("gotContainer", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
updateField(container, field, property, dataToUpdate){
const opts = {
container: container,
field: field,
property: property,
data: dataToUpdate
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("updateField", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("updatedField", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
deleteField(container, field){
const opts = {
container: container,
field: field
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("deleteField", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("deletedField", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
deleteContainer(container){
const opts = {
container: container
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("deleteContainer", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("deletedContainer", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
getAllContainers(){
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("getContainers", "all")
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("gotContainers", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
findOne(container, property, value){
const opts = {
container: container,
field: property,
value: value
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("findOne", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("foundOne", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
findAll(container, property, value){
const opts = {
container: container,
field: property,
value: value
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("findAll", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("foundAll", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
findOneAndUpdate(container, property, value, dataToUpdate){
const opts = {
container: container,
field: property,
value: value,
data: dataToUpdate
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("findOneAndUpdate", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("foundOneAndUpdated", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
findOneAndDelete(container, property, value){
const opts = {
container: container,
field: property,
value: value
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("findOneAndDelete", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("foundOneAndDeleted", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
findAllAndDelete(container, property, value){
const opts = {
container: container,
field: property,
value: value
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("findAllAndDelete", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("foundAllAndDeleted", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
findAllAndUpdate(container, property, value, dataToUpdate){
const opts = {
container: container,
field: property,
value: value,
data: dataToUpdate
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("findAllAndUpdate", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("foundAllAndUpdated", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
push(container, field, arrayName, value){
const opts = {
container: container,
field: field,
arrayName: arrayName,
value: value
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("push", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("pushed", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
pull(container, field, arrayName, value){
const opts = {
container: container,
field: field,
arrayName: arrayName,
value: value
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("pull", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("pulled", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
pullAll(container, field, arrayName){
const opts = {
container: container,
field: field,
arrayName: arrayName
}
return new Promise((resolve, reject)=>{
let timer;
this.socket.emit("pullAll", opts)
function handler(message){
resolve(message)
clearTimeout(timer)
}
this.socket.once("pulledAll", handler)
timer = setTimeout(()=>{
reject(new Error("timeout waiting for msg"))
this.socket.removeListener("added", handler)
}, 10000)
})
}
}
class ContainerManager{
constructor(container, client){
this.container = container;
this.client = client;
}
async addField(name, data){
const res = await this.client.addField(name, this.container, data);
return res
}
async getField(field){
const res = await this.client.getField(this.container, field);
return res
}
async getContainer(){
const res = await this.client.getContainer(this.container);
return res
}
async updateField(field, property, dataToUpdate){
const res = await this.client.updateField(this.container, field, property, dataToUpdate);
return res
}
async deleteField(field){
const res = await this.client.deleteField(this.container, field);
return res
}
async findOne(property, value){
const res = await this.client.findOne(this.container, property, value);
return res
}
async findAll(property, value){
const res = await this.client.findAll(this.container, property, value);
return res
}
async findOneAndUpdate(property, value, data){
const res = await this.client.findOneAndUpdate(this.container, property, value, data);
return res
}
async findOneAndDelete(property, value, data){
const res = await this.client.findOneAndDelete(this.container, property, value)
return res
}
async findAllAndUpdate(property, value, data){
const res = await this.client.findAllAndUpdate(this.container, property, value, data);
return res
}
async findAllAndDelete(property, value){
const res = await this.client.findAllAndDelete(this.container, property, value)
return res
}
async push(field, arrayName, value){
const res = await this.client.push(this.container, field, arrayName, value);
return res
}
async pull(field, arrayName, value){
const res = await this.client.pull(this.container, field, arrayName, value);
return res
}
async pullAll(field, arrayName){
const res = await this.client.pullAll(this.container, field, arrayName);
return res
}
}
module.exports = {Client, ContainerManager};