Skip to content

Commit

Permalink
Implemented TCPServer for socket handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
dominiklippl committed Oct 6, 2020
1 parent 8d10793 commit 71074ed
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 30 deletions.
44 changes: 14 additions & 30 deletions app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import {apiRouter} from "./routes/ApiRoute";
import {authRouter} from "./routes/AuthRoute";
import {Server, Socket} from "socket.io";
import {OutgoingHttpHeaders} from "http";
import {TCPServer} from "./services/TCPServer";

export let server: TCPServer;

try {
//read .env file
Expand All @@ -38,42 +41,23 @@ try {
console.log('cloud rest-api listening on port ' + process.env.PORT);
});

const WebSocket = require('ws');
const wss = new WebSocket.Server({port: 3000});

let i: number;
wss.on('connection', function connection(ws: any) {
console.log("new connection")
ws.on('message', function incoming(message: any) {
console.log('Client: %s', message);
ws.send('Server: ' + i);
i++;
});

ws.send('hello');
});

// Normal Socket (Works with java)
// var i: number;
// const WebSocket = require('ws');
// const wss = new WebSocket.Server({port: 3000});
//
// const server = net.createServer((socket) => {
// socket.on('data', (data) => {
// console.log("Data: " + data.toString());
// socket.write('Resend ' + i);
// let i: number;
// wss.on('connection', function connection(ws: any) {
// console.log("new connection")
// ws.on('message', function incoming(message: any) {
// console.log('Client: %s', message);
// ws.send('Server: ' + i);
// i++;
// });
//
// socket.on('pingServer', function (data) {
// console.log("ping")
// //console.log(data);
// socket.emit('pingServer', data);
// });
// })
//
// server.listen(3000, function () {
// console.log(`Server listening for connection requests on socket localhost:3000`);
// ws.send('hello');
// });

// Normal Socket (Works with java)
server = new TCPServer(3000);
} catch (e) {
Sentry.captureException(e);
}
7 changes: 7 additions & 0 deletions routes/ApiRoute.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import express, {Request, Response} from "express";
import {server} from "../app";

export const apiRouter = express.Router();

Expand All @@ -8,3 +9,9 @@ apiRouter.get('/', (req: Request, res: Response) => {
version: process.env.npm_package_version
});
});

apiRouter.get('/test', (req: Request, res: Response) => {
console.log("test request")
server.sendMessage(`${req.header("message")}`);
res.sendStatus(200);
});
58 changes: 58 additions & 0 deletions services/TCPServer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import * as net from 'net'

const EventEmitter = require('events');

export class TCPServer extends EventEmitter {
private readonly server: net.Server;
private readonly connections: Array<net.Socket>;
private readonly port: number;

constructor(port: number) {
super();

this.connections = new Array<net.Socket>();
this.port = port;

this.server = net.createServer((socket) => {
this.connections.push(socket);

socket.on('data', (data) => {
console.log("Data: " + data);
this.sendMessage("Nachricht");
});

socket.on('connection', (data) => {
console.log("new connection");
});

socket.on('close', (data: net.Socket) => {
const index: number = this.connections.indexOf(socket, 0);
if (index > -1) {
this.connections.splice(index, 1);
}

console.log("connection closed");
});

socket.on('end', () => {
console.log("end");
});

socket.on('timeout', () => {
console.log("timeout");
});

});

this.server.listen(this.port, function () {
console.log(`Server listening for connection requests on socket localhost:3000`);
});
}

sendMessage(message: string) {
let socket: net.Socket;
for (socket of this.connections) {
socket.write(message);
}
}
}

0 comments on commit 71074ed

Please sign in to comment.