2013-07-23 17:45:38 -04:00
2013-07-22 20:02:20 -04:00
2013-05-05 23:50:15 -04:00
2013-06-08 16:43:37 -04:00
2013-05-05 23:00:43 -04:00
2013-07-23 17:45:38 -04:00

GarageServer.IO

A simple, lightweight, HTML multiplayer game server (and client) for Node.js

Features

  • Authoritative Game Server
  • Client Side / Input Prediciton
  • Client Side Smooting
  • Entity Interpolation
  • Server State History
  • Server and Client Messaging

Quick Start

Server

Client

// Initialize GarageServer.IO
GarageServerIO.initializeGarageServer('http://insertmygameurlhere.com', {
    onReady: function () {
        // Call your game loop
    },
    onUpdatePlayerPrediction: function (state, inputs, deltaTime) {
        // If using client, process over inputs using current state and return new state
    },
    onInterpolation: function (previousState, targetState, amount) {
        // If interpolating, return new state
   },
    onWorldState: function (state) {
        // Extract world state sent from server
    }
};

// Inside render loop, extract states
GarageServerIO.getStates(function (playerStates, entityStates) {
    playerStates.forEach(function (player) {
        ctxCanvas.fillRect(player.state.x, player.state.y, 5, 5);
    });

    entityStates.forEach(function (entity) {
        ctxCanvas.fillRect(entity.state.x, entity.state.y, 5, 5);
    });
});

// Inside physics loop, capture and send input
GarageServerIO.addInput(myInput);

API

Client

GarageServerIO.initializeGarageServer(path, options)

options = {
    onPlayerConnect(callback),
    onPlayerDisconnect(callback),
    onPlayerReconnect(callback),
    onPlayerUpdate(callback(state)),
    onEntityUpdate(callback(state)),
    onPlayerRemove(callback(id)),
    onEntityRemove(callback(id)),
    onEvent(callback(data)),
    onWorldState(callback(state)),
    onPing(callback(pingDelay)),
    onUpdatePlayerPrediction(callback(state, inputs, deltaTime) : newState),
    onInterpolation(callback(previousState, targetState, amount) : newState),
    onReady(callback),
    logging: true
}
GarageServerIO.addInput(input)
GarageServerIO.getStates(callback([player1State, player2State, ...], [entity1State, entity2State, ...]))
GarageServerIO.getId() : playerid
GarageServerIO.sendServerEvent(data)

Server

require('.garageserver.io').createGarageServer(io, options) : GarageServerIO

options = {
    stateInterval: 45,
    logging: true,
    clientSidePrediction: true,
    interpolation: true,
    interpolationDelay: 100,
    smoothingFactor: 0.3,
    pingInterval: 2000,
    maxUpdateBuffer: 120,
    maxHistorySecondBuffer: 1000,
    worldState: {},
    onPlayerConnect(callback(socket)),
    onPlayerInput(callback(socket, input)),
    onPlayerDisconnect(callback(socket)),
    onPing(callback(socket, data)),
    onEvent(callback(data))
}
GarageServerIO.start()
GarageServerIO.stop()
GarageServerIO.getPlayers() : [{ id, state, [input1, input2,...], [{ state1, executionTime1 }, { state2, executionTime2 }, ...] }]
GarageServerIO.getEntities() : [{ id, state, [{ state1, executionTime1 }, { state2, executionTime2 }, ...] }]
GarageServerIO.updatePlayerState(id, state)
GarageServerIO.updateEntityState(id, state)
GarageServerIO.addEntity(id)
GarageServerIO.removeEntity(id)
GarageServerIO.sendPlayerEvent(id, data)
GarageServerIO.sendPlayersEvent(data)

Resources

License

MIT License

S
Description
A simple, lightweight, HTML multiplayer game server (and client) for Node.js
Readme 593 KiB
Languages
JavaScript 97.7%
Pug 1.5%
CSS 0.8%