{"id":19121298,"url":"https://github.com/scarletredman/roompicker","last_synced_at":"2026-01-12T13:59:54.759Z","repository":{"id":214396022,"uuid":"717916935","full_name":"ScarletRedMan/RoomPicker","owner":"ScarletRedMan","description":"Simple stupid matchmaking system","archived":false,"fork":false,"pushed_at":"2024-05-27T03:14:25.000Z","size":1141,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-09T08:14:43.552Z","etag":null,"topics":["matchmaking","matchmaking-server","rest-api","spring","vaadin"],"latest_commit_sha":null,"homepage":"https://trello.com/b/7iO7yfs1/roompicker","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ScarletRedMan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-13T00:55:54.000Z","updated_at":"2024-09-09T11:26:27.000Z","dependencies_parsed_at":"2023-12-27T22:41:59.377Z","dependency_job_id":"ee89edad-2bec-4fef-a156-2fc476ca83e6","html_url":"https://github.com/ScarletRedMan/RoomPicker","commit_stats":null,"previous_names":["scarletredman/roompicker"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletRedMan%2FRoomPicker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletRedMan%2FRoomPicker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletRedMan%2FRoomPicker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletRedMan%2FRoomPicker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ScarletRedMan","download_url":"https://codeload.github.com/ScarletRedMan/RoomPicker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247070779,"owners_count":20878581,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["matchmaking","matchmaking-server","rest-api","spring","vaadin"],"created_at":"2024-11-09T05:16:41.748Z","updated_at":"2026-01-12T13:59:54.716Z","avatar_url":"https://github.com/ScarletRedMan.png","language":"Java","readme":"RoomPicker\n======\n\nSimple matchmaking system and load balancer. \n\nFeatures:\n- Simple to use. Everything works out of the box.\n- 3 picking methods (Sequential filling, Round Robin, Least picked).\n- Optional control panel.\n- Collecting metrics using Prometheus integration ([ready Grafana dashboard](./RoomPicker-Grafana-Dashboard.json)).\n\n**This project is under development. Do not use in production!**\n\n\nHow to use\n----------\n\nFirst you need start `RoomPicker Server` and then you can start `RoomPicker Control Panel` (if you need).\nAfter that, you can connect to the server using `RoomPicker Client`.\n\n\nExample of using the RoomPicker Client\n----------\n\nCreate a Node and a Room, after that, system pick up a room for 5 entities.\n```java\nclass Example {\n    public static void main(String[] args) {\n        var client = new RoomPickerClient(\n                \"http://dragonestia.ru:8080\",\n                \"admin\",\n                \"qwerty123\"\n        );\n\n        // Creating instance\n        var nodeId = NodeIdentifier.of(\"test-instance\");\n        var nodeDefinition = new NodeDefinition(nodeId)\n                .setPickingMethod(PickingMethod.LEAST_PICKED);\n        client.getNodeRepository().saveNode(nodeDefinition);\n\n        // Creating room\n        var roomId = RoomIdentifier.of(\"test-room\");\n        var roomDefinition = new RoomDefinition(nodeId, roomId)\n                .setMaxSlots(10)\n                .setPayload(\"Hello world!\");\n        client.getRoomRepository().saveRoom(roomDefinition);\n\n        // Picking room for 5 entities\n        var entities = new HashSet\u003cUserIdentifier\u003e();\n        for (int i = 0 ; i \u003c 5; i++) {\n            var entity = UserIdentifier.of(\"test-entity-\" + i);\n            entities.add(entity);\n        }\n        try {\n            var response = client.getNodeRepository().pickRoom(nodeId, entities);\n            // TODO...\n        } catch (NoRoomsAvailableException ex) {\n            // Cannot pick room\n        }\n    }\n}\n```\n\n\nStress testing\n----------\n\nIf you want to stress test the server, you can run the script from the `noiser` module.\nBefore starting stress testing, you'd better run Prometheus and Grafana from `docker-compose.yml`.\nIn Grafana, you can see this view:\n![Grafana](.github/img/grafana.png)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscarletredman%2Froompicker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscarletredman%2Froompicker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscarletredman%2Froompicker/lists"}