{"id":16375880,"url":"https://github.com/pierreschwang/netty-packet","last_synced_at":"2025-03-23T03:32:45.562Z","repository":{"id":44430268,"uuid":"372575145","full_name":"PierreSchwang/Netty-Packet","owner":"PierreSchwang","description":"Simple \u0026 Lightweight Netty packet library + event system","archived":false,"fork":false,"pushed_at":"2023-06-14T22:43:58.000Z","size":47,"stargazers_count":25,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-18T17:14:06.211Z","etag":null,"topics":["event","java","netty","packet"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PierreSchwang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2021-05-31T16:56:58.000Z","updated_at":"2025-01-31T07:42:56.000Z","dependencies_parsed_at":"2024-10-28T15:51:13.503Z","dependency_job_id":null,"html_url":"https://github.com/PierreSchwang/Netty-Packet","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreSchwang%2FNetty-Packet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreSchwang%2FNetty-Packet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreSchwang%2FNetty-Packet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreSchwang%2FNetty-Packet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PierreSchwang","download_url":"https://codeload.github.com/PierreSchwang/Netty-Packet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245052633,"owners_count":20553162,"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":["event","java","netty","packet"],"created_at":"2024-10-11T03:22:30.358Z","updated_at":"2025-03-23T03:32:44.809Z","avatar_url":"https://github.com/PierreSchwang.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Minimalistic Netty-Packet library\n\n- Create packets with ease\n- Bind events to packets\n\n#### Example Packet:\n````java\npublic class TestPacket extends Packet {\n\n    private UUID uuid;\n\n    public TestPacket() {\n    }\n\n    @Override\n    public void read(PacketBuffer packetBuffer) {\n        uuid = packetBuffer.readUUID();\n    }\n\n    @Override\n    public void write(PacketBuffer packetBuffer) {\n        packetBuffer.writeUUID(uuid);\n    }\n\n    public UUID getUuid() {\n        return uuid;\n    }\n\n    public TestPacket setUuid(UUID uuid) {\n        this.uuid = uuid;\n        return this;\n    }\n}\n````\n\n#### Example Server:\n````java\npublic class NettyTestServer extends ChannelInitializer\u003cChannel\u003e {\n\n    private final ServerBootstrap bootstrap;\n    private final IPacketRegistry packetRegistry;\n\n    private EventLoopGroup parentGroup = new NioEventLoopGroup();\n    private EventLoopGroup workerGroup = new NioEventLoopGroup();\n\n    private Channel connectedChannel;\n\n    public NettyTestServer(IPacketRegistry packetRegistry, Consumer\u003cFuture\u003c? super Void\u003e\u003e doneCallback) {\n        this.packetRegistry = packetRegistry;\n        this.bootstrap = new ServerBootstrap()\n                .option(ChannelOption.AUTO_READ, true)\n                .childOption(ChannelOption.SO_KEEPALIVE, true)\n                .group(parentGroup, workerGroup)\n                .childHandler(this)\n                .channel(NioServerSocketChannel.class);\n\n        try {\n            this.bootstrap.bind(new InetSocketAddress(\"127.0.0.1\", 1234))\n                    .awaitUninterruptibly().sync().addListener(doneCallback::accept);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    protected void initChannel(Channel channel) throws Exception {\n        channel.pipeline()\n                .addLast(new PacketDecoder(packetRegistry), new PacketEncoder(packetRegistry));\n        this.connectedChannel = channel;\n        this.connectedChannel.writeAndFlush(new TestPacket().setUuid(UUID.randomUUID()));\n    }\n\n    public void shutdown() {\n        try {\n            parentGroup.shutdownGracefully().get();\n            workerGroup.shutdownGracefully().get();\n        } catch (InterruptedException | ExecutionException e) {\n            e.printStackTrace();\n        }\n    }\n\n}\n````\n\n#### Example Client:\n````java\npublic class NettyTestClient extends ChannelInitializer\u003cChannel\u003e {\n\n    private final Bootstrap bootstrap;\n    private final IPacketRegistry packetRegistry;\n    private final EventRegistry eventRegistry;\n\n    private final EventLoopGroup workerGroup = new NioEventLoopGroup();\n\n    public NettyTestClient(IPacketRegistry packetRegistry, Consumer\u003cFuture\u003c? super Void\u003e\u003e doneCallback, EventRegistry eventRegistry) {\n        this.packetRegistry = packetRegistry;\n        this.eventRegistry = eventRegistry;\n        this.bootstrap = new Bootstrap()\n                .option(ChannelOption.AUTO_READ, true)\n                .group(workerGroup)\n                .handler(this)\n                .channel(NioSocketChannel.class);\n\n        try {\n            this.bootstrap.connect(new InetSocketAddress(\"127.0.0.1\", 1234))\n                    .awaitUninterruptibly().sync().addListener(doneCallback::accept);\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    protected void initChannel(Channel channel) throws Exception {\n        // Add the PacketChannelInboundHandler if you want to use the event functionality\n        channel.pipeline()\n                .addLast(new PacketDecoder(packetRegistry), new PacketEncoder(packetRegistry), new PacketChannelInboundHandler(eventRegistry));\n    }\n\n    public void shutdown() {\n        try {\n            workerGroup.shutdownGracefully().get();\n        } catch (InterruptedException | ExecutionException e) {\n            e.printStackTrace();\n        }\n    }\n\n}\n````\n\n#### Example Packet and Event Registration\n````java\n// Instantiate the required registries\nEventRegistry eventRegistry = new EventRegistry();\nIPacketRegistry registry = new SimplePacketRegistry();\n\n// Register a packet with the id 1\nregistry.registerPacket(1, TestPacket.class);\n\n// Register a PacketSubscriber for the registered packet\n// Normally this would have been made in an external class to ensure a better readability\neventRegistry.registerEvents(new Object() {\n    // The method signature of a PacketSubscriber must contain a valid packet and may contain the ChannelHandlerContext (optional)\n    @PacketSubscriber\n    public void onPacketReceive(TestPacket packet, ChannelHandlerContext ctx) {\n        System.out.println(\"Received \" + packet.getUuid().toString() + \" from \" + ctx.channel().remoteAddress().toString());\n    }\n});\n````","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierreschwang%2Fnetty-packet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpierreschwang%2Fnetty-packet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierreschwang%2Fnetty-packet/lists"}