Coder Social home page Coder Social logo

johnbox's Introduction

Johnbox

A private server implementation in NodeJS for modern Jackbox Games services (Ecast / API v2).

Currently, this server only supports hosting 1 room at a time.

This project is not related to or endorsed by Jackbox Games, Inc.

Supported Software

Tested known working games:

  • The Jackbox Party Pack 7
    • Quiplash 3
    • Champ'd Up
    • Blather Round
    • Talking Points
    • The Devils and the Details (requires Audience explicitly disabled)
  • The Jackbox Party Pack 8
    • Job Job (requires Audience explicitly disabled)
    • Drawful Animate
  • Drawful 2 International

Tested known non-working games:

  • Quiplash 2 InterLASHional
    • Quiplash 2 InterLASHional only uses API v2 for gathering server info. Rooms are still handled via blobcast.
  • The Jackbox Party Pack 6
    • All games in Party Pack 6 only use API v2 for gathering server info. Rooms are still handled via blobcast.
  • All games prior use Blobcast / API v1 (likely not the true names), which uses socketio for WebSockets and is currently not supported.

Unimplemented features

  • Object security
  • Multiple rooms
  • Client reconnection
  • Room passcodes
  • Audiences
  • Moderation features
  • UGC (user-made episodes, etc)
  • Blobcast / API v1(? what is the real name)

Usage

This is NOT meant to be used in any form of serious environment. This is an experimental testing server, and there is no way to safely configure a web browser to connect to this server currently.

  1. npm install ws to install the WebSockets NodeJS module.
  2. Generate a TLS certificate for the web server to use.
  3. Edit the top of johnbox.js to change accessibleHost to a host accessible by all players (e.g. public IP)
    • This host must have a valid identity in the TLS certificate generated above
  4. node johnbox to start the server.
  5. Redirect the game to connect to your server. jbg.config.jet in each minigame folder has a serverUrl parameter.

johnbox's People

Contributors

invoxiplaygames avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

johnbox's Issues

Implement the `lock` opcode

In order for Party Pack 9 to work with this server, it is essential that this opcode be implemented. My guess is that it's for "locking in" your answers in-game.

This is an example conversation between the ecast server, 1 host, and 2 players.

Welcome messages

Host Received: {"pc":0,"opcode":"client/welcome","result":{"id":1,"secret":"acbee8a31d3660758b87fa55","reconnect":false,"deviceId":"061bb8c28d.39e52f0dc5af5f1fb4dd31","entities":{},"here":{},"profile":null}}
Host Received: {"pc":1,"opcode":"client/connected","result":{"id":2,"userId":"cf857a72-e8ae-4ebd-92ab-7fdac160c475","name":"ISAAC","role":"player","reconnect":false,"profile":{"id":2,"roles":{"player":{"name":"ISAAC"}}}}}
Player 1 Received: {"pc":1,"opcode":"client/welcome","result":{"id":2,"name":"ISAAC","secret":"3e55d390-e822-4673-89d7-b9189ece81b3","reconnect":false,"deviceId":"03fc7cf552.12f10eec9fc54e20133f21","entities":{},"here":{"1":{"id":1,"roles":{"host":{}}}},"profile":{"id":2,"roles":{"player":{"name":"ISAAC"}}}}}
Host Received: {"pc":2,"opcode":"client/connected","result":{"id":3,"userId":"3d9845dd-ac69-4183-a5e9-dc69934b3f58","name":"ISAAC2","role":"player","reconnect":false,"profile":{"id":3,"roles":{"player":{"name":"ISAAC2"}}}}}
Player Two Received: {"pc":2,"opcode":"client/welcome","result":{"id":3,"name":"ISAAC2","secret":"0213201d-235e-4d88-b6cc-9b0d0db6d1b3","reconnect":false,"deviceId":"0165f909d4.d3d6b6f6f4feb347c8ebcc","entities":{},"here":{"1":{"id":1,"roles":{"host":{}}},"2":{"id":2,"roles":{"player":{"name":"ISAAC"}}}},"profile":{"id":3,"roles":{"player":{"name":"ISAAC2"}}}}}

Host creates text

Host Received: {"pc":3,"re":1,"opcode":"ok","result":{}}
Player 1 Received: {"pc":3,"opcode":"text","result":{"key":"name:3","val":"LOCK","version":0,"from":1}}

Player 1 updates text

Player 1 Received: {"pc":4,"re":2,"opcode":"ok","result":{}}
Host Received: {"pc":4,"opcode":"text","result":{"key":"name:3","val":"DUCK","version":1,"from":2}}

Player 1 sends lock

Player 1 Received: {"pc":6,"re":4,"opcode":"ok","result":{}}
Host Received: {"pc":6,"opcode":"lock","result":{"key":"name:3","from":2}}

Host sends room/exit

Player Two Received: {"pc":8,"opcode":"room/exit","result":{"cause":5}}
Host Received: {"pc":8,"re":5,"opcode":"ok","result":{}}
Player 1 Received: {"pc":8,"opcode":"room/exit","result":{"cause":5}}
Host Received: normal close
Player Two Received: normal close
Player 1 Received: normal close

I've tried implementing this API myself based on this conversation, but it only partially works, I must be missing something

The game connects endlessly

Hi! I started the server, specified my working server address and certificates in the config, but the game endlessly submits requests to /api/v2/rooms. Is there a solution or am I doing something wrong?
There is a screenshot:
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.