Skip to content

Simple nodejs server for multiuser usage. Allows to create independent sessions.

License

Notifications You must be signed in to change notification settings

ALapinskas/gameserver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gameserver

Simple nodejs server for multiuser usage: multiplayer games, chats, webrtc apps, etc. It allow creating independent sessions for users and delegate messages only inside them. Websocket and socket.io based.

The idea

Each session should have its own id, or name.
Emitting a uniq id/name will create a new session. You will try to join that session, if the id/name is already exist.
Emitting other messages will be delegated only to participants 
joined to the same session.
Inactive sessions will be automatically removed

Using

ServerSide http

copy/paste files to your web-server
npm i
npm start

ServerSide https

For https connection you should provide valid certificate and cert key paths:
CERT="/var/certs/cert.crt" KEY="/var/certs/cert.key" npm start

Specify port

PORT=9999 npm start

ClientSide

install socket.io, attach library

connect to server from point 1 with socket.io lib: 
const socket = io(serverAddress, {withCredentials: true});

Use events to emit(socket.emit(event, parameters)):
_________________________________________________
|   event             | parameters:type = default|
_________________________________________________
|   'gatherRoomsInfo' |                         |   
|   'create or join'  | room:string,            |
|                     | state:Object = {},      |
|                     | maxPlayers:number = 2   |
|                     | maxMessages:number = 10 |
|   'restart'         | state:Object = {}       |
|   'message'         | message:Object          |
_________________________________________________ 

events to listen(socket.on(event, parameters)):
______________________________________________________________________________
|   event      | parameters | receiver | info                                |
______________________________________________________________________________
 'roomsInfo'     rooms:Array  conn peer  Received after gatherRoomsInfo will be emitted
 'created'       room state   conn peer  Received after a new room has been created    
 'joined'        room, state  all peers  Received when somebody joined to a room  
 'full'          room         conn peer  Received when tried to join for overflowed room
 'log'           message      conn peer  Debug logging
 'message'       message      all peers  Received, when somebody, emits 'message' event
 'disconnected'  socketId     all peers  Received, when somebody disconnects
 'restarted'     state        all peers  Received, when somebody emits 'restart' event, and
                                          resets the application state
 'connect_error' err          conn peer  Received, when client have connection troubles

Run /examples/tic-tac-toe folder:

1. Start server with http locally:
    npm start
2. Navigate to /examples/tic-tac-toe
3. Install node_modules:
    npm i
4. Start client:
    npm start
5. Visit http://localhost:8080

Examples hosted:

Tic-tac-toe, 2 player game: https://tictactoe.tw1.ru
Webrtc video call app: https://webrtc.reslc.ru/

gameserver

Простой nodejs сервер для: многопользовательских игр, чатов, приложений для видео-звонков, итд. Позволяет создавать независимые сессии для пользователей и рассылать сообщения только внутри них. Работает на вебсокетах и socket.io

Идея

Каждая сессия должна иметь свое уникальное имя/id
Создавая сообщение с уникальным именем/id создаст новую сессию. Если имя/id уже существует,
вы будете пытаться присоединится к этой сессии.
Последующая рассылка будет производится только пользователям внутри этой сессии.
Неактивные сессии автоматический удаляются.

Использование

Сервер http

скопируйте содержимое на ваш сервер
npm i
npm start

Сервер https

Чтобы запустить сервер с https соединением нужно указать путь к валидному сертификату и ключу:
CERT="/var/certs/cert.crt" KEY="/var/certs/cert.key" npm start

Указать порт

PORT=9999 npm start

Клиент

установите socket.io

создайте соединение с сервером: 
const socket = io(serverAddress, {withCredentials: true});

отправляйте сообщения:
socket.emit(event, parameters)
_________________________________________________
|   event             | parameters:type = default|
_________________________________________________
|   'gatherRoomsInfo' |                         |   
|   'create or join'  | room:string,            |
|                     | state:Object = {},      |
|                     | maxPlayers:number = 2   |
|                     | maxMessages:number = 10 |
|   'restart'         | state:Object = {}       |
|   'message'         | message:Object          |
_________________________________________________ 

Слушайте сообщения с сервера:
socket.on(event, parameters)
______________________________________________________________________________
|   event      | parameters | receiver | info                                |
______________________________________________________________________________
 'roomsInfo'     rooms:Array  conn peer  Получаем, после отправки gatherRoomsInfo
 'created'       room state   conn peer  Получаем, когда создается новая комната
 'joined'        room, state  all peers  Получаем, когда кто-то присоединяется к комнате  
 'full'          room         conn peer  Получаем, когда пытаются 
                                         присоединится к заполненной комнате
 'message'       message      all peers  Получаем, когда создают 'message' сообщение
 'disconnected'  socketId     all peers  Получаем, когда создают 'disconnects'
 'restarted'     state        all peers  Получаем, когда создают 'restart' сообщение и 
                                         текущее состояние сбрасывается
 'log'           message      conn peer  Отладочные сообщения
 'connect_error' err          conn peer  Получаем, когда на клиенте ошибки с подключением

Запустить /examples/tic-tac-toe папку:

1. Запустите http локально:
    npm start
2. Перейдите в папку /examples/tic-tac-toe
3. Установите node_modules:
    npm i
4. Запустите клиент:
    npm start
5. Запустите браузер и перейдите по адресу http://localhost:8080

Примеры он-лайн:

Крестики-нолики: https://tictactoe.tw1.ru
Приложение для видео-звонков: https://webrtc.reslc.ru/

About

Simple nodejs server for multiuser usage. Allows to create independent sessions.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published