finish apl nuke v1.0.0
parent
cc3f53051f
commit
9393d91a9c
@ -1,3 +1,4 @@
|
||||
NODE_ENV=development
|
||||
PORT=5000
|
||||
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: {
|
||||
type: String,
|
||||
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