{"id":19719965,"url":"https://github.com/timboudreau/scamper-chat","last_synced_at":"2025-04-29T21:30:43.568Z","repository":{"id":25890143,"uuid":"29330622","full_name":"timboudreau/scamper-chat","owner":"timboudreau","description":"An IRC-like chat client and server using SCTP, based on Scamper+Netty","archived":false,"fork":false,"pushed_at":"2022-05-16T23:12:10.000Z","size":86,"stargazers_count":15,"open_issues_count":1,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-05T19:23:44.670Z","etag":null,"topics":["async","chat","java","netty","sctp"],"latest_commit_sha":null,"homepage":null,"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/timboudreau.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}},"created_at":"2015-01-16T03:20:54.000Z","updated_at":"2025-02-05T00:25:31.000Z","dependencies_parsed_at":"2022-08-24T14:16:19.113Z","dependency_job_id":null,"html_url":"https://github.com/timboudreau/scamper-chat","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timboudreau%2Fscamper-chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timboudreau%2Fscamper-chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timboudreau%2Fscamper-chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timboudreau%2Fscamper-chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timboudreau","download_url":"https://codeload.github.com/timboudreau/scamper-chat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251585739,"owners_count":21613270,"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":["async","chat","java","netty","sctp"],"created_at":"2024-11-11T23:09:49.851Z","updated_at":"2025-04-29T21:30:43.219Z","avatar_url":"https://github.com/timboudreau.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Scamper Chat\n============\n\nThis is an IRC-like chat application consisting of a server, a command-line\nclient and some libraries for shared code.  It uses SCTP rather than TCP\nin its wire protocol, and the \n[scamper](https://github.com/timboudreau/scamper) library that makes it easy\nto write protocols using SCTP.\n\n\nFeatures\n--------\n\n * Multiple chat rooms, IRC-style, with similar commands\n * Ansi-colored shell client\n * End-to-end Blowfish encryption on password-protected rooms - meaning that the\nserver cannot decrypt the chat messages (the server does store a SHA-512 hash\nof the password to reject access, but has no way to decrypt messages).\n\nThis project serves as a demo of how to write servers with Scamper, in addition\nto being usable in its own right.\n\n\nRequirements\n------------\n\n * Java 8\n * [Cryptography Extensions for Java 8](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html) \nif you  (sorry!) want to use password-protected rooms\n * *Linux Users* need [lksctp-tools](http://lksctp.sourceforge.net/) - if you see an error about loading native libraries, you don't have it\n\nIf either of the latter are missing, the client will let you know.\n\n\nConfiguration\n-------------\n\nThe client by default attempts to connect to a public server that is up for the\ntime being (no promises), so it can be run with no arguments:\n\n`java -jar scamper-chat-client.jar`\n\nTo connect to a different server, pass `--port` and `--host`\non the command-line, e.g.\n\n`java -jar scamper-chat-client.jar --port 8007 --host foo.bar.com`\n\nThe server can be configured similarly using command-line options\n\n\nSubprojects\n-----------\n\n * **Scamper Hub** - the server - build and run with `java -jar`\n * **Scamper Chat CLI** - command-line ansi-colored chat client featuring IRC-like commands (`/join`, `/who`, `/rooms`, etc.) - also build and run with `java -jar`\n\nThe rest are supporting projects for those:\n\n * **Scamper Chat Common** - POJO data types used in the wire protocol, and base\nclasses for clients\n * **Scamper Chat Message Types** - Defines the Scamper [MessageType](http://timboudreau.com/builds/job/scamper/lastSuccessfulBuild/artifact/scamper/target/apidocs/com/mastfrog/scamper/MessageType.html)s that\nare used by client and server to choose handlers for particular kinds of messages\n * **Scamper Chat Client Base** - Base classes that provide a simple interface for\nwriting scamper-chat clients\n\n\nDownloads And Builds\n-----------------------\n\nBuilding is as simple as cloning this repository and running `mvn install` (Maven 3.2.x or later and JDK 8 recommended).\n\n * The continuous build is [here](http://timboudreau.com/builds/job/scamper-chat/)\n * [Server JAR download](http://timboudreau.com/builds/job/scamper-chat/lastSuccessfulBuild/artifact/scamper-hub/target/scamper-hub-server.jar)\n * [Client JAR download](http://timboudreau.com/builds/job/scamper-chat/lastSuccessfulBuild/artifact/scamper-chat-cli/target/scamper-chat-client.jar)\n * Javadoc:\n   * [Chat Client Base Javadoc](http://timboudreau.com/builds/job/scamper-chat/lastSuccessfulBuild/artifact/scamper-chat-client-base/target/apidocs/index.html)\n   * [Scamper-Chat Common Javadoc](http://timboudreau.com/builds/job/scamper-chat/lastSuccessfulBuild/artifact/scamper-chat-common/target/apidocs/index.html)\n   * [Scamper-Chat MessageTypes Javadoc](http://timboudreau.com/builds/job/scamper-chat/lastSuccessfulBuild/artifact/scamper-chat-messagetypes/target/apidocs/index.html)\n\n\nWire Format\n-----------\n\nThe wire-format is BSON with gzip compression for larger messages; encryption\nis applied to message bodies by the client and decrypted by receiving clients.\n\n\nTo-Do\n-----\n\nPlenty of things could be done with this:\n\n * Get the server working with multiple-associations (SCTP allows a connection to be to multiple redundant machines)\n * Do something more like [bitchx](http://www.bitchx.com/) for the command-line client - this is complicated by the lack of a reliable way to get terminal dimensions in Java, though [jline](http://jline.sourceforge.net/) looks like it could help\n   * This could be done by assuming a fixed console size, it just wouldn't be pretty\n * Implement additional IRC-like commands (it would pay to split this stuff out into command-objects in the CLI)\n * Swap out the JCE Blowfish with BCrypt or some JCE-independent implementation of Twofish to be done with needing the Java crypto extensions - math is not a munition, and the fact that this doesn't come built into Java is a ridiculous artifact of the 90s\n * Adapter Netty's SSL engine to server/client communication\n   * Use certs to validate that you're really talking to the server you think you are\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimboudreau%2Fscamper-chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimboudreau%2Fscamper-chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimboudreau%2Fscamper-chat/lists"}