raspibot/staticExpress.js
2021-06-13 13:51:44 +02:00

97 lines
2.7 KiB
JavaScript

/* Pakete die wir brauchen */
var bot = require('./bot.js')
var express = require('express')
const fs = require('fs')
// Erzeugt die Express Applikation
var app = express()
/* Nutzen einer statischen WebSeite */
app.use(express.static('public'))
// Wir nutzen ein paar statische Ressourcen
app.use('/css', express.static(__dirname + '/public/css'))
app.use('/js', express.static(__dirname + '/public/js'))
app.use('/pics', express.static(__dirname + '/public/pics'))
// Wir starten den Express server
var server = app.listen(8081, function () {
var address = server.address()
console.log(address)
console.log('Server started at http://localhost:8081')
})
// Das brauchen wir für unsere Websockets
var WSS = require('websocket').server,
http = require('http')
// Erzeugt den Webserver und hört auf den angegebenen Port
var server = http.createServer()
server.listen(8181)
/* Wir erstellen einen Bot, der kann sich aber noch nicht mit
* dem Socket Server verbinden, da dieser noch nicht läuft
*/
var myBot = new bot()
// Hier erstellen wir den Server für den Websocket
var wss = new WSS({
httpServer: server,
autoAcceptConnections: false
})
// Abspeichern der Verbindungen
var connections = {}
// Wenn Sich ein client Socket mit dem Server verbinden will kommt er hier an
wss.on('request', function (request) {
var connection = request.accept('chat', request.origin)
connection.on('message', function (message) {
var name = ''
for (var key in connections) {
if (connection === connections[key]) {
name = key
}
}
var data = JSON.parse(message.utf8Data)
var msg = 'leer'
// Variablen um später den letzten Satz und den Sender zu speichern
var uname
var utype
var umsg
switch (data.type) {
case 'join':
// Wenn der Typ join ist füge ich den Client einfach unserer Liste hinzu
connections[data.name] = connection
msg = '{"type": "join", "names": ["' + Object.keys(connections).join('","') + '"]}'
if (myBot.connected === false) {
myBot.connect()
}
break
case 'msg':
// Erstelle eine Nachricht in JSON mit Typ, Sender und Inhalt
msg = '{"type": "msg", "name": "' + name + '", "msg":"' + data.msg + '"}'
utype = 'msg'
uname = name
umsg = data.msg
break
}
// Sende alle daten an alle verbundenen Sockets
for (var key in connections) {
if (connections[key] && connections[key].send) {
connections[key].send(msg)
}
}
// Leite die Daten des Users an den Bot weiter, damit der antworten kann
if (uname !== 'Raspi-Bot' && utype === 'msg') {
var test = myBot.post(umsg,uname)
}
})
})