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": { "dependencies": {
"@tensorflow-models/coco-ssd": "^2.2.1", "@tensorflow-models/coco-ssd": "^2.2.1",
"@tensorflow/tfjs": "^2.8.2", "@tensorflow/tfjs": "^2.8.2",
"express": "^4.17.1" "express": "^4.17.1",
"socket.io": "^3.1.0"
}, },
"devDependencies": { "devDependencies": {
"@types/express": "^4.17.11", "@types/express": "^4.17.11",
"@types/socket.io": "^2.1.12",
"ts-loader": "^8.0.13", "ts-loader": "^8.0.13",
"typescript": "^4.1.3", "typescript": "^4.1.3",
"webpack": "^5.11.1", "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 express from 'express'
import path from 'path' import path from 'path'
import bodyParser from 'body-parser' 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 { class Server {
public app = express() public app = express()
private eventManager: IEventManager
constructor () { constructor (port: number) {
this.createApp() this.createApp()
this.setupAppOptions() this.setupAppOptions()
this.setupAppRoutes() this.setupAppRoutes()
this.startServer(port)
this.eventManager = new EventManager()
} }
createApp = () => { createApp = () => {
this.app.use(express.json()) this.app.use(express.json())
this.app.use(express.urlencoded({ extended: false })) 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()) this.app.use(bodyParser.json())
} }
setupAppRoutes = () => { setupAppRoutes = () => {
// this.app.use('/api', apiRouter)
this.app.use('/', (request, response, next) => { this.app.use('/', (request, response, next) => {
response.sendFile(path.join(process.cwd(), './dist/Vision/index.html')) response.sendFile(path.join(process.cwd(), './dist/Vision/index.html'))
}) })
@ -33,6 +39,31 @@ class Server {
next() 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 export default Server

View File

@ -1,29 +1,24 @@
import http from 'http'
import Server from './Server' 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 = () => { 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') eventManager.listen('onReceiveOffsets', (offsets: unknown[]) => {
const webService = createServer() console.log(offsets)
webService.listen(port, () => {
console.log(`Server is listening on ${port}`)
}) })
} }
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() main()
export { main, createServer, normalizePort } export { main }