finish apl nuke v1.0.0
parent
cc3f53051f
commit
9393d91a9c
@ -1,3 +1,4 @@
|
|||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=5000
|
PORT=5000
|
||||||
CMS_TOKEN=
|
CMS_TOKEN=
|
||||||
|
MONGO_URI=
|
@ -0,0 +1,24 @@
|
|||||||
|
const { Schema, model } = require('mongoose')
|
||||||
|
|
||||||
|
const casters = new Schema({
|
||||||
|
username: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
image: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const Caster = model('Casters', casters)
|
||||||
|
|
||||||
|
module.exports = Caster
|
@ -1,10 +1,13 @@
|
|||||||
import { Schema, model } from 'mongoose';
|
const mongoose = require('mongoose');
|
||||||
|
|
||||||
const events = new Schema({
|
const events = new mongoose.Schema({
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
|
unique: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default model('Events', events);
|
const Event = mongoose.model('Events', events)
|
||||||
|
|
||||||
|
module.exports = Event
|
@ -0,0 +1,24 @@
|
|||||||
|
const { Schema, model } = require('mongoose')
|
||||||
|
|
||||||
|
const hosts = new Schema({
|
||||||
|
username: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
image: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const Host = model('Hosts', hosts)
|
||||||
|
|
||||||
|
module.exports = Host
|
@ -0,0 +1,21 @@
|
|||||||
|
let uuids = [];
|
||||||
|
|
||||||
|
const get = (id) => {
|
||||||
|
if (uuids.indexOf(id) !== -1)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const push = (id) => {
|
||||||
|
uuids.push(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
const pop = (id) => {
|
||||||
|
uuids = uuids.filter((x) => x !== id)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
get,
|
||||||
|
push,
|
||||||
|
pop
|
||||||
|
};
|
@ -0,0 +1,29 @@
|
|||||||
|
const channels = [
|
||||||
|
'rosters',
|
||||||
|
'matches',
|
||||||
|
'streams',
|
||||||
|
'events',
|
||||||
|
'casters',
|
||||||
|
'hosts',
|
||||||
|
];
|
||||||
|
|
||||||
|
const events = [
|
||||||
|
'create',
|
||||||
|
'read',
|
||||||
|
'update',
|
||||||
|
'delete',
|
||||||
|
];
|
||||||
|
|
||||||
|
const channelEvents = [];
|
||||||
|
|
||||||
|
channels.forEach((c) => {
|
||||||
|
events.forEach((e) => {
|
||||||
|
channelEvents.push(`${c}:${e}`);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
channelEvents,
|
||||||
|
channels,
|
||||||
|
events,
|
||||||
|
};
|
@ -0,0 +1,171 @@
|
|||||||
|
const events = require('../models/events')
|
||||||
|
const rosters = require('../models/rosters')
|
||||||
|
const matches = require('../models/matches')
|
||||||
|
const streams = require('../models/streams')
|
||||||
|
const casters = require('../models/casters')
|
||||||
|
const hosts = require('../models/hosts')
|
||||||
|
|
||||||
|
const eventFns = {
|
||||||
|
getAll: async () => {
|
||||||
|
return await events.find().exec()
|
||||||
|
},
|
||||||
|
getById: async (id) => {
|
||||||
|
return await events.findById(id).exec()
|
||||||
|
},
|
||||||
|
update: async(id, data) => {
|
||||||
|
return await events.findByIdAndUpdate(id, data).exec()
|
||||||
|
},
|
||||||
|
delete: async (id) => {
|
||||||
|
return await events.findByIdAndDelete(id).exec()
|
||||||
|
},
|
||||||
|
create: async (data) => {
|
||||||
|
try {
|
||||||
|
const ev = new events(data)
|
||||||
|
ev.save((err) => {
|
||||||
|
if (err)
|
||||||
|
throw err;
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const rosterFns = {
|
||||||
|
getAll: async () => {
|
||||||
|
return await rosters.find().exec()
|
||||||
|
},
|
||||||
|
getById: async (id) => {
|
||||||
|
return await rosters.findById(id).exec()
|
||||||
|
},
|
||||||
|
update: async(id, data) => {
|
||||||
|
return await rosters.findByIdAndUpdate(id, data).exec()
|
||||||
|
},
|
||||||
|
delete: async (id) => {
|
||||||
|
return await rosters.findByIdAndDelete(id).exec()
|
||||||
|
},
|
||||||
|
create: async (data) => {
|
||||||
|
try {
|
||||||
|
const ev = new rosters(data)
|
||||||
|
ev.save((err) => {
|
||||||
|
if (err)
|
||||||
|
throw err;
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const matchFns = {
|
||||||
|
getAll: async () => {
|
||||||
|
return await matches.find().exec()
|
||||||
|
},
|
||||||
|
getById: async (id) => {
|
||||||
|
return await matches.findById(id).exec()
|
||||||
|
},
|
||||||
|
update: async(id, data) => {
|
||||||
|
return await matches.findByIdAndUpdate(id, data).exec()
|
||||||
|
},
|
||||||
|
delete: async (id) => {
|
||||||
|
return await matches.findByIdAndDelete(id).exec()
|
||||||
|
},
|
||||||
|
create: async (data) => {
|
||||||
|
try {
|
||||||
|
const ev = new matches(data)
|
||||||
|
ev.save((err) => {
|
||||||
|
if (err)
|
||||||
|
throw err;
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const streamFns = {
|
||||||
|
getAll: async () => {
|
||||||
|
return await streams.find().exec()
|
||||||
|
},
|
||||||
|
getById: async (id) => {
|
||||||
|
return await streams.findById(id).exec()
|
||||||
|
},
|
||||||
|
update: async(id, data) => {
|
||||||
|
return await streams.findByIdAndUpdate(id, data).exec()
|
||||||
|
},
|
||||||
|
delete: async (id) => {
|
||||||
|
return await streams.findByIdAndDelete(id).exec()
|
||||||
|
},
|
||||||
|
create: async (data) => {
|
||||||
|
try {
|
||||||
|
const ev = new streams(data)
|
||||||
|
ev.save((err) => {
|
||||||
|
if (err)
|
||||||
|
throw err;
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const casterFns = {
|
||||||
|
getAll: async () => {
|
||||||
|
return await casters.find().exec()
|
||||||
|
},
|
||||||
|
getById: async (id) => {
|
||||||
|
return await casters.findById(id).exec()
|
||||||
|
},
|
||||||
|
update: async(id, data) => {
|
||||||
|
return await casters.findByIdAndUpdate(id, data).exec()
|
||||||
|
},
|
||||||
|
delete: async (id) => {
|
||||||
|
return await casters.findByIdAndDelete(id).exec()
|
||||||
|
},
|
||||||
|
create: async (data) => {
|
||||||
|
try {
|
||||||
|
const ev = new casters(data)
|
||||||
|
ev.save((err) => {
|
||||||
|
if (err)
|
||||||
|
throw err;
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const hostFns = {
|
||||||
|
getAll: async () => {
|
||||||
|
return await hosts.find().exec()
|
||||||
|
},
|
||||||
|
getById: async (id) => {
|
||||||
|
return await hosts.findById(id).exec()
|
||||||
|
},
|
||||||
|
update: async(id, data) => {
|
||||||
|
return await hosts.findByIdAndUpdate(id, data).exec()
|
||||||
|
},
|
||||||
|
delete: async (id) => {
|
||||||
|
return await hosts.findByIdAndDelete(id).exec()
|
||||||
|
},
|
||||||
|
create: async (data) => {
|
||||||
|
try {
|
||||||
|
const ev = new hosts(data)
|
||||||
|
ev.save((err) => {
|
||||||
|
if (err)
|
||||||
|
throw err;
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'events': eventFns,
|
||||||
|
'rosters': rosterFns,
|
||||||
|
'matches': matchFns,
|
||||||
|
'streams': streamFns,
|
||||||
|
'casters': casterFns,
|
||||||
|
'hosts': hostFns,
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
const { pop } = require('../uuids')
|
||||||
|
const { channelEvents } = require('./channels')
|
||||||
|
const crud = require('./crud')
|
||||||
|
|
||||||
|
const connections = {};
|
||||||
|
|
||||||
|
const handler = (ws, id) => {
|
||||||
|
connections[id] = {
|
||||||
|
connection: ws,
|
||||||
|
events: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
event: 'info',
|
||||||
|
data: 'Welcome to APL Nuke v1.0.0!'
|
||||||
|
}))
|
||||||
|
|
||||||
|
ws.on('message', (msg) => handleMsg(msg, id))
|
||||||
|
ws.on('close', () => {
|
||||||
|
delete connections[id]
|
||||||
|
pop(id)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleMsg = async (msg, id) => {
|
||||||
|
try {
|
||||||
|
const d = JSON.parse(msg)
|
||||||
|
if (d.hasOwnProperty('subscribe') && channelEvents.indexOf(d.subscribe) !== -1) {
|
||||||
|
const channel = d.subscribe.split(':')[0]
|
||||||
|
connections[id].events.push(d.subscribe)
|
||||||
|
connections[id].connection.send(JSON.stringify(await crud[channel].getAll()))
|
||||||
|
} else if (d.hasOwnProperty('event') && channelEvents.indexOf(d.event) !== -1) {
|
||||||
|
const ev = d.event.split(':')
|
||||||
|
const channel = ev[0]
|
||||||
|
const event = ev[1]
|
||||||
|
console.log(`received event for ${channel} with data %s`, d.data)
|
||||||
|
switch (event) {
|
||||||
|
case 'create':
|
||||||
|
await crud[channel].create(d.data)
|
||||||
|
fanoutMsg(channel, await crud[channel].getAll())
|
||||||
|
break;
|
||||||
|
case 'update':
|
||||||
|
await crud[channel].update(d.data.id, d.data.data)
|
||||||
|
fanoutMsg(channel, await crud[channel].getAll())
|
||||||
|
break;
|
||||||
|
case 'delete':
|
||||||
|
await crud[channel].delete(d.data.id)
|
||||||
|
fanoutMsg(channel, await crud[channel].getAll())
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fanoutMsg = (channel, data) => {
|
||||||
|
Object.keys(connections).forEach((k) => {
|
||||||
|
if (connections[k].events.indexOf(`${channel}:read`) !== -1) {
|
||||||
|
connections[k].connection.send(JSON.stringify(data))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = handler
|
@ -1,5 +0,0 @@
|
|||||||
const WebSocket = require('ws')
|
|
||||||
|
|
||||||
let wss = null
|
|
||||||
|
|
||||||
module.exports = wss;
|
|
Loading…
Reference in New Issue