Code Monkey home page Code Monkey logo

kartlobby's Introduction

( Φ ω Φ )

karashiiro's github statsTop Langs

My projects

Applications

Repository Description Language
dalamud-plugin-dl-count-gh-badge Dalamud plugin download count badge JavaScript
discord-png2fakegif Converts PNGs into (mostly) still GIFs that Discord recognizes as animated emotes. Go
DiscordClocks Clocks for your Discord servers. Go
discord-stream-preview Small API for grabbing the Go Live preview image from a user in an accessible server. Go
DTwitterFeed A Discord bot that reposts tweets into text channels, additionally translating them if necessary. Go
FFXIVOpcodeWizard An automatic opcode identification program for FFXIV. Doubles as a working dictionary of the game's opcodes and how to create their conditions. C#
Gittlz A Git server for the laziest of us. Write and test your Git utilities without any hassle. Go
goatcorp/operator The goatcorp email reporting service. Go
lodestone-when Website for estimating FFXIV character creation time. JavaScript
Universalis-FFXIV/Universalis A crowdsourced market board API for FFXIV. C#
Universalis-FFXIV/mogboard-next Mogboard, the frontend for the Universalis crowdsourced market data API. TypeScript

Plugins

Dalamud

Repository Description Language Downloads
PingPlugin A ping display plugin for Dalamud. C# Download count
SoundSetter A Dalamud plugin that allows volume control from anywhere, including gpose and cutscenes. C# Download count
TextToTalk Chat TTS plugin for Dalamud. Has support for triggers/exclusions, and WebSocket support for external interfacing. C# Download count

Packages/Libraries

General-Purpose

Repository Description Language
blowfish-tables Runtime generation of Blowfish tables in a single header file. C
GradientDotNet Image gradient functions implemented in C#. C#
justeyecenters Real-time detection of eye centers from a cropped image. Go
@the-convocation/twitter-scraper A port of n0madic/twitter-scraper to Node.js. TypeScript

Final Fantasy XIV

Repository Description Language
ffxiv-teamcraft/pcap-ffxiv A library for capturing FFXIV game packets in JS/TS. TypeScript
FFXIVWeather FFXIV weather forecast library for C# applications. C#
FFXIVWeather.Lumina FFXIV weather forecast library for C# applications operating on a system with a local game installation. C#
ffxivweather-py FFXIV weather forecast library for Python applications. Python
garlandtools-api Unofficial Node wrapper for the Garland Tools API. JavaScript
xivapi/godestone Go scraper for The Lodestone. Go

Phantasy Star Online 2

Repository Description Language
patch-tool Simple patch file viewer for PSO2. TypeScriptPython
PSO2News PSO2 news scraper. C#

Other resources

Repository Description Language
FFXIVOpcodes JSON opcode repository for FFXIV. C#
lodestone-id-time Data scraper, formula and reference implementation for the estimated creation time of a FFXIV character given its Lodestone ID. GoPython
xivapi/lodestone-css-selectors CSS selectors for the Lodestone.
xiv-resources A list of websites and tools for FFXIV.
Dalamud Plugin Project Templates for Visual Studio
Repository Description Language
DalamudPluginProjectTemplate An opinionated Visual Studio project template for Dalamud plugins, with attributes for more maintainable command setup and teardown. C#
DalamudPluginVB An opinionated Visual Studio project template for Dalamud plugins, with attributes for more maintainable command setup and teardown. Visual Basic .NET
DalamudPluginFSharp An opinionated Visual Studio project template for Dalamud plugins, with attributes for more maintainable command setup and teardown. F#
DalamudPluginPython A Visual Studio template for creating a new Dalamud plugin project in Python. C#Python
DalamudPluginLua A Visual Studio template for creating a new Dalamud plugin project in Lua. C#Lua

kartlobby's People

Contributors

karashiiro avatar

Watchers

 avatar  avatar

kartlobby's Issues

Web list of instances

Self-explanatory. The REST API would provide a simplified PT_SERVERINFO/PT_PLAYERINFO list which would be loaded by some web dashboard for public viewing. It should also show the addon hash for the room, as described in #1.

kartlobby Docker image

The official setup method for the lobby server should be as a Docker image, with volumes configured for addons etc., application configuration, and Docker sockets. This will minimize potential environment-related errors, and make writing a setup guide much easier. Accordingly, configuration options for these things shouldn't need to be documented for server operators.

This will also mean that executable releases won't need to be published; the GitHub container registry will be our release method.

Selective passcode support

There should be some way of starting a room that requires a passcode, so that passcode rooms can be hosted on the same lobby server as non-passcode rooms. Not sure how this could work if you have multiple rooms with the same passcode, but maybe we can just say that rooms with the same passcode are load-balanced like non-passcode rooms.

Balance waiting players between rooms

Since we don't get waiting player counts from the server info packets, we need to balance players added to full rooms when our instances are maxed out, so we don't just reject waiting players. Ideally we'd have a hook or a Lua script installed to give us this information, but failing that, we can just spread waiters evenly across our open containers.

Reuse proxy servers to avoid port exhaustion

If we create a proxy UDP server for every single player, and we have a port binding for every single room, the system will run out of ports after a few ten thousand or so. We should reuse proxy connections between rooms, while ensuring that no proxy is used multiple times for the same room.

Distributed ban list

The ban list should be shared across instances using some sort of distributed store, like TiDB. Some sort of hook will be needed to read the server's ban lists into the database, and read bans back from the database.

Room stats CLI

In order to monitor containers better, there should be a command-line tool that shows the name of each running container and the players in each of those containers. Planned workflow would look something like:

> kartlobby ps
CONTAINER        PLAYERS
some_container   Player 1  Player 2  Player 3  Player 4
                 Player 5
other_container  Player 6  Player 7  Player 8  Player 9
> docker logs -f some_container
logs...

Proxy killer to avoid port exhaustion

When a game server doesn't send any data to a proxy for a few seconds, it should be closed to avoid eventual port exhaustion. This is more urgent than #10, since there is a very real possibility that an instance might not close for a very long time, leading to unclosed proxies killing the server.

Add support for configuring the Docker image

There should be a config file or something that lets people use Docker images that they've created in the server, for example if they're using modified binaries. This should be kept in mind before considering using hooks, Lua is probably the way to go for compatibility.

Architecture diagrams

I should make some diagrams showing how different parts of the system work. It gives me a headache just to work on, so explaining it to other people is bound to be a mess if I don't have some decent documentation to remind myself of what I did. The comments are nice, but they only explain functions, not the whole system.

Allow addons to be changed without player interruption

Since we're creating new application instances for each room, we should be able to change the addons in use and have that take effect for every new instance, without affecting existing ones. Those instances will eventually die off until only instances with the newer addon lists are left. This will need some flag or file list hash to close off existing instances to new joiners.

Connection persistence and container ID tracking in Redis

If the lobby server goes down for some reason, connections should not be dropped when the server is restarted. The game instances behind the lobby server will still be running, so no game state will be lost. All that needs to be done to restore connections is to persist the connection map into a database of some kind.

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.