Console-based real-time messaging platform.
Go to file
Andrew Lalis c35fbbec9e
Merge pull request #5 from andrewlalis/messageRefactor
Refactored core message structure to use records.
2021-09-24 19:41:30 +02:00
catalog Added jar-with-dependencies build to the catalog server. 2021-08-26 12:09:05 +02:00
client Refactored core message structure to use records. 2021-09-24 19:37:57 +02:00
core Refactored core message structure to use records. 2021-09-24 19:37:57 +02:00
server Refactored core message structure to use records. 2021-09-24 19:37:57 +02:00
.gitignore Added db and config json to gitignore. 2021-08-23 09:09:26 +02:00
LICENSE Initial commit 2021-08-21 11:30:05 +02:00
README.md Implemented session tokens for persistent users. 2021-09-09 09:56:00 +02:00
pom.xml Added catalog discovery server, readmes and improved some server channel logic. 2021-08-26 11:22:24 +02:00
protocol.md Added protocol.md 2021-09-09 00:36:47 +02:00

README.md

Concord

Console-based real-time messaging platform, inspired by Discord.

Vision

This platform will be organized by many independent servers, each of which will support the following:

  • Multiple message channels. By default, there's one general channel.
  • Broadcasting itself on certain discovery servers for users to find. The server decides where it wants to be discovered, if at all.
  • Starting threads as spin-offs of a source message (with infinite recursion, i.e. threads within threads).
  • Private message between users in a server. No support for private messaging users outside the context of a server.
  • Banning users from the server.
  • Voice channels.
  • Persistent users. Connect and disconnect from a server multiple times, while keeping your information intact.

Here's a short demonstration of its current features:

https://user-images.githubusercontent.com/9953867/131097344-27cddf74-0cda-44e7-95d0-c9dc607291d6.mp4

Concord Client

To use the client, simply download the latest concord-client.jar JAR file from the releases page and run it with Java (version 16 or higher) from anywhere on your machine.

Once you've started it, press Enter to click the button "Connect to Server". You will be prompted for the server IP address, and then a nickname for yourself, before you join the server. To disconnect, press CTRL+C at any time.

concord_client_server_panel

Your console should look something like the above image. On the left, you have a list of channels, with a * next to the channel you're currently in. On the right, you have a list of all the other people that are in your channel. And of course in the middle you've got your chat, and a chatbox you can type messages in.

Concord Server

To start up your own server, download the latest concord-server.jar JAR file from the releases page and run it with Java (version 16 or higher). The first time you run the server with java -jar concord-server.jar, it will generate a server-config.json configuration file, and a concord-server.db database file.

Configuring the Server

You probably want to customize your server a bit. To do so, first stop your server by typing stop in the console where you started the server initially. Now you can edit server-config.json and restart the server once you're done. A description of the attributes is given below:

  • name The name of the server.
  • description A short description of what this server is for, or who it's run by.
  • port The port on which the server accepts client connections.
  • chatHistoryMaxCount The maximum amount of chat messages that a client can request from the server at any given time. Decrease this to improve performance.
  • chatHistoryDefaultCount The default number of chat messages that are provided to clients when they join a channel, if they don't explicitly request a certain amount. Decrease this to improve performance.
  • maxMessageLength The maximum length of a message. Messages longer than this will be rejected.
  • channels Contains a list of all channels that the server uses. Each channel has an id, name, and description. It is advised that you do not add or remove channels manually! Instead, use the add-channel and remove-channel CLI commands that are available while the server is running.
  • discoveryServers A list of URLs to which this server should send its metadata for publishing. Keep this empty if you don't want your server to be publicly visible.

Server CLI

As mentioned briefly, the server supports a basic command-line-interface with some commands. You can show which commands are available via the help command. The following is a list of some of the most useful commands and a description of their functionality:

  • add-channel <name> Adds a new channel to the server with the given name. Channel names cannot be blank, and they cannot be duplicates of an existing channel name.
  • remove-channel <name> Removes a channel.
  • list-clients Shows a list of all connected clients.
  • stop Stops the server, disconnecting all clients.

Each server uses a single Nitrite database to hold messages and other information.