97 lines
2.7 KiB
JavaScript
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)
|
|
}
|
|
})
|
|
})
|