Skip to content
Snippets Groups Projects
Commit 6465f5c9 authored by Jake Dreher's avatar Jake Dreher
Browse files

Create documents, initial websocket testing. ConnectionController works websocket.test does not.

parent faf33cad
Branches
No related tags found
1 merge request!61-develop-web-socket-code - There were issues with the previous Websocket...
node_modules
package-lock.json
doc/msg.png

29.8 KiB

@startuml
set separator ::
struct client::RequestNewGameMsg {
int msgid = 1
}
struct client::RequestMoveMsg {
int msgid = 2
int direction
}
struct client::JoinGameMsg {
int msgid = 3
string gameid
string nickname
string password
}
struct client::LeaveGameMsg {
int msgid = 4
string gameid
}
struct server::GameStartedMsg {
int msgid = 5
string gameid
}
struct server::GameEndedMsg {
int msgid = 6
string gameid
}
struct server::PlayerJoinedMsg {
int msgid = 7
string gameid
string nickname
}
struct server::PlayerLeftMsg {
int msgid = 8
string gameid
string nickname
}
struct server::GameUpdateMsg {
int msgid = 9
string gameid
int[][] localBoard // array of 100x100 centered on snake head
}
@enduml
doc/uml.png

22.7 KiB

@startuml
Client -> Router : connect(ws, 'game-protocol')
Router -> GameModel : getGame(gameId)
GameModel -> Game : new Game(gameId)
GameModel -> GameModel : new WebSocket()
GameModel -> GameModel : ws.onopen = () => { ws.send('{gameId}') }
GameModel -> GameModel : ws.onmessage = (msg) => { game.handleMessage(msg) }
@enduml
......@@ -10,5 +10,9 @@
"license": "ISC",
"devDependencies": {
"jest": "^29.7.0"
},
"dependencies": {
"express": "^4.19.2",
"websocket": "^1.0.35"
}
}
let WebSocketServer = require('websocket').server;
let express = require('express');
const protocols = {
ECHO: 'echo-protocol'
};
let connections = [];
module.exports = {
startServer : (port, hostname) => {
let app = express();
let server = app.listen(port, hostname, () => {
console.log(`Server is listening on ${hostname}:${port}`);
});
let wsServer = new WebSocketServer({
httpServer: app,
autoAcceptConnections: false
});
wsServer.on('request', (request) => {
if (!originIsAllowed(request.origin)) {
request.reject();
console.log(`Connection from origin ${request.origin} rejected.`);
return;
} else {
let connection = request.accept(protocols.ECHO, request.origin);
connections.push(connection);
connection.on('close', (reasonCode, description) => {
console.log(`Peer ${connection.remoteAddress} disconnected.`);
});
}
});
return {server: wsServer, app: server, connections: connections};
},
broadcast : (message) => {
connections.forEach((connection) => {
connection.sendUTF(message);
});
}
};
let originIsAllowed = (origin) => {
return true;
}
test('this is a test', () => {
expect(1 + 2).toBe(3);
});
let WebSocketClient = require('websocket').client;
let createClient = (port, hostname, protocol) => {
let WebSocketClient = require('websocket').client;
let client = new WebSocketClient();
client.on('connectFailed', (error) => {
console.log('Connect Error: ' + error.toString());
});
client.on('connect', (connection) => {
console.log('WebSocket Client Connected');
connection.on('error', (error) => {
console.log("Connection Error: " + error.toString());
});
connection.on('close', () => {
console.log(`${protocol} Connection Closed`);
});
connection.on('message', (message) => {
if (message.type === 'utf8') {
console.log("Received: '" + message.utf8Data + "'");
}
});
});
client.connect(`ws://${hostname}:${port}/`, protocol);
}
test('start websocket server', () => {
let ConnectionController = require('../src/route/connectionController');
let wsServer = ConnectionController.startServer(8080, 'localhost');
expect(wsServer).toBeDefined();
expect(wsServer.server).toBeDefined();
expect(wsServer.app).toBeDefined();
expect(wsServer.connections).toBeDefined();
console.log(wsServer.server);
let shutdown = () => {
wsServer.server.closeAllConnections();
wsServer.server.shutDown();
wsServer.app.close();
}
let client = createClient(8080, 'localhost', 'echo-protocol');
shutdown();
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment