Newer
Older
// file system to load / look at our available modules / edit them
const fs = require('fs')
// express serves files, http makes the connection
const app = require('express')()
const http = require('http').Server(app)
// websocket, to share program representations with the client (and back)
const WebSocket = require('ws')
SERVER AND WS SETUP --------------------------------------------------
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
var sckt = null
function startHttp() {
// serving this handful of static files
app.get('/', (req, res) => {
console.log('client req /')
res.sendFile(__dirname + '/client/index.html')
})
app.get('/:file', (req, res) => {
console.log('client req', req.params.file)
res.sendFile(__dirname + '/client/' + req.params.file)
})
// through this window
http.listen(8080, () => {
console.log('listening on 8080 for static files')
})
}
function startWs() {
// and listening for requests here
const wss = new WebSocket.Server({ port: 8081 })
wss.on('connection', (ws) => {
sckt = ws
// say hello
socketSend('console', 'hello client')
// send current config as list of all modules
console.log('socket open on 8081')
ws.on('message', (evt) => {
socketRecv(evt)
})
/*
HOOKUP REF TO TL ------------------------------------------------------
*/
function assignProgram(prgm) {
program = prgm
}
/*
RECV / SEND PORTALS ---------------------------------------------------
*/
function socketRecv(evt) {
var recv = JSON.parse(evt)
var type = recv.type
var data = recv.data
//console.log('RECV', recv)
// bang thru
switch (type) {
case 'console':
console.log('RECV CONSOLE:', data)
break
case 'get current program':
uiRequestCurrentProgram()
break
case 'get module menu':
uiRequestModuleMenu()
break
case 'load program':
uiRequestLoadProgram()
break
default:
console.log('ERR server recv with non recognized type', recv)
break
}
}
function socketSend(type, data) {
if (sckt) {
var msg = {
type: type,
data: data
}
//console.log('SEND', msg)
sckt.send(JSON.stringify(msg))
}
}
/*
HEAP -> UI HANDLES ---------------------------------------------------
*/
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
console.log('SEND PROGRAMS TO UI')
var prgRep = {
description: {
name: program.description.name,
id: program.description.id,
path: program.description.path
},
modules: {}
}
for (mdlName in program.modules) {
var mdlRep = Reps.makeFromModule(program.modules[mdlName])
prgRep.modules[mdlName] = mdlRep
}
socketSend('put program', prgRep)
}
function uiRequestModuleMenu() {
var availableSourceRep = {}
var dir = fs.readdirSync('./src')
for (i in dir) {
availableSourceRep[dir[i]] = {}
var subdir = fs.readdirSync('./src/' + dir[i])
for (j in subdir) {
// find js files
if (subdir[j].slice(-3) === '.js') {
var obj = {}
obj.path = './src/' + dir[i] + '/' + subdir[j]
availableSourceRep[dir[i]][subdir[j].slice(0, -3)] = obj
}
}
}
socketSend('put module menu', availableSourceRep)
/*
UI -> HEAP HANDLES ---------------------------------------------------
*/
function uiRequestLoadProgram(data){
console.log('UI REQUEST TO OPEN NEW PROGRAM', data)
}
function uiRequestNewModule(data) {
console.log('UI REQUEST ADD MODULE TO PROGRAM', data)
}
function uiRequestStateChange(data) {
console.log('UI REQUEST CHANGE STATE IN MODULE', data)
// do state.obj.emit
}
function uiRequestLinkChange(data) {
console.log('UI REQUEST ADD EVENT LINK', data)
}
function uiRequestUiChange(data) {
console.log('UI REQUEST ADD / CHANGE UI INFO TO MODULE', data)
// do it in module.description
}
/*
EXPORTS --------------------------------------------------------------
*/