feat: added socketio to server

This commit is contained in:
ysandler 2021-01-22 18:07:01 -06:00 committed by joshuashoemaker
parent 90a3085077
commit 2bb8ac647c
6 changed files with 6656 additions and 41 deletions

6589
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -12,10 +12,12 @@
"dependencies": {
"@tensorflow-models/coco-ssd": "^2.2.1",
"@tensorflow/tfjs": "^2.8.2",
"express": "^4.17.1"
"express": "^4.17.1",
"socket.io": "^3.1.0"
},
"devDependencies": {
"@types/express": "^4.17.11",
"@types/socket.io": "^2.1.12",
"ts-loader": "^8.0.13",
"typescript": "^4.1.3",
"webpack": "^5.11.1",

View File

@ -0,0 +1,26 @@
import { EventEmitter } from 'events'
import IEventManager from './Interfaces/IEventManager'
let instance: EventManager | null = null
class EventManager implements IEventManager {
eventEmitter: EventEmitter
constructor () {
if (!instance) instance = this
this.eventEmitter = new EventEmitter()
return instance
}
listen = (eventName: string, callback: any) => {
this.eventEmitter.addListener(eventName, callback)
}
emit = (eventName: string, detail: any) => {
this.eventEmitter.emit(eventName, detail)
}
}
export default EventManager

View File

@ -0,0 +1,6 @@
interface IEventManager {
listen(eventName: string, callback: any): void,
emit(eventName: string, detail: any): void
}
export default IEventManager

View File

@ -1,25 +1,31 @@
import express from 'express'
import path from 'path'
import bodyParser from 'body-parser'
import http from 'http'
import { Socket } from 'socket.io'
import IEventManager from './Interfaces/IEventManager'
import EventManager from './EventManager'
class Server {
public app = express()
private eventManager: IEventManager
constructor () {
constructor (port: number) {
this.createApp()
this.setupAppOptions()
this.setupAppRoutes()
this.startServer(port)
this.eventManager = new EventManager()
}
createApp = () => {
this.app.use(express.json())
this.app.use(express.urlencoded({ extended: false }))
this.app.use(express.static(path.join(process.cwd(), '/build')))
this.app.use(express.static(path.join(process.cwd(), '/dist/Vision/')))
this.app.use(bodyParser.json())
}
setupAppRoutes = () => {
// this.app.use('/api', apiRouter)
this.app.use('/', (request, response, next) => {
response.sendFile(path.join(process.cwd(), './dist/Vision/index.html'))
})
@ -33,6 +39,31 @@ class Server {
next()
})
}
startServer = (port: number) => {
const webService = new http.Server(this.app)
const socketService = require("socket.io")(webService)
this.openSockets(socketService)
webService.listen(port, () => {
console.log(`Server is listening on ${port}`)
})
}
openSockets = (socketService: any) => {
socketService.on('connection', () => {
console.log('client connected')
})
socketService.on('message', (message: any) => {
console.log(message)
})
}
public onReceiveOffsets = (offsets: any[]) => {
this.eventManager.emit('onReceiveOffsets', offsets)
}
}
export default Server

View File

@ -1,29 +1,24 @@
import http from 'http'
import Server from './Server'
import EventManager from './EventManager'
import IEventManager from './Interfaces/IEventManager';
function sleep (ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const main = () => {
console.log('starting')
const port = 5005
const server = new Server(port)
const eventManager: IEventManager = new EventManager()
const port = normalizePort(process.env.PORT || '5005')
const webService = createServer()
webService.listen(port, () => {
console.log(`Server is listening on ${port}`)
eventManager.listen('onReceiveOffsets', (offsets: unknown[]) => {
console.log(offsets)
})
}
const createServer = () => {
const server = new Server()
return http.createServer(server.app)
}
const normalizePort = (portString: string) => {
const port = parseInt(portString, 10)
if (isNaN(port)) return portString
else if (port >= 0 ) return port
else return 0
}
main()
export { main, createServer, normalizePort }
export { main }