Added ux to vanilla client, rebuild server side
This commit is contained in:
@@ -3,6 +3,7 @@ const fs = require('fs')
|
||||
const bodyParser = require('body-parser')
|
||||
const cors = require('cors')
|
||||
const config = require('../config.json')
|
||||
const signal = require('./signal')
|
||||
const https = require('https')
|
||||
const WebSocketServer = require('ws').Server
|
||||
|
||||
@@ -18,109 +19,17 @@ app.use(cors())
|
||||
app.use(bodyParser.urlencoded({ extended: false }))
|
||||
app.use(bodyParser.json())
|
||||
|
||||
app.use(express.static('./client'))
|
||||
app.use(express.static('../../client'))
|
||||
|
||||
server.listen(port, () => {
|
||||
console.log(`Launching Lil'Streamy on ${port}`)
|
||||
})
|
||||
|
||||
|
||||
|
||||
var users = {}
|
||||
|
||||
wss.on('connection', function(connection) {
|
||||
console.log('User connected')
|
||||
|
||||
connection.on('message', (message) => onMessage(connection, message))
|
||||
connection.on('message', (message) => signal.onMessage(connection, message))
|
||||
|
||||
connection.on('close', () => onClose(connection))
|
||||
connection.on('close', () => signal.onClose(connection))
|
||||
})
|
||||
|
||||
function sendTo(connection, message) {
|
||||
connection.send(JSON.stringify(message))
|
||||
}
|
||||
|
||||
function onClose(connection) {
|
||||
if(connection.name) {
|
||||
delete users[connection.name]
|
||||
|
||||
if(connection.otherName) {
|
||||
console.log('Disconnecting from ', connection.otherName)
|
||||
var conn = users[connection.otherName]
|
||||
conn.otherName = null
|
||||
|
||||
if(conn != null) {
|
||||
sendTo(conn, {
|
||||
type: 'leave'
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onMessage(connection, message) {
|
||||
var data
|
||||
|
||||
try {
|
||||
data = JSON.parse(message);
|
||||
} catch (e) {
|
||||
console.log('Invalid JSON')
|
||||
data = {}
|
||||
}
|
||||
|
||||
switch (data.type) {
|
||||
case 'login' :
|
||||
console.log('User logged', data.name);
|
||||
if(users[data.name]) {
|
||||
sendTo(connection, {
|
||||
type: 'login',
|
||||
success: false
|
||||
})
|
||||
} else {
|
||||
users[data.name] = connection
|
||||
connection.name = data.name
|
||||
|
||||
sendTo(connection, {
|
||||
type: 'login',
|
||||
success: true
|
||||
})
|
||||
}
|
||||
break
|
||||
|
||||
case 'leave' :
|
||||
console.log('Disconnecting from', data.name)
|
||||
var conn = users[data.name]
|
||||
conn.otherName = null
|
||||
|
||||
//notify the other user so he can disconnect his peer connection
|
||||
/*
|
||||
if(conn != null) {
|
||||
sendTo(conn, {
|
||||
type: 'leave'
|
||||
});
|
||||
}*/
|
||||
break;
|
||||
|
||||
case 'userlist' :
|
||||
console.log('Send list to', data.name)
|
||||
sendTo(connection, {
|
||||
type: 'userlist',
|
||||
list: users
|
||||
});
|
||||
break
|
||||
|
||||
default:
|
||||
if (data.target){
|
||||
var targetConnection = users[data.target];
|
||||
if(targetConnection){
|
||||
console.log('Forward message from ' + data.name + ' to ' + data.target + ' (' + data.type + ')')
|
||||
sendTo(targetConnection, data)
|
||||
}
|
||||
} else {
|
||||
sendTo(connection, {
|
||||
type: 'error',
|
||||
message: 'Command not found: ' + data.type
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
const WebSocketServer = require('ws').Server
|
||||
|
||||
var wss = new WebSocketServer({port: 9090})
|
||||
|
||||
var users = {}
|
||||
|
||||
wss.on('connection', function(connection) {
|
||||
console.log('User connected')
|
||||
|
||||
connection.on('message', (message) => onMessage(connection, message))
|
||||
|
||||
connection.on('close', () => onClose(connection))
|
||||
})
|
||||
var users = new Map()
|
||||
|
||||
function sendTo(connection, message) {
|
||||
connection.send(JSON.stringify(message))
|
||||
connection.send(JSON.stringify(message))
|
||||
}
|
||||
|
||||
function broadcast(message) {
|
||||
console.log('Broadcast '+message)
|
||||
var jsonMessage = JSON.stringify(message)
|
||||
Object.keys(users).forEach(function(key) {
|
||||
users[key].send(jsonMessage)
|
||||
})
|
||||
}
|
||||
|
||||
function getUserlist(){
|
||||
var usersArray = []
|
||||
Object.keys(users).forEach(function(key) {
|
||||
usersArray.push(key)
|
||||
})
|
||||
return usersArray
|
||||
}
|
||||
|
||||
function onClose(connection) {
|
||||
@@ -60,43 +64,67 @@ function onMessage(connection, message) {
|
||||
type: 'login',
|
||||
success: true
|
||||
})
|
||||
|
||||
broadcast({
|
||||
type: 'userlist',
|
||||
users: getUserlist()
|
||||
})
|
||||
}
|
||||
break
|
||||
|
||||
case 'leave' :
|
||||
console.log('Disconnecting from', data.name)
|
||||
var conn = users[data.name]
|
||||
conn.otherName = null
|
||||
users[data.name] = null
|
||||
|
||||
//notify the other user so he can disconnect his peer connection
|
||||
//notify the other
|
||||
/*
|
||||
if(conn != null) {
|
||||
sendTo(conn, {
|
||||
type: 'leave'
|
||||
broadcast({
|
||||
type: 'leave',
|
||||
name: data.name
|
||||
});
|
||||
}*/
|
||||
break;
|
||||
break
|
||||
|
||||
case 'userlist' :
|
||||
console.log('Send list to', data.name)
|
||||
sendTo(connection, {
|
||||
type: 'userlist',
|
||||
list: users
|
||||
});
|
||||
users: getUserlist()
|
||||
})
|
||||
break
|
||||
|
||||
default:
|
||||
if (data.target){
|
||||
var targetConnection = users[data.target];
|
||||
if(targetConnection){
|
||||
if (data.target) {
|
||||
if (data.target == data.name) {
|
||||
sendTo(connection, {
|
||||
type: 'error',
|
||||
message: 'No loopback'
|
||||
})
|
||||
break
|
||||
}
|
||||
var targetConnection = users[data.target]
|
||||
if (targetConnection) {
|
||||
console.log('Forward message from ' + data.name + ' to ' + data.target + ' (' + data.type + ')')
|
||||
sendTo(targetConnection, data)
|
||||
} else {
|
||||
sendTo(connection, {
|
||||
type: 'error',
|
||||
message: 'Peer not found'
|
||||
})
|
||||
}
|
||||
} else {
|
||||
sendTo(connection, {
|
||||
type: 'error',
|
||||
message: 'Command not found: ' + data.type
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
sendTo,
|
||||
broadcast,
|
||||
onClose,
|
||||
onMessage
|
||||
}
|
||||
Reference in New Issue
Block a user