feat: added socketio to server
This commit is contained in:
parent
90a3085077
commit
2bb8ac647c
6589
package-lock.json
generated
6589
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -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",
|
||||
|
26
src/Server/EventManager.ts
Normal file
26
src/Server/EventManager.ts
Normal 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
|
6
src/Server/Interfaces/IEventManager.ts
Normal file
6
src/Server/Interfaces/IEventManager.ts
Normal file
@ -0,0 +1,6 @@
|
||||
interface IEventManager {
|
||||
listen(eventName: string, callback: any): void,
|
||||
emit(eventName: string, detail: any): void
|
||||
}
|
||||
|
||||
export default IEventManager
|
@ -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
|
@ -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 }
|
Loading…
x
Reference in New Issue
Block a user