{"id":15103670,"url":"https://github.com/gox1337/furynet","last_synced_at":"2025-04-05T12:26:38.553Z","repository":{"id":240767800,"uuid":"803388564","full_name":"GoX1337/furynet","owner":"GoX1337","description":"kryonet clone using Netty and Fury","archived":false,"fork":false,"pushed_at":"2024-05-28T12:07:27.000Z","size":27,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-29T02:56:39.103Z","etag":null,"topics":["apache-fury","client","deserialization","fury","game-development","game-server","gamedev","multiplayer","multiplayer-game-server","netty","serialization","server","tcp","tcp-client","tcp-server"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GoX1337.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-05-20T16:17:31.000Z","updated_at":"2024-05-31T22:52:10.497Z","dependencies_parsed_at":"2024-05-31T22:52:08.924Z","dependency_job_id":null,"html_url":"https://github.com/GoX1337/furynet","commit_stats":null,"previous_names":["gox1337/furynet"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoX1337%2Ffurynet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoX1337%2Ffurynet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoX1337%2Ffurynet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoX1337%2Ffurynet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GoX1337","download_url":"https://codeload.github.com/GoX1337/furynet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247335608,"owners_count":20922465,"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":["apache-fury","client","deserialization","fury","game-development","game-server","gamedev","multiplayer","multiplayer-game-server","netty","serialization","server","tcp","tcp-client","tcp-server"],"created_at":"2024-09-25T19:41:24.480Z","updated_at":"2025-04-05T12:26:38.521Z","avatar_url":"https://github.com/GoX1337.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# furynet\n\n[kryonet](https://github.com/EsotericSoftware/kryonet) clone but using [Netty](https://github.com/netty/netty) and [Apache Fury](https://github.com/apache/incubator-fury) for serialization/deserialization\n\n## Example\n\n### Protocol\n```java\npublic static final List\u003cClass\u003c?\u003e\u003e PROTOCOL_EXAMPLE = List.of(\n            ClientConnection.class,\n            ClientDisconnection.class,\n            Request.class,\n            Response.class,\n            BroadcastMessage.class\n);\n```\n\n### Client\n```java\n Client client = Client.builder()\n            .hostname(\"127.0.0.1\")\n            .tcpPort(42000)\n            .protocol(Protocol.PROTOCOL_EXAMPLE)\n            .register(ClientConnection.class, (c, msg) -\u003e logger.info(\"New player connected\"))\n            .register(ClientDisconnection.class, (c, msg) -\u003e logger.info(\"A player disconnected\"))\n            .register(Response.class, (c, msg) -\u003e logger.info(\"Received response msg {}\", msg))\n            .register(BroadcastMessage.class, (c, msg) -\u003e logger.info(\"Received broadcasted msg {}\", msg))\n            .build();\n\nclient.start();\n\nclient.sendTcp(new Request(\"Hello there\"));\n```\n\n### Server\n```java\nServer server = Server.builder()\n        .tcpPort(42000)\n        .protocol(Protocol.PROTOCOL_EXAMPLE)\n        .register(ServerEvent.NEW_CLIENT_CONNECTION, (connection) -\u003e {\n            connection.sendToAllExceptTcp(new ClientConnection());\n        })\n        .register(ServerEvent.CLIENT_DISCONNECTED, (connection) -\u003e {\n            connection.sendToAllTcp(new ClientDisconnection());\n        })\n        .register(Request.class, (connection, msg) -\u003e {\n            connection.sentTcp(new Response());\n        })\n        .register(BroadcastMessage.class, (connection, msg) -\u003e {\n            connection.sendToAllExceptTcp(msg);\n        })\n        .build();\n\nserver.start();\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgox1337%2Ffurynet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgox1337%2Ffurynet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgox1337%2Ffurynet/lists"}