refactor: decouple avocadoServer

This commit is contained in:
cha0s 2019-04-03 18:34:15 -04:00
parent cbad2cac0e
commit 25da6f1e7b
2 changed files with 11 additions and 10 deletions

View File

@ -8,9 +8,9 @@ import {StateSynchronizer} from '@avocado/state';
import {createEntityForConnection} from './create-entity-for-connection';
import {createRoom} from './create-server-room';
// Create game.
export default function(avocadoServer) {
avocadoServer.on('connect', createConnectionListener(avocadoServer));
setInterval(createMainLoop(avocadoServer), 1000 / 80);
export default function() {
setInterval(createMainLoop(), 1000 / 80);
return createConnectionListener();
}
// Create room.
const room = createRoom();
@ -20,7 +20,7 @@ const stateSynchronizer = new StateSynchronizer({
room,
});
// Connection listener.
function createConnectionListener(avocadoServer) {
function createConnectionListener() {
return (socket) => {
// Create and track a new entity for the connection.
const entity = createEntityForConnection(socket);
@ -35,12 +35,12 @@ function createConnectionListener(avocadoServer) {
// Add entity to room.
room.addEntityToLayer(entity, 'everything');
// Listen for events.
socket.on('message', createMessageListener(avocadoServer, socket));
socket.on('disconnect', createDisconnectionListener(avocadoServer, socket));
socket.on('message', createMessageListener(socket));
socket.on('disconnect', createDisconnectionListener(socket));
}
}
// Handle incoming messages.
function createMessageListener(avocadoServer, socket) {
function createMessageListener(socket) {
const {entity} = socket;
return ({type, payload}) => {
switch (type) {
@ -51,7 +51,7 @@ function createMessageListener(avocadoServer, socket) {
};
}
// Handle disconnection.
function createDisconnectionListener(avocadoServer, socket) {
function createDisconnectionListener(socket) {
const {entity} = socket;
return () => {
entity.destroy();
@ -59,7 +59,7 @@ function createDisconnectionListener(avocadoServer, socket) {
}
// Main loop.
let lastTime = performance.now();
function createMainLoop(avocadoServer) {
function createMainLoop() {
return () => {
const now = performance.now();
const elapsed = (now - lastTime) / 1000;

View File

@ -6,4 +6,5 @@ httpServer.listen(8420, '0.0.0.0');
// Start game server.
import createGame from './game';
const avocadoServer = new Server(httpServer);
createGame(avocadoServer);
const connectionListener = createGame();
avocadoServer.on('connect', connectionListener);