Compare commits

...

13 Commits
e2ee ... main

315 changed files with 33416 additions and 1251 deletions

View File

@ -1,34 +1,27 @@
# Concord
Console-based real-time messaging platform, inspired by Discord.
**NOTE: To improve organization, Concord has been moved to the [Concord Communication](https://github.com/Concord-Communication) GitHub organization.**
## Vision
Open-source, independent, real-time messaging platform inspired by Discord. Here's what it can do:
This platform will be organized by many independent servers, each of which will support the following:
- [x] Multiple message channels. By default, there's one `general` channel.
- [x] 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).
- [x] 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.
- [x] Persistent users. Connect and disconnect from a server multiple times, while keeping your information intact.
- Host your own server, on your own hardware (no "cloud" servers). All the server's data is yours; do whatever you want with it, or nothing at all.
- Join someone else's server (with encryption between you and the server).
- Send and receive messages in real time, in different "channels" on a server.
- Send and receive private messages with other server members.
Here's a short demonstration of its current features:
https://user-images.githubusercontent.com/9953867/131097344-27cddf74-0cda-44e7-95d0-c9dc607291d6.mp4
And here's what we have planned for the future:
- [ ] Threads: create a spin-off thread of messages from a single source message, to keep the main chat tidy.
- [ ] Voice communication, both in channels, and in private messages. The plan is to give all channels a configurable set of *capabilities*: by default all channels support text messages, but you can add voice chat support, streaming support, and more.
- [ ] Comprehensive server permissions system. We want to make it as easy as possible to configure the server's permissions to give admins fine-grained control over what users on their server can do. To this end, we plan on adding *roles* that can be assigned to particular users to grant them certain permissions.
- [ ] Emoji and formatted text support. React to a message with an emoji, and use markdown in your messages.
- [ ] File uploads: Allow users on your server to share files with each other as attachments to messages, with a high degree of configurability, so that you can decide how to deal with all the uploaded data.
- [ ] Plugins, bots, and automation! We want to make Concord as extensible as possible, so we plan to add first-class support for third-party plugins, and an API for developers to create bots that can participate in a server. We also want to provide admins with utilities for automating tasks without needing to know how to code (like auto-moderation, old data pruning, spam filters, etc.).
- [ ] Opt-in discovery services, so that users can find servers without needing an invitation.
# Concord Client
To use the client, simply download the latest `concord-client.jar` JAR file from [the releases page](https://github.com/andrewlalis/Concord/releases) 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](https://user-images.githubusercontent.com/9953867/131096996-c9eec7e0-e8f0-4755-a14c-b81c727fba43.PNG)
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.
*Client application is currently work-in-progress.*
# Concord Server
To start up your own server, download the latest `concord-server.jar` JAR file from [the releases page](https://github.com/andrewlalis/Concord/releases) 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
@ -38,6 +31,7 @@ You probably want to customize your server a bit. To do so, first stop your serv
- `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.
- `acceptAllNewClients` Whether to automatically accept any new client that registers to this server. Set to false by default, meaning an administrator needs to approve any pending registration before it is complete.
- `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.
@ -46,11 +40,6 @@ You probably want to customize your server a bit. To do so, first stop your serv
## 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.
As mentioned briefly, the server supports a basic command-line-interface with some commands. You can show the commands that are available via the `help` command.
Each server uses a single [Nitrite](https://www.dizitart.org/nitrite-database/#what-is-nitrite) database to hold messages and other information.

View File

@ -1,6 +1,5 @@
package nl.andrewl.concord_client;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.googlecode.lanterna.gui2.MultiWindowTextGUI;
import com.googlecode.lanterna.gui2.Window;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
@ -9,6 +8,8 @@ import com.googlecode.lanterna.screen.TerminalScreen;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
import com.googlecode.lanterna.terminal.Terminal;
import lombok.Getter;
import nl.andrewl.concord_client.data.ClientDataStore;
import nl.andrewl.concord_client.data.JsonClientDataStore;
import nl.andrewl.concord_client.event.EventManager;
import nl.andrewl.concord_client.event.handlers.ChannelMovedHandler;
import nl.andrewl.concord_client.event.handlers.ChatHistoryResponseHandler;
@ -19,36 +20,41 @@ import nl.andrewl.concord_client.model.ClientModel;
import nl.andrewl.concord_core.msg.Encryption;
import nl.andrewl.concord_core.msg.Message;
import nl.andrewl.concord_core.msg.Serializer;
import nl.andrewl.concord_core.msg.types.*;
import nl.andrewl.concord_core.msg.types.ServerMetaData;
import nl.andrewl.concord_core.msg.types.ServerUsers;
import nl.andrewl.concord_core.msg.types.channel.MoveToChannel;
import nl.andrewl.concord_core.msg.types.chat.Chat;
import nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest;
import nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse;
import nl.andrewl.concord_core.msg.types.client_setup.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.GeneralSecurityException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ConcordClient implements Runnable {
private final Socket socket;
private final InputStream in;
private final OutputStream out;
private final Serializer serializer;
private final ClientDataStore dataStore;
@Getter
private final ClientModel model;
private ClientModel model;
private final EventManager eventManager;
private volatile boolean running;
public ConcordClient(String host, int port, String nickname, Path tokensFile) throws IOException {
private ConcordClient(String host, int port) throws IOException {
this.eventManager = new EventManager(this);
this.socket = new Socket(host, port);
this.serializer = new Serializer();
this.dataStore = new JsonClientDataStore(Path.of("concord-session-tokens.json"));
try {
var streams = Encryption.upgrade(socket.getInputStream(), socket.getOutputStream(), this.serializer);
this.in = streams.first();
@ -56,8 +62,6 @@ public class ConcordClient implements Runnable {
} catch (GeneralSecurityException e) {
throw new IOException("Could not establish secure connection to the server.", e);
}
this.model = this.initializeConnectionToServer(nickname, tokensFile);
// Add event listeners.
this.eventManager.addHandler(MoveToChannel.class, new ChannelMovedHandler());
this.eventManager.addHandler(ServerUsers.class, new ServerUsersHandler());
@ -66,32 +70,63 @@ public class ConcordClient implements Runnable {
this.eventManager.addHandler(ServerMetaData.class, new ServerMetaDataHandler());
}
/**
* Initializes the communication with the server by sending an {@link Identification}
* message, and waiting for a {@link ServerWelcome} response from the
* server. After that, we request some information about the channel we were
* placed in by the server.
* @param nickname The nickname to send to the server that it should know
* us by.
* @param tokensFile Path to the file where session tokens are stored.
* @return The client model that contains the server's metadata and other
* information that should be kept up-to-date at runtime.
* @throws IOException If an error occurs while reading or writing the
* messages, or if the server sends an unexpected response.
*/
private ClientModel initializeConnectionToServer(String nickname, Path tokensFile) throws IOException {
String token = this.getSessionToken(tokensFile);
this.serializer.writeMessage(new Identification(nickname, token), this.out);
Message reply = this.serializer.readMessage(this.in);
if (reply instanceof ServerWelcome welcome) {
var model = new ClientModel(welcome.getClientId(), nickname, welcome.getCurrentChannelId(), welcome.getCurrentChannelName(), welcome.getMetaData());
this.saveSessionToken(welcome.getSessionToken(), tokensFile);
// Start fetching initial data for the channel we were initially put into.
this.sendMessage(new ChatHistoryRequest(model.getCurrentChannelId(), ""));
return model;
public static ConcordClient register(String host, int port, String username, String password) throws IOException {
var client = new ConcordClient(host, port);
client.sendMessage(new ClientRegistration(null, null, username, password));
Message reply = client.serializer.readMessage(client.in);
if (reply instanceof RegistrationStatus status) {
if (status.type() == RegistrationStatus.Type.ACCEPTED) {
ServerWelcome welcomeData = (ServerWelcome) client.serializer.readMessage(client.in);
client.initializeClientModel(welcomeData, username);
} else if (status.type() == RegistrationStatus.Type.PENDING) {
System.out.println("Registration pending!");
}
} else {
throw new IOException("Unexpected response from the server after sending identification message: " + reply);
System.out.println(reply);
}
return client;
}
public static ConcordClient login(String host, int port, String username, String password) throws IOException {
var client = new ConcordClient(host, port);
client.sendMessage(new ClientLogin(username, password));
Message reply = client.serializer.readMessage(client.in);
if (reply instanceof ServerWelcome welcome) {
client.initializeClientModel(welcome, username);
} else if (reply instanceof RegistrationStatus status && status.type() == RegistrationStatus.Type.PENDING) {
System.out.println("Registration pending!");
} else {
System.out.println(reply);
}
return client;
}
public static ConcordClient loginWithToken(String host, int port) throws IOException {
var client = new ConcordClient(host, port);
var token = client.dataStore.getSessionToken(client.socket.getInetAddress().getHostName() + ":" + client.socket.getPort());
if (token.isPresent()) {
client.sendMessage(new ClientSessionResume(token.get()));
Message reply = client.serializer.readMessage(client.in);
if (reply instanceof ServerWelcome welcome) {
client.initializeClientModel(welcome, "unknown");
}
} else {
System.err.println("No session token!");
}
return client;
}
private void initializeClientModel(ServerWelcome welcomeData, String username) throws IOException {
var model = new ClientModel(
welcomeData.clientId(),
username,
welcomeData.currentChannelId(),
welcomeData.currentChannelName(),
welcomeData.metaData()
);
this.dataStore.saveSessionToken(this.socket.getInetAddress().getHostName() + ":" + this.socket.getPort(), welcomeData.sessionToken());
// Start fetching initial data for the channel we were initially put into.
this.sendMessage(new ChatHistoryRequest(model.getCurrentChannelId(), ""));
}
public void sendMessage(Message message) throws IOException {
@ -132,46 +167,6 @@ public class ConcordClient implements Runnable {
}
}
/**
* Fetches the session token that this client should use for its currently
* configured server, according to the socket address and port.
* @param tokensFile The file containing the session tokens.
* @return The session token, or null if none was found.
* @throws IOException If the tokens file could not be read.
*/
@SuppressWarnings("unchecked")
private String getSessionToken(Path tokensFile) throws IOException {
String token = null;
String address = this.socket.getInetAddress().getHostName() + ":" + this.socket.getPort();
if (Files.exists(tokensFile)) {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> sessionTokens = mapper.readValue(Files.newBufferedReader(tokensFile), Map.class);
token = sessionTokens.get(address);
}
return token;
}
/**
* Saves a session token that this client should use the next time it
* connects to the same server.
* @param token The token to save.
* @param tokensFile The file containing the session tokens.
* @throws IOException If the tokens file could not be read or written to.
*/
@SuppressWarnings("unchecked")
private void saveSessionToken(String token, Path tokensFile) throws IOException {
String address = this.socket.getInetAddress().getHostName() + ":" + this.socket.getPort();
Map<String, String> tokens = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();
if (Files.exists(tokensFile)) {
tokens = mapper.readValue(Files.newBufferedReader(tokensFile), Map.class);
}
tokens.put(address, token);
mapper.writerWithDefaultPrettyPrinter().writeValue(Files.newBufferedWriter(tokensFile), tokens);
}
public static void main(String[] args) throws IOException {
Terminal term = new DefaultTerminalFactory().createTerminal();
Screen screen = new TerminalScreen(term);

View File

@ -0,0 +1,13 @@
package nl.andrewl.concord_client.data;
import java.io.IOException;
import java.util.Optional;
/**
* A component which can store and retrieve persistent data which a client can
* use as part of its interaction with servers.
*/
public interface ClientDataStore {
Optional<String> getSessionToken(String serverName) throws IOException;
void saveSessionToken(String serverName, String sessionToken) throws IOException;
}

View File

@ -0,0 +1,42 @@
package nl.andrewl.concord_client.data;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class JsonClientDataStore implements ClientDataStore {
private final Path file;
public JsonClientDataStore(Path file) {
this.file = file;
}
@Override
@SuppressWarnings("unchecked")
public Optional<String> getSessionToken(String serverName) throws IOException {
String token = null;
if (Files.exists(file)) {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> sessionTokens = mapper.readValue(Files.newBufferedReader(file), Map.class);
token = sessionTokens.get(serverName);
}
return Optional.ofNullable(token);
}
@Override
@SuppressWarnings("unchecked")
public void saveSessionToken(String serverName, String sessionToken) throws IOException {
Map<String, String> tokens = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();
if (Files.exists(file)) {
tokens = mapper.readValue(Files.newBufferedReader(file), Map.class);
}
tokens.put(serverName, sessionToken);
mapper.writerWithDefaultPrettyPrinter().writeValue(Files.newBufferedWriter(file), tokens);
}
}

View File

@ -1,7 +1,7 @@
package nl.andrewl.concord_client.event;
import nl.andrewl.concord_client.model.ChatHistory;
import nl.andrewl.concord_core.msg.types.Chat;
import nl.andrewl.concord_core.msg.types.chat.Chat;
public interface ChatHistoryListener {
default void chatAdded(Chat chat) {}

View File

@ -2,10 +2,8 @@ package nl.andrewl.concord_client.event.handlers;
import nl.andrewl.concord_client.ConcordClient;
import nl.andrewl.concord_client.event.MessageHandler;
import nl.andrewl.concord_core.msg.types.ChatHistoryRequest;
import nl.andrewl.concord_core.msg.types.MoveToChannel;
import java.util.Map;
import nl.andrewl.concord_core.msg.types.channel.MoveToChannel;
import nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest;
/**
* When the client receives a {@link MoveToChannel} message, it means that the
@ -16,7 +14,7 @@ import java.util.Map;
public class ChannelMovedHandler implements MessageHandler<MoveToChannel> {
@Override
public void handle(MoveToChannel msg, ConcordClient client) throws Exception {
client.getModel().setCurrentChannel(msg.getId(), msg.getChannelName());
client.sendMessage(new ChatHistoryRequest(msg.getId()));
client.getModel().setCurrentChannel(msg.id(), msg.channelName());
client.sendMessage(new ChatHistoryRequest(msg.id()));
}
}

View File

@ -1,16 +0,0 @@
package nl.andrewl.concord_client.event.handlers;
import nl.andrewl.concord_client.ConcordClient;
import nl.andrewl.concord_client.event.MessageHandler;
import nl.andrewl.concord_core.msg.types.ChannelUsersResponse;
/**
* When the client receives information about the list of known users, it will
* update its model to show the new list.
*/
public class ChannelUsersResponseHandler implements MessageHandler<ChannelUsersResponse> {
@Override
public void handle(ChannelUsersResponse msg, ConcordClient client) throws Exception {
client.getModel().setKnownUsers(msg.getUsers());
}
}

View File

@ -2,11 +2,14 @@ package nl.andrewl.concord_client.event.handlers;
import nl.andrewl.concord_client.ConcordClient;
import nl.andrewl.concord_client.event.MessageHandler;
import nl.andrewl.concord_core.msg.types.ChatHistoryResponse;
import nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse;
import java.util.Arrays;
import java.util.List;
public class ChatHistoryResponseHandler implements MessageHandler<ChatHistoryResponse> {
@Override
public void handle(ChatHistoryResponse msg, ConcordClient client) {
client.getModel().getChatHistory().setChats(msg.getMessages());
client.getModel().getChatHistory().setChats(Arrays.asList(msg.messages()));
}
}

View File

@ -4,9 +4,11 @@ import nl.andrewl.concord_client.ConcordClient;
import nl.andrewl.concord_client.event.MessageHandler;
import nl.andrewl.concord_core.msg.types.ServerUsers;
import java.util.Arrays;
public class ServerUsersHandler implements MessageHandler<ServerUsers> {
@Override
public void handle(ServerUsers msg, ConcordClient client) {
client.getModel().setKnownUsers(msg.getUsers());
client.getModel().setKnownUsers(Arrays.asList(msg.users()));
}
}

View File

@ -5,7 +5,7 @@ import com.googlecode.lanterna.gui2.Direction;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.Panel;
import nl.andrewl.concord_client.ConcordClient;
import nl.andrewl.concord_core.msg.types.MoveToChannel;
import nl.andrewl.concord_core.msg.types.channel.MoveToChannel;
import java.io.IOException;
@ -22,15 +22,15 @@ public class ChannelList extends Panel {
public void setChannels() {
this.removeAllComponents();
for (var channel : this.client.getModel().getServerMetaData().getChannels()) {
String name = channel.getName();
if (client.getModel().getCurrentChannelId().equals(channel.getId())) {
for (var channel : this.client.getModel().getServerMetaData().channels()) {
String name = channel.name();
if (client.getModel().getCurrentChannelId().equals(channel.id())) {
name = "*" + name;
}
Button b = new Button(name, () -> {
if (!client.getModel().getCurrentChannelId().equals(channel.getId())) {
if (!client.getModel().getCurrentChannelId().equals(channel.id())) {
try {
client.sendMessage(new MoveToChannel(channel.getId()));
client.sendMessage(new MoveToChannel(channel.id()));
} catch (IOException e) {
e.printStackTrace();
}

View File

@ -3,7 +3,7 @@ package nl.andrewl.concord_client.gui;
import com.googlecode.lanterna.gui2.AbstractListBox;
import nl.andrewl.concord_client.event.ChatHistoryListener;
import nl.andrewl.concord_client.model.ChatHistory;
import nl.andrewl.concord_core.msg.types.Chat;
import nl.andrewl.concord_core.msg.types.chat.Chat;
/**
* This chat list shows a section of chat messages that have been sent in a

View File

@ -4,7 +4,7 @@ import com.googlecode.lanterna.TerminalTextUtils;
import com.googlecode.lanterna.graphics.ThemeDefinition;
import com.googlecode.lanterna.gui2.AbstractListBox;
import com.googlecode.lanterna.gui2.TextGUIGraphics;
import nl.andrewl.concord_core.msg.types.Chat;
import nl.andrewl.concord_core.msg.types.chat.Chat;
import java.time.Instant;
import java.time.ZoneId;
@ -20,10 +20,10 @@ public class ChatRenderer extends AbstractListBox.ListItemRenderer<Chat, ChatLis
else {
graphics.applyThemeStyle(themeDefinition.getNormal());
}
graphics.putString(0, 0, chat.getSenderNickname());
Instant timestamp = Instant.ofEpochMilli(chat.getTimestamp());
graphics.putString(0, 0, chat.senderNickname());
Instant timestamp = Instant.ofEpochMilli(chat.timestamp());
String timeStr = timestamp.atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("HH:mm"));
String label = chat.getSenderNickname() + "@" + timeStr + " : " + chat.getMessage();
String label = chat.senderNickname() + "@" + timeStr + " : " + chat.message();
label = TerminalTextUtils.fitString(label, graphics.getSize().getColumns());
while(TerminalTextUtils.getColumnWidth(label) < graphics.getSize().getColumns()) {
label += " ";

View File

@ -50,7 +50,7 @@ public class MainWindow extends BasicWindow {
if (nickname == null) return;
try {
var client = new ConcordClient(host, port, nickname, Path.of("concord-session-tokens.json"));
var client = ConcordClient.login(host, port, nickname, "testpass");
var chatPanel = new ServerPanel(client, this);
client.getModel().addListener(chatPanel);
new Thread(client).start();

View File

@ -5,7 +5,7 @@ import com.googlecode.lanterna.gui2.Direction;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.Panel;
import nl.andrewl.concord_client.ConcordClient;
import nl.andrewl.concord_core.msg.types.MoveToChannel;
import nl.andrewl.concord_core.msg.types.channel.MoveToChannel;
import nl.andrewl.concord_core.msg.types.UserData;
import java.io.IOException;
@ -22,11 +22,11 @@ public class UserList extends Panel {
public void updateUsers(List<UserData> usersResponse) {
this.removeAllComponents();
for (var user : usersResponse) {
Button b = new Button(user.getName(), () -> {
if (!client.getModel().getId().equals(user.getId())) {
System.out.println("Opening DM channel with user " + user.getName() + ", id: " + user.getId());
Button b = new Button(user.name(), () -> {
if (!client.getModel().getId().equals(user.id())) {
System.out.println("Opening DM channel with user " + user.name() + ", id: " + user.id());
try {
client.sendMessage(new MoveToChannel(user.getId()));
client.sendMessage(new MoveToChannel(user.id()));
} catch (IOException e) {
e.printStackTrace();
}

View File

@ -2,7 +2,7 @@ package nl.andrewl.concord_client.model;
import lombok.Getter;
import nl.andrewl.concord_client.event.ChatHistoryListener;
import nl.andrewl.concord_core.msg.types.Chat;
import nl.andrewl.concord_core.msg.types.chat.Chat;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

View File

@ -12,7 +12,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
@Getter
public class ClientModel {
private UUID id;
private final UUID id;
private String nickname;
private ServerMetaData serverMetaData;

View File

@ -1,7 +1,20 @@
/**
* The core components that are used by both the Concord server and the default
* client implementation. Includes record-based message serialization, and some
* utilities for message passing.
* <p>
* This core module defines the message protocol that clients must use to
* communicate with any server.
* </p>
*/
module concord_core {
requires static lombok;
exports nl.andrewl.concord_core.util to concord_server, concord_client;
exports nl.andrewl.concord_core.msg to concord_server, concord_client;
exports nl.andrewl.concord_core.msg.types to concord_server, concord_client;
exports nl.andrewl.concord_core.msg.types.client_setup to concord_client, concord_server;
exports nl.andrewl.concord_core.msg.types.chat to concord_client, concord_server;
exports nl.andrewl.concord_core.msg.types.channel to concord_client, concord_server;
}

View File

@ -1,6 +1,6 @@
package nl.andrewl.concord_core.msg;
import nl.andrewl.concord_core.msg.types.KeyData;
import nl.andrewl.concord_core.msg.types.client_setup.KeyData;
import nl.andrewl.concord_core.util.Pair;
import javax.crypto.Cipher;
@ -23,6 +23,26 @@ import java.util.List;
* Utility class for handling the establishment of encrypted communication.
*/
public class Encryption {
/**
* Upgrades the given input and output streams to a pair of cipher input and
* output streams. This upgrade follows the following steps:
* <ol>
* <li>Generate an elliptic curve key pair, and send the public key to the output stream.</li>
* <li>Read the public key that the other person has sent, from the input stream.</li>
* <li>Compute a shared private key using the ECDH key exchange, with our private key and their public key.</li>
* <li>Create the cipher streams from the shared private key.</li>
* </ol>
* @param in The unencrypted input stream.
* @param out The unencrypted output stream.
* @param serializer The message serializer that is used to read and write
* messages according to the standard Concord protocol.
* @return The pair of cipher streams, which can be used to send encrypted
* messages.
* @throws GeneralSecurityException If an error occurs while generating keys
* or preparing the cipher streams.
* @throws IOException If an error occurs while reading or writing data on
* the streams.
*/
public static Pair<CipherInputStream, CipherOutputStream> upgrade(
InputStream in,
OutputStream out,
@ -44,20 +64,20 @@ public class Encryption {
// Receive and decode client's unencrypted key data.
KeyData clientKeyData = (KeyData) serializer.readMessage(in);
PublicKey clientPublicKey = KeyFactory.getInstance("EC")
.generatePublic(new X509EncodedKeySpec(clientKeyData.getPublicKey()));
.generatePublic(new X509EncodedKeySpec(clientKeyData.publicKey()));
// Compute secret key from client's public key and our private key.
KeyAgreement ka = KeyAgreement.getInstance("ECDH");
ka.init(keyPair.getPrivate());
ka.doPhase(clientPublicKey, true);
byte[] secretKey = computeSecretKey(ka.generateSecret(), publicKey, clientKeyData.getPublicKey());
byte[] secretKey = computeSecretKey(ka.generateSecret(), publicKey, clientKeyData.publicKey());
// Initialize cipher streams.
Cipher writeCipher = Cipher.getInstance("AES/CFB8/NoPadding");
Cipher readCipher = Cipher.getInstance("AES/CFB8/NoPadding");
Key cipherKey = new SecretKeySpec(secretKey, "AES");
writeCipher.init(Cipher.ENCRYPT_MODE, cipherKey, new IvParameterSpec(iv));
readCipher.init(Cipher.DECRYPT_MODE, cipherKey, new IvParameterSpec(clientKeyData.getIv()));
readCipher.init(Cipher.DECRYPT_MODE, cipherKey, new IvParameterSpec(clientKeyData.iv()));
return new Pair<>(
new CipherInputStream(in, readCipher),
new CipherOutputStream(out, writeCipher)

View File

@ -1,11 +1,5 @@
package nl.andrewl.concord_core.msg;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
/**
* Represents any message which can be sent over the network.
* <p>
@ -15,25 +9,21 @@ import java.util.UUID;
*/
public interface Message {
/**
* @return The exact number of bytes that this message will use when written
* to a stream.
* Convenience method to get the serializer for this message's type, using
* the static auto-generated set of serializers.
* @param <T> The message type.
* @return The serializer to use to read and write messages of this type.
*/
int getByteCount();
@SuppressWarnings("unchecked")
default <T extends Message> MessageTypeSerializer<T> getTypeSerializer() {
return MessageTypeSerializer.get((Class<T>) this.getClass());
}
/**
* Writes this message to the given output stream.
* @param o The output stream to write to.
* @throws IOException If an error occurs while writing.
* Convenience method to determine the size of this message in bytes.
* @return The size of this message, in bytes.
*/
void write(DataOutputStream o) throws IOException;
/**
* Reads all of this message's properties from the given input stream.
* <p>
* The single byte type identifier has already been read.
* </p>
* @param i The input stream to read from.
* @throws IOException If an error occurs while reading.
*/
void read(DataInputStream i) throws IOException;
default int byteSize() {
return getTypeSerializer().byteSizeFunction().apply(this);
}
}

View File

@ -0,0 +1,19 @@
package nl.andrewl.concord_core.msg;
import nl.andrewl.concord_core.util.ExtendedDataInputStream;
import java.io.IOException;
@FunctionalInterface
public interface MessageReader<T extends Message>{
/**
* Reads all of this message's properties from the given input stream.
* <p>
* The single byte type identifier has already been read.
* </p>
* @param in The input stream to read from.
* @return The message that was read.
* @throws IOException If an error occurs while reading.
*/
T read(ExtendedDataInputStream in) throws IOException;
}

View File

@ -0,0 +1,130 @@
package nl.andrewl.concord_core.msg;
import java.lang.reflect.Constructor;
import java.lang.reflect.RecordComponent;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
/**
* Record containing the components needed to read and write a given message.
* <p>
* Also contains methods for automatically generating message type
* implementations for standard record-based messages.
* </p>
* @param <T> The type of message.
* @param messageClass The class of the message.
* @param byteSizeFunction A function that computes the byte size of the message.
* @param reader A reader that can read messages from an input stream.
* @param writer A writer that write messages from an input stream.
*/
public record MessageTypeSerializer<T extends Message>(
Class<T> messageClass,
Function<T, Integer> byteSizeFunction,
MessageReader<T> reader,
MessageWriter<T> writer
) {
private static final Map<Class<?>, MessageTypeSerializer<?>> generatedMessageTypes = new HashMap<>();
/**
* Gets the {@link MessageTypeSerializer} instance for a given message class, and
* generates a new implementation if none exists yet.
* @param messageClass The class of the message to get a type for.
* @param <T> The type of the message.
* @return The message type.
*/
@SuppressWarnings("unchecked")
public static <T extends Message> MessageTypeSerializer<T> get(Class<T> messageClass) {
return (MessageTypeSerializer<T>) generatedMessageTypes.computeIfAbsent(messageClass, c -> generateForRecord((Class<T>) c));
}
/**
* Generates a message type instance for a given class, using reflection to
* introspect the fields of the message.
* <p>
* Note that this only works for record-based messages.
* </p>
* @param messageTypeClass The class of the message type.
* @param <T> The type of the message.
* @return A message type instance.
*/
public static <T extends Message> MessageTypeSerializer<T> generateForRecord(Class<T> messageTypeClass) {
RecordComponent[] components = messageTypeClass.getRecordComponents();
Constructor<T> constructor;
try {
constructor = messageTypeClass.getDeclaredConstructor(Arrays.stream(components)
.map(RecordComponent::getType).toArray(Class<?>[]::new));
} catch (NoSuchMethodException e) {
throw new IllegalArgumentException(e);
}
return new MessageTypeSerializer<>(
messageTypeClass,
generateByteSizeFunction(components),
generateReader(constructor),
generateWriter(components)
);
}
/**
* Generates a function implementation that counts the byte size of a
* message based on the message's record component types.
* @param components The list of components that make up the message.
* @param <T> The message type.
* @return A function that computes the byte size of a message of the given
* type.
*/
private static <T extends Message> Function<T, Integer> generateByteSizeFunction(RecordComponent[] components) {
return msg -> {
int size = 0;
for (var component : components) {
try {
size += MessageUtils.getByteSize(component.getAccessor().invoke(msg));
} catch (ReflectiveOperationException e) {
throw new IllegalStateException(e);
}
}
return size;
};
}
/**
* Generates a message reader for the given message constructor method. It
* will try to read objects from the input stream according to the
* parameters of the canonical constructor of a message record.
* @param constructor The canonical constructor of the message record.
* @param <T> The message type.
* @return A message reader for the given type.
*/
private static <T extends Message> MessageReader<T> generateReader(Constructor<T> constructor) {
return in -> {
Object[] values = new Object[constructor.getParameterCount()];
for (int i = 0; i < values.length; i++) {
values[i] = in.readObject(constructor.getParameterTypes()[i]);
}
try {
return constructor.newInstance(values);
} catch (ReflectiveOperationException e) {
throw new IllegalStateException(e);
}
};
}
/**
* Generates a message writer for the given message record components.
* @param components The record components to write.
* @param <T> The type of message.
* @return The message writer for the given type.
*/
private static <T extends Message> MessageWriter<T> generateWriter(RecordComponent[] components) {
return (msg, out) -> {
for (var component: components) {
try {
out.writeObject(component.getAccessor().invoke(msg), component.getType());
} catch (ReflectiveOperationException e) {
throw new IllegalStateException(e);
}
}
};
}
}

View File

@ -1,11 +1,6 @@
package nl.andrewl.concord_core.msg;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
@ -14,6 +9,7 @@ import java.util.UUID;
*/
public class MessageUtils {
public static final int UUID_BYTES = 2 * Long.BYTES;
public static final int ENUM_BYTES = Integer.BYTES;
/**
* Gets the number of bytes that the given string will occupy when it is
@ -26,118 +22,58 @@ public class MessageUtils {
}
/**
* Writes a string to the given output stream using a length-prefixed format
* where an integer length precedes the string's bytes, which are encoded in
* UTF-8.
* @param s The string to write.
* @param o The output stream to write to.
* @throws IOException If the stream could not be written to.
* Gets the number of bytes that all the given strings will occupy when
* serialized with a length-prefix encoding.
* @param strings The set of strings.
* @return The total byte size.
*/
public static void writeString(String s, DataOutputStream o) throws IOException {
if (s == null) {
o.writeInt(-1);
} else {
o.writeInt(s.length());
o.write(s.getBytes(StandardCharsets.UTF_8));
public static int getByteSize(String... strings) {
int size = 0;
for (var s : strings) {
size += getByteSize(s);
}
return size;
}
/**
* Reads a string from the given input stream, using a length-prefixed
* format, where an integer length precedes the string's bytes, which are
* encoded in UTF-8.
* @param i The input stream to read from.
* @return The string which was read.
* @throws IOException If the stream could not be read, or if the string is
* malformed.
*/
public static String readString(DataInputStream i) throws IOException {
int length = i.readInt();
if (length == -1) return null;
if (length == 0) return "";
byte[] data = new byte[length];
int read = i.read(data);
if (read != length) throw new IOException("Not all bytes of a string of length " + length + " could be read.");
return new String(data, StandardCharsets.UTF_8);
public static int getByteSize(Message msg) {
return 1 + (msg == null ? 0 : msg.byteSize());
}
/**
* Writes an enum value to the given stream as the integer ordinal value of
* the enum value, or -1 if the value is null.
* @param value The value to write.
* @param o The output stream.
* @throws IOException If an error occurs while writing.
*/
public static void writeEnum(Enum<?> value, DataOutputStream o) throws IOException {
if (value == null) {
o.writeInt(-1);
} else {
o.writeInt(value.ordinal());
}
}
/**
* Reads an enum value from the given stream, assuming that the value is
* represented by an integer ordinal value.
* @param e The type of enum that is to be read.
* @param i The input stream to read from.
* @param <T> The enum type.
* @return The enum value, or null if -1 was read.
* @throws IOException If an error occurs while reading.
*/
public static <T extends Enum<?>> T readEnum(Class<T> e, DataInputStream i) throws IOException {
int ordinal = i.readInt();
if (ordinal == -1) return null;
return e.getEnumConstants()[ordinal];
}
public static void writeUUID(UUID value, DataOutputStream o) throws IOException {
if (value == null) {
o.writeLong(-1);
o.writeLong(-1);
} else {
o.writeLong(value.getMostSignificantBits());
o.writeLong(value.getLeastSignificantBits());
}
}
public static UUID readUUID(DataInputStream i) throws IOException {
long a = i.readLong();
long b = i.readLong();
if (a == -1 && b == -1) {
return null;
}
return new UUID(a, b);
}
public static int getByteSize(List<? extends Message> items) {
public static <T extends Message> int getByteSize(T[] items) {
int count = Integer.BYTES;
for (var item : items) {
count += item.getByteCount();
count += getByteSize(items);
}
return count;
}
public static void writeList(List<? extends Message> items, DataOutputStream o) throws IOException {
o.writeInt(items.size());
for (var i : items) {
i.write(o);
public static int getByteSize(Object o) {
if (o instanceof Integer) {
return Integer.BYTES;
} else if (o instanceof Long) {
return Long.BYTES;
} else if (o instanceof String) {
return getByteSize((String) o);
} else if (o instanceof UUID) {
return UUID_BYTES;
} else if (o instanceof Enum<?>) {
return ENUM_BYTES;
} else if (o instanceof byte[]) {
return Integer.BYTES + ((byte[]) o).length;
} else if (o.getClass().isArray() && Message.class.isAssignableFrom(o.getClass().getComponentType())) {
return getByteSize((Message[]) o);
} else if (o instanceof Message) {
return getByteSize((Message) o);
} else {
throw new IllegalArgumentException("Unsupported object type: " + o.getClass().getSimpleName());
}
}
public static <T extends Message> List<T> readList(Class<T> type, DataInputStream i) throws IOException {
int size = i.readInt();
try {
var constructor = type.getConstructor();
List<T> items = new ArrayList<>(size);
for (int k = 0; k < size; k++) {
var item = constructor.newInstance();
item.read(i);
items.add(item);
}
return items;
} catch (ReflectiveOperationException e) {
throw new IOException(e);
public static int getByteSize(Object... objects) {
int size = 0;
for (var o : objects) {
size += getByteSize(o);
}
return size;
}
}

View File

@ -0,0 +1,16 @@
package nl.andrewl.concord_core.msg;
import nl.andrewl.concord_core.util.ChainedDataOutputStream;
import java.io.IOException;
@FunctionalInterface
public interface MessageWriter<T extends Message> {
/**
* Writes this message to the given output stream.
* @param msg The message to write.
* @param out The output stream to write to.
* @throws IOException If an error occurs while writing.
*/
void write(T msg, ChainedDataOutputStream out) throws IOException;
}

View File

@ -1,10 +1,24 @@
package nl.andrewl.concord_core.msg;
import nl.andrewl.concord_core.msg.types.Error;
import nl.andrewl.concord_core.msg.types.*;
import nl.andrewl.concord_core.msg.types.ServerMetaData;
import nl.andrewl.concord_core.msg.types.ServerUsers;
import nl.andrewl.concord_core.msg.types.UserData;
import nl.andrewl.concord_core.msg.types.channel.CreateThread;
import nl.andrewl.concord_core.msg.types.channel.MoveToChannel;
import nl.andrewl.concord_core.msg.types.chat.Chat;
import nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest;
import nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse;
import nl.andrewl.concord_core.msg.types.client_setup.*;
import nl.andrewl.concord_core.util.ChainedDataOutputStream;
import nl.andrewl.concord_core.util.ExtendedDataInputStream;
import java.io.*;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -17,31 +31,36 @@ public class Serializer {
* The mapping which defines each supported message type and the byte value
* used to identify it when reading and writing messages.
*/
private final Map<Byte, Class<? extends Message>> messageTypes = new HashMap<>();
private final Map<Byte, MessageTypeSerializer<?>> messageTypes = new HashMap<>();
/**
* An inverse of {@link Serializer#messageTypes} which is used to look up a
* message's byte value when you know the class of the message.
*/
private final Map<Class<? extends Message>, Byte> inverseMessageTypes = new HashMap<>();
private final Map<MessageTypeSerializer<?>, Byte> inverseMessageTypes = new HashMap<>();
/**
* Constructs a new serializer instance, with a standard set of supported
* message types.
*/
public Serializer() {
registerType(0, Identification.class);
registerType(1, ServerWelcome.class);
registerType(2, Chat.class);
registerType(3, MoveToChannel.class);
registerType(4, ChatHistoryRequest.class);
registerType(5, ChatHistoryResponse.class);
registerType(6, ChannelUsersRequest.class);
registerType(7, ServerUsers.class);
registerType(8, ServerMetaData.class);
registerType(9, Error.class);
registerType(10, CreateThread.class);
registerType(11, KeyData.class);
List<Class<? extends Message>> messageClasses = List.of(
// Utility messages.
Error.class,
UserData.class,
ServerUsers.class,
// Client setup messages.
KeyData.class, ClientRegistration.class, ClientLogin.class, ClientSessionResume.class,
RegistrationStatus.class, ServerWelcome.class, ServerMetaData.class,
// Chat messages.
Chat.class, ChatHistoryRequest.class, ChatHistoryResponse.class,
// Channel messages.
MoveToChannel.class,
CreateThread.class
);
for (int id = 0; id < messageClasses.size(); id++) {
registerType(id, messageClasses.get(id));
}
}
/**
@ -49,12 +68,12 @@ public class Serializer {
* serializer, by adding it to the normal and inverse mappings.
* @param id The byte which will be used to identify messages of the given
* class. The value should from 0 to 127.
* @param messageClass The class of message which is registered with the
* given byte identifier.
* @param messageClass The type of message associated with the given id.
*/
private synchronized void registerType(int id, Class<? extends Message> messageClass) {
messageTypes.put((byte) id, messageClass);
inverseMessageTypes.put(messageClass, (byte) id);
private synchronized <T extends Message> void registerType(int id, Class<T> messageClass) {
MessageTypeSerializer<T> type = MessageTypeSerializer.get(messageClass);
messageTypes.put((byte) id, type);
inverseMessageTypes.put(type, (byte) id);
}
/**
@ -67,19 +86,16 @@ public class Serializer {
* constructed for the incoming data.
*/
public Message readMessage(InputStream i) throws IOException {
DataInputStream d = new DataInputStream(i);
byte type = d.readByte();
var clazz = messageTypes.get(type);
if (clazz == null) {
throw new IOException("Unsupported message type: " + type);
ExtendedDataInputStream d = new ExtendedDataInputStream(i);
byte typeId = d.readByte();
var type = messageTypes.get(typeId);
if (type == null) {
throw new IOException("Unsupported message type: " + typeId);
}
try {
var constructor = clazz.getConstructor();
var message = constructor.newInstance();
message.read(d);
return message;
return type.reader().read(d);
} catch (Throwable e) {
throw new IOException("Could not instantiate new message object of type " + clazz.getSimpleName(), e);
throw new IOException("Could not instantiate new message object of type " + type.getClass().getSimpleName(), e);
}
}
@ -90,14 +106,14 @@ public class Serializer {
* @throws IOException If an error occurs while writing, or if the message
* to write is not supported by this serializer.
*/
public void writeMessage(Message msg, OutputStream o) throws IOException {
public <T extends Message> void writeMessage(Message msg, OutputStream o) throws IOException {
DataOutputStream d = new DataOutputStream(o);
Byte type = inverseMessageTypes.get(msg.getClass());
if (type == null) {
Byte typeId = inverseMessageTypes.get(msg.getTypeSerializer());
if (typeId == null) {
throw new IOException("Unsupported message type: " + msg.getClass().getSimpleName());
}
d.writeByte(type);
msg.write(d);
d.writeByte(typeId);
msg.getTypeSerializer().writer().write(msg, new ChainedDataOutputStream(d));
d.flush();
}
}

View File

@ -0,0 +1,7 @@
/**
* Message components which are used by the server and the default client
* implementation. Notably, the {@link nl.andrewl.concord_core.msg.Serializer}
* within this package defines the set of supported message types, and provides
* the highest-level interface to client-server communication.
*/
package nl.andrewl.concord_core.msg;

View File

@ -1,36 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Deprecated
public class ChannelUsersRequest implements Message {
private UUID channelId;
@Override
public int getByteCount() {
return UUID_BYTES;
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.channelId, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.channelId = readUUID(i);
}
}

View File

@ -1,43 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* This message is sent from the server to the client when the information about
* the users in the channel that a client is in has changed. For example, when
* a user leaves a channel, all others in that channel will be sent this message
* to indicate that update.
* @deprecated Clients will be updated via a {@link ServerUsers} message.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Deprecated
public class ChannelUsersResponse implements Message {
private List<UserData> users;
@Override
public int getByteCount() {
return getByteSize(this.users);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeList(this.users, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.users = readList(UserData.class, i);
}
}

View File

@ -1,83 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* This message contains information about a chat message that a user sent.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Chat implements Message {
private static final long ID_NONE = 0;
private UUID id;
private UUID senderId;
private String senderNickname;
private long timestamp;
private String message;
public Chat(UUID senderId, String senderNickname, long timestamp, String message) {
this.id = null;
this.senderId = senderId;
this.senderNickname = senderNickname;
this.timestamp = timestamp;
this.message = message;
}
public Chat(String message) {
this(null, null, System.currentTimeMillis(), message);
}
@Override
public int getByteCount() {
return 2 * UUID_BYTES + Long.BYTES + getByteSize(this.senderNickname) + getByteSize(this.message);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.id, o);
writeUUID(this.senderId, o);
writeString(this.senderNickname, o);
o.writeLong(this.timestamp);
writeString(this.message, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.id = readUUID(i);
this.senderId = readUUID(i);
this.senderNickname = readString(i);
this.timestamp = i.readLong();
this.message = readString(i);
}
@Override
public String toString() {
return String.format("%s: %s", this.senderNickname, this.message);
}
@Override
public boolean equals(Object o) {
if (o.getClass().equals(this.getClass())) {
Chat other = (Chat) o;
if (Objects.equals(this.getId(), other.getId())) return true;
return this.getSenderId().equals(other.getSenderId()) &&
this.getTimestamp() == other.getTimestamp() &&
this.getSenderNickname().equals(other.getSenderNickname()) &&
this.message.length() == other.message.length();
}
return false;
}
}

View File

@ -1,43 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* The response that a server sends to a {@link ChatHistoryRequest}. The list of
* messages is ordered by timestamp, with the newest messages appearing first.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatHistoryResponse implements Message {
private UUID channelId;
List<Chat> messages;
@Override
public int getByteCount() {
return UUID_BYTES + getByteSize(messages);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.channelId, o);
writeList(this.messages, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.channelId = readUUID(i);
this.messages = readList(Chat.class, i);
}
}

View File

@ -1,56 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* This message is sent by clients when they indicate that they would like to
* create a new thread in their current channel.
* <p>
* Conversely, this message is also sent by the server when a thread has
* been created by someone, and all clients need to be notified so that they
* can properly display to the user that a message has been turned into a
* thread.
* </p>
*/
@Data
@NoArgsConstructor
public class CreateThread implements Message {
/**
* The id of the message from which the thread will be created. This will
* serve as the entry point of the thread, and the unique identifier for the
* thread.
*/
private UUID messageId;
/**
* The title for the thread. This may be null, in which case the thread does
* not have any title.
*/
private String title;
@Override
public int getByteCount() {
return UUID_BYTES + getByteSize(title);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.messageId, o);
writeString(this.title, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.messageId = readUUID(i);
this.title = readString(i);
}
}

View File

@ -1,24 +1,14 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* Error message which can be sent between either the server or client to
* indicate an unsavory situation.
* @param level The severity level of the error.
* @param message A message indicating what went wrong.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Error implements Message {
public record Error (Level level, String message) implements Message {
/**
* The error level gives an indication as to the severity of the error.
* Warnings indicate that a user has attempted to do something which they
@ -27,31 +17,21 @@ public class Error implements Message {
*/
public enum Level {WARNING, ERROR}
private Level level;
private String message;
/**
* Creates a warning message.
* @param message The message text.
* @return A warning-level error message.
*/
public static Error warning(String message) {
return new Error(Level.WARNING, message);
}
/**
* Creates an error message.
* @param message The message text.
* @return An error-level error message.
*/
public static Error error(String message) {
return new Error(Level.ERROR, message);
}
@Override
public int getByteCount() {
return Integer.BYTES + getByteSize(this.message);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeEnum(this.level, o);
writeString(this.message, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.level = readEnum(Level.class, i);
this.message = readString(i);
}
}

View File

@ -1,56 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* This message is sent from the client to a server, to provide identification
* information about the client to the server when the connection is started.
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Identification implements Message {
/**
* The nickname that a client wants to be identified by when in the server.
* If a valid session token is provided, this can be left as null, and the
* user will be given the same nickname they had in their previous session.
*/
private String nickname;
/**
* A session token that's used to uniquely identify this client as the same
* as one who has previously connected to the server. If this is null, the
* client is indicating that they have not connected to this server before.
*/
private String sessionToken;
public Identification(String nickname) {
this.nickname = nickname;
}
@Override
public int getByteCount() {
return getByteSize(this.nickname) + getByteSize(sessionToken);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeString(this.nickname, o);
writeString(this.sessionToken, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.nickname = readString(i);
this.sessionToken = readString(i);
}
}

View File

@ -1,52 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.Getter;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
/**
* This message is sent as the first message from both the server and the client
* to establish an end-to-end encryption via a key exchange.
*/
@Getter
@NoArgsConstructor
public class KeyData implements Message {
private byte[] iv;
private byte[] salt;
private byte[] publicKey;
public KeyData(byte[] iv, byte[] salt, byte[] publicKey) {
this.iv = iv;
this.salt = salt;
this.publicKey = publicKey;
}
@Override
public int getByteCount() {
return Integer.BYTES * 3 + iv.length + salt.length + publicKey.length;
}
@Override
public void write(DataOutputStream o) throws IOException {
o.writeInt(iv.length);
o.write(iv);
o.writeInt(salt.length);
o.write(salt);
o.writeInt(publicKey.length);
o.write(publicKey);
}
@Override
public void read(DataInputStream i) throws IOException {
int ivLength = i.readInt();
this.iv = i.readNBytes(ivLength);
int saltLength = i.readInt();
this.salt = i.readNBytes(saltLength);
int publicKeyLength = i.readInt();
this.publicKey = i.readNBytes(publicKeyLength);
}
}

View File

@ -1,67 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* A message that's sent to a client when they've been moved to another channel.
* This indicates to the client that they should perform the necessary requests
* to update their view to indicate that they're now in a different channel.
* <p>
* Conversely, a client can send this request to the server to indicate that
* they would like to switch to the specified channel.
* </p>
* <p>
* Clients can also send this message and provide the id of another client
* to request that they enter a private message channel with the referenced
* client.
* </p>
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MoveToChannel implements Message {
/**
* The id of the channel that the client is requesting or being moved to, or
* the id of another client that the user wishes to begin private messaging
* with.
*/
private UUID id;
/**
* The name of the channel that the client is moved to. This is null in
* cases where the client is requesting to move to a channel, and is only
* provided by the server when it moves a client.
*/
private String channelName;
public MoveToChannel(UUID channelId) {
this.id = channelId;
}
@Override
public int getByteCount() {
return UUID_BYTES + getByteSize(this.channelName);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.id, o);
writeString(this.channelName, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.id = readUUID(i);
this.channelName = readString(i);
}
}

View File

@ -1,73 +1,18 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* Metadata is sent by the server to clients to inform them of the structure of
* the server. This includes basic information about the server's own properties
* as well as information about all top-level channels.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ServerMetaData implements Message {
private String name;
private List<ChannelData> channels;
@Override
public int getByteCount() {
return getByteSize(this.name) + getByteSize(this.channels);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeString(this.name, o);
writeList(this.channels, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.name = readString(i);
this.channels = readList(ChannelData.class, i);
}
public record ServerMetaData (String name, ChannelData[] channels) implements Message {
/**
* Metadata about a top-level channel in the server which is visible and
* joinable for a user.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ChannelData implements Message {
private UUID id;
private String name;
@Override
public int getByteCount() {
return UUID_BYTES + getByteSize(this.name);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.id, o);
writeString(this.name, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.id = readUUID(i);
this.name = readString(i);
}
}
public static record ChannelData (UUID id, String name) implements Message {}
}

View File

@ -1,40 +1,10 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* This message is sent from the server to the client whenever a change happens
* which requires the server to notify clients about a change of the list of
* global users.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ServerUsers implements Message {
private List<UserData> users;
@Override
public int getByteCount() {
return getByteSize(this.users);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeList(this.users, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.users = readList(UserData.class, i);
}
}
public record ServerUsers (UserData[] users) implements Message {}

View File

@ -1,72 +0,0 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* This message is sent from the server to the client after the server accepts
* the client's identification and registers the client in the server.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ServerWelcome implements Message {
/**
* The unique id of this client.
*/
private UUID clientId;
/**
* The token which this client can use to reconnect to the server later and
* still be recognized as the same user.
*/
private String sessionToken;
/**
* The id of the channel that the user has been placed in.
*/
private UUID currentChannelId;
/**
* The name of the channel that the user has been placed in.
*/
private String currentChannelName;
/**
* Information about the server's structure.
*/
private ServerMetaData metaData;
@Override
public int getByteCount() {
return 2 * UUID_BYTES + getByteSize(this.sessionToken) + getByteSize(this.currentChannelName) + this.metaData.getByteCount();
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.clientId, o);
writeString(this.sessionToken, o);
writeUUID(this.currentChannelId, o);
writeString(this.currentChannelName, o);
this.metaData.write(o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.clientId = readUUID(i);
this.sessionToken = readString(i);
this.currentChannelId = readUUID(i);
this.metaData = new ServerMetaData();
this.currentChannelName = readString(i);
this.metaData.read(i);
}
}

View File

@ -1,43 +1,11 @@
package nl.andrewl.concord_core.msg.types;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.UUID;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
import static nl.andrewl.concord_core.msg.MessageUtils.readString;
/**
* Standard set of user data that is used mainly as a component of other more
* complex messages.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserData implements Message {
private UUID id;
private String name;
@Override
public int getByteCount() {
return UUID_BYTES + getByteSize(this.name);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.id, o);
writeString(this.name, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.id = readUUID(i);
this.name = readString(i);
}
}
public record UserData (UUID id, String name) implements Message {}

View File

@ -0,0 +1,20 @@
package nl.andrewl.concord_core.msg.types.channel;
import nl.andrewl.concord_core.msg.Message;
import java.util.UUID;
/**
* This message is sent by clients when they indicate that they would like to
* create a new thread in their current channel.
* <p>
* Conversely, this message is also sent by the server when a thread has
* been created by someone, and all clients need to be notified so that they
* can properly display to the user that a message has been turned into a
* thread.
* </p>
*
* @param messageId The id of the message that a thread will be/is attached to.
* @param title The title of the thread. This may be null.
*/
public record CreateThread (UUID messageId, String title) implements Message {}

View File

@ -0,0 +1,32 @@
package nl.andrewl.concord_core.msg.types.channel;
import nl.andrewl.concord_core.msg.Message;
import java.util.UUID;
/**
* A message that's sent to a client when they've been moved to another channel.
* This indicates to the client that they should perform the necessary requests
* to update their view to indicate that they're now in a different channel.
* <p>
* Conversely, a client can send this request to the server to indicate that
* they would like to switch to the specified channel.
* </p>
* <p>
* Clients can also send this message and provide the id of another client
* to request that they enter a private message channel with the referenced
* client.
* </p>
* @param id The id of the channel that the client is requesting or being moved
* to, or the id of another client that the user wishes to begin
* private messaging with.
* @param channelName The name of the channel that the client is moved to. This
* is null in cases where the client is requesting to move to
* a channel, and is only provided by the server when it
* moves a client.
*/
public record MoveToChannel (UUID id, String channelName) implements Message {
public MoveToChannel(UUID id) {
this(id, null);
}
}

View File

@ -0,0 +1,4 @@
/**
* Messages pertaining to channel interaction and updates.
*/
package nl.andrewl.concord_core.msg.types.channel;

View File

@ -0,0 +1,41 @@
package nl.andrewl.concord_core.msg.types.chat;
import nl.andrewl.concord_core.msg.Message;
import java.util.Objects;
import java.util.UUID;
/**
* This message contains information about a chat message that a user sent.
*/
public record Chat (UUID id, UUID senderId, String senderNickname, long timestamp, String message) implements Message {
public Chat(UUID senderId, String senderNickname, long timestamp, String message) {
this(null, senderId, senderNickname, timestamp, message);
}
public Chat(String message) {
this(null, null, System.currentTimeMillis(), message);
}
public Chat(UUID newId, Chat original) {
this(newId, original.senderId, original.senderNickname, original.timestamp, original.message);
}
@Override
public String toString() {
return String.format("%s: %s", this.senderNickname, this.message);
}
@Override
public boolean equals(Object o) {
if (o.getClass().equals(this.getClass())) {
Chat other = (Chat) o;
if (Objects.equals(this.id, other.id)) return true;
return this.senderId.equals(other.senderId) &&
this.timestamp == other.timestamp &&
this.senderNickname.equals(other.senderNickname) &&
this.message.length() == other.message.length();
}
return false;
}
}

View File

@ -1,20 +1,12 @@
package nl.andrewl.concord_core.msg.types;
package nl.andrewl.concord_core.msg.types.chat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import static nl.andrewl.concord_core.msg.MessageUtils.*;
/**
* A message which clients can send to the server to request some messages from
* the server's history of all sent messages from a particular source. Every
@ -32,6 +24,7 @@ import static nl.andrewl.concord_core.msg.MessageUtils.*;
* </p>
* <p>
* The following query parameters are supported:
* </p>
* <ul>
* <li><code>count</code> - Fetch up to N messages. Minimum of 1, and
* a server-specific maximum count, usually no higher than 1000.</li>
@ -45,26 +38,20 @@ import static nl.andrewl.concord_core.msg.MessageUtils.*;
* is present, all others are ignored, and a list containing the single
* message is returned, if it could be found, otherwise an empty list.</li>
* </ul>
* </p>
* <p>
* Responses to this request are sent via {@link ChatHistoryResponse}, where
* the list of messages is always sorted by the timestamp.
* </p>
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatHistoryRequest implements Message {
private UUID channelId;
private String query;
public record ChatHistoryRequest (UUID channelId, String query) implements Message {
public ChatHistoryRequest(UUID channelId) {
this(channelId, "");
}
public ChatHistoryRequest(UUID channelId, Map<String, String> params) {
this.channelId = channelId;
this.query = params.entrySet().stream()
this(
channelId,
params.entrySet().stream()
.map(entry -> {
if (entry.getKey().contains(";") || entry.getKey().contains("=")) {
throw new IllegalArgumentException("Parameter key \"" + entry.getKey() + "\" contains invalid characters.");
@ -74,9 +61,14 @@ public class ChatHistoryRequest implements Message {
}
return entry.getKey() + "=" + entry.getValue();
})
.collect(Collectors.joining(";"));
.collect(Collectors.joining(";"))
);
}
/**
* Utility method to extract the query string's values as a key-value map.
* @return A map of the query parameters.
*/
public Map<String, String> getQueryAsMap() {
String[] pairs = this.query.split(";");
if (pairs.length == 0) return Map.of();
@ -88,21 +80,4 @@ public class ChatHistoryRequest implements Message {
}
return params;
}
@Override
public int getByteCount() {
return UUID_BYTES + getByteSize(this.query);
}
@Override
public void write(DataOutputStream o) throws IOException {
writeUUID(this.channelId, o);
writeString(this.query, o);
}
@Override
public void read(DataInputStream i) throws IOException {
this.channelId = readUUID(i);
this.query = readString(i);
}
}

View File

@ -0,0 +1,13 @@
package nl.andrewl.concord_core.msg.types.chat;
import nl.andrewl.concord_core.msg.Message;
import java.util.UUID;
/**
* The response that a server sends to a {@link ChatHistoryRequest}. The list of
* messages is ordered by timestamp, with the newest messages appearing first.
* @param channelId The id of the channel that the chat messages belong to.
* @param messages The list of messages that comprises the history.
*/
public record ChatHistoryResponse (UUID channelId, Chat[] messages) implements Message {}

View File

@ -0,0 +1,5 @@
/**
* Messages pertaining to chat messages and other auxiliary messages regarding
* the management of chat information.
*/
package nl.andrewl.concord_core.msg.types.chat;

View File

@ -0,0 +1,9 @@
package nl.andrewl.concord_core.msg.types.client_setup;
import nl.andrewl.concord_core.msg.Message;
/**
* This message is sent by clients to log into a server that they have already
* registered with, but don't have a valid session token for.
*/
public record ClientLogin(String username, String password) implements Message {}

View File

@ -0,0 +1,14 @@
package nl.andrewl.concord_core.msg.types.client_setup;
import nl.andrewl.concord_core.msg.Message;
/**
* The data that new users should send to a server in order to register in that
* server.
*/
public record ClientRegistration(
String name,
String description,
String username,
String password
) implements Message {}

View File

@ -0,0 +1,9 @@
package nl.andrewl.concord_core.msg.types.client_setup;
import nl.andrewl.concord_core.msg.Message;
/**
* This message is sent by the client to log into a server using a session token
* instead of a username/password combination.
*/
public record ClientSessionResume(String sessionToken) implements Message {}

View File

@ -0,0 +1,12 @@
package nl.andrewl.concord_core.msg.types.client_setup;
import nl.andrewl.concord_core.msg.Message;
/**
* This message is sent as the first message from both the server and the client
* to establish an end-to-end encryption via a key exchange.
* @param iv The initialization vector bytes.
* @param salt The salt bytes.
* @param publicKey The public key.
*/
public record KeyData (byte[] iv, byte[] salt, byte[] publicKey) implements Message {}

View File

@ -0,0 +1,15 @@
package nl.andrewl.concord_core.msg.types.client_setup;
import nl.andrewl.concord_core.msg.Message;
/**
* A response from the server which indicates the current status of the client's
* registration request.
*/
public record RegistrationStatus (Type type, String reason) implements Message {
public enum Type {PENDING, ACCEPTED, REJECTED}
public static RegistrationStatus pending() {
return new RegistrationStatus(Type.PENDING, null);
}
}

View File

@ -0,0 +1,25 @@
package nl.andrewl.concord_core.msg.types.client_setup;
import nl.andrewl.concord_core.msg.Message;
import nl.andrewl.concord_core.msg.types.ServerMetaData;
import java.util.UUID;
/**
* This message is sent from the server to the client after the server accepts
* the client's identification and registers the client in the server.
*
* @param clientId The unique id of this client.
* @param sessionToken The token which this client can use to reconnect to the
* server later and still be recognized as the same user.
* @param currentChannelId The id of the channel that the user is placed in.
* @param currentChannelName The name of the channel that the user is placed in.
* @param metaData Information about the server's structure.
*/
public record ServerWelcome (
UUID clientId,
String sessionToken,
UUID currentChannelId,
String currentChannelName,
ServerMetaData metaData
) implements Message {}

View File

@ -0,0 +1,4 @@
/**
* Messages pertaining to the establishment of a connection with clients.
*/
package nl.andrewl.concord_core.msg.types.client_setup;

View File

@ -0,0 +1,10 @@
/**
* Contains all the various message types which can be sent between the server
* and client.
* <p>
* <em>Note that not all message types defined here may be supported by the
* latest version of Concord. See {@link nl.andrewl.concord_core.msg.Serializer}
* for the definitive list.</em>
* </p>
*/
package nl.andrewl.concord_core.msg.types;

View File

@ -0,0 +1,111 @@
package nl.andrewl.concord_core.util;
import nl.andrewl.concord_core.msg.Message;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
/**
* A more complex output stream which redefines certain methods for convenience
* with method chaining.
*/
public class ChainedDataOutputStream {
private final DataOutputStream out;
public ChainedDataOutputStream(DataOutputStream out) {
this.out = out;
}
public ChainedDataOutputStream writeInt(int x) throws IOException {
out.writeInt(x);
return this;
}
public ChainedDataOutputStream writeString(String s) throws IOException {
if (s == null) {
out.writeInt(-1);
} else {
out.writeInt(s.length());
out.write(s.getBytes(StandardCharsets.UTF_8));
}
return this;
}
public ChainedDataOutputStream writeStrings(String... strings) throws IOException {
for (var s : strings) {
writeString(s);
}
return this;
}
public ChainedDataOutputStream writeEnum(Enum<?> value) throws IOException {
if (value == null) {
out.writeInt(-1);
} else {
out.writeInt(value.ordinal());
}
return this;
}
public ChainedDataOutputStream writeUUID(UUID uuid) throws IOException {
if (uuid == null) {
out.writeLong(-1);
out.writeLong(-1);
} else {
out.writeLong(uuid.getMostSignificantBits());
out.writeLong(uuid.getLeastSignificantBits());
}
return this;
}
public <T extends Message> ChainedDataOutputStream writeArray(T[] array) throws IOException {
this.out.writeInt(array.length);
for (var item : array) {
writeMessage(item);
}
return this;
}
public <T extends Message> ChainedDataOutputStream writeMessage(Message msg) throws IOException {
this.out.writeBoolean(msg != null);
if (msg != null) {
msg.getTypeSerializer().writer().write(msg, this);
}
return this;
}
/**
* Writes an object to the stream.
* @param o The object to write.
* @param type The object's type. This is needed in case the object itself
* is null, which may be the case for some strings or ids.
* @return The chained output stream.
* @throws IOException If an error occurs.
*/
public ChainedDataOutputStream writeObject(Object o, Class<?> type) throws IOException {
if (type.equals(Integer.class) || type.equals(int.class)) {
this.writeInt((Integer) o);
} else if (type.equals(Long.class) || type.equals(long.class)) {
this.out.writeLong((Long) o);
} else if (type.equals(String.class)) {
this.writeString((String) o);
} else if (type.equals(UUID.class)) {
this.writeUUID((UUID) o);
} else if (type.isEnum()) {
this.writeEnum((Enum<?>) o);
} else if (type.equals(byte[].class)) {
byte[] b = (byte[]) o;
this.writeInt(b.length);
this.out.write(b);
} else if (type.isArray() && Message.class.isAssignableFrom(type.getComponentType())) {
this.writeArray((Message[]) o);
} else if (Message.class.isAssignableFrom(type)) {
this.writeMessage((Message) o);
} else {
throw new IOException("Unsupported object type: " + o.getClass().getSimpleName());
}
return this;
}
}

View File

@ -0,0 +1,88 @@
package nl.andrewl.concord_core.util;
import nl.andrewl.concord_core.msg.Message;
import nl.andrewl.concord_core.msg.MessageTypeSerializer;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Array;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
/**
* An extended output stream which contains additional methods for reading more
* complex types that are used by the Concord system.
*/
public class ExtendedDataInputStream extends DataInputStream {
public ExtendedDataInputStream(InputStream in) {
super(in);
}
public String readString() throws IOException {
int length = super.readInt();
if (length == -1) return null;
if (length == 0) return "";
byte[] data = new byte[length];
int read = super.read(data);
if (read != length) throw new IOException("Not all bytes of a string of length " + length + " could be read.");
return new String(data, StandardCharsets.UTF_8);
}
public <T extends Enum<?>> T readEnum(Class<T> e) throws IOException {
int ordinal = super.readInt();
if (ordinal == -1) return null;
return e.getEnumConstants()[ordinal];
}
public UUID readUUID() throws IOException {
long a = super.readLong();
long b = super.readLong();
if (a == -1 && b == -1) {
return null;
}
return new UUID(a, b);
}
@SuppressWarnings("unchecked")
public <T extends Message> T[] readArray(MessageTypeSerializer<T> type) throws IOException {
int length = super.readInt();
T[] array = (T[]) Array.newInstance(type.messageClass(), length);
for (int i = 0; i < length; i++) {
array[i] = type.reader().read(this);
}
return array;
}
/**
* Reads an object from the stream that is of a certain expected type.
* @param type The type of object to read.
* @return The object that was read.
* @throws IOException If an error occurs while reading.
*/
@SuppressWarnings("unchecked")
public Object readObject(Class<?> type) throws IOException {
if (type.equals(Integer.class) || type.equals(int.class)) {
return this.readInt();
} else if (type.equals(Long.class) || type.equals(long.class)) {
return this.readLong();
} else if (type.equals(String.class)) {
return this.readString();
} else if (type.equals(UUID.class)) {
return this.readUUID();
} else if (type.isEnum()) {
return this.readEnum((Class<? extends Enum<?>>) type);
} else if (type.isAssignableFrom(byte[].class)) {
int length = this.readInt();
return this.readNBytes(length);
} else if (type.isArray() && Message.class.isAssignableFrom(type.getComponentType())) {
var messageType = MessageTypeSerializer.get((Class<? extends Message>) type.getComponentType());
return this.readArray(messageType);
} else if (Message.class.isAssignableFrom(type)) {
var messageType = MessageTypeSerializer.get((Class<? extends Message>) type);
return messageType.reader().read(this);
} else {
throw new IOException("Unsupported object type: " + type.getSimpleName());
}
}
}

View File

@ -1,3 +1,8 @@
package nl.andrewl.concord_core.util;
/**
* Simple generic pair of two objects.
* @param <A> The first object.
* @param <B> The second object.
*/
public record Pair<A, B>(A first, B second) {}

View File

@ -0,0 +1,9 @@
package nl.andrewl.concord_core.util;
/**
* Simple generic triple of objects.
* @param <A> The first object.
* @param <B> The second object.
* @param <C> The third object.
*/
public record Triple<A, B, C> (A first, B second, C third) {}

View File

@ -0,0 +1,5 @@
/**
* Contains some useful one-off utility classes that any consumer of Concord
* messages could benefit from.
*/
package nl.andrewl.concord_core.util;

0
docs/.nojekyll Normal file
View File

21
docs/index.html Normal file
View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Concord</title>
</head>
<body>
<h1>Concord</h1>
<p>
More content coming soon!
</p>
<h2>Javadoc</h2>
<ul>
<li><a href="javadoc/core">Core</a></li>
<li><a href="javadoc/server">Server</a></li>
</ul>
</body>
</html>

View File

@ -0,0 +1,202 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>All Classes and Interfaces (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="class index">
<meta name="generator" content="javadoc/AllClassesIndexWriter">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
</head>
<body class="all-classes-index-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "./";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="concord_core/module-summary.html">Module</a></li>
<li>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html#all-classes">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="All Classes and Interfaces" class="title">All Classes and Interfaces</h1>
</div>
<div id="all-classes-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="all-classes-table-tab0" role="tab" aria-selected="true" aria-controls="all-classes-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table', 2)" class="active-table-tab">All Classes and Interfaces</button><button id="all-classes-table-tab1" role="tab" aria-selected="false" aria-controls="all-classes-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table-tab1', 2)" class="table-tab">Interfaces</button><button id="all-classes-table-tab2" role="tab" aria-selected="false" aria-controls="all-classes-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table-tab2', 2)" class="table-tab">Classes</button><button id="all-classes-table-tab3" role="tab" aria-selected="false" aria-controls="all-classes-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table-tab3', 2)" class="table-tab">Enum Classes</button><button id="all-classes-table-tab4" role="tab" aria-selected="false" aria-controls="all-classes-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('all-classes-table', 'all-classes-table-tab4', 2)" class="table-tab">Record Classes</button></div>
<div id="all-classes-table.tabpanel" role="tabpanel">
<div class="summary-table two-column-summary" aria-labelledby="all-classes-table-tab0">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="concord_core/nl/andrewl/concord_core/util/ChainedDataOutputStream.html" title="class in nl.andrewl.concord_core.util">ChainedDataOutputStream</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
<div class="block">A more complex output stream which redefines certain methods for convenience
with method chaining.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/chat/Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">This message contains information about a chat message that a user sent.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/chat/ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryRequest</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">A message which clients can send to the server to request some messages from
the server's history of all sent messages from a particular source.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/chat/ChatHistoryResponse.html" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryResponse</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">The response that a server sends to a <a href="concord_core/nl/andrewl/concord_core/msg/types/chat/ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat"><code>ChatHistoryRequest</code></a>.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/ClientLogin.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientLogin</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">This message is sent by clients to log into a server that they have already
registered with, but don't have a valid session token for.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/ClientRegistration.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientRegistration</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">The data that new users should send to a server in order to register in that
server.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/ClientSessionResume.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientSessionResume</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">This message is sent by the client to log into a server using a session token
instead of a username/password combination.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/channel/CreateThread.html" title="class in nl.andrewl.concord_core.msg.types.channel">CreateThread</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">This message is sent by clients when they indicate that they would like to
create a new thread in their current channel.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="concord_core/nl/andrewl/concord_core/msg/Encryption.html" title="class in nl.andrewl.concord_core.msg">Encryption</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
<div class="block">Utility class for handling the establishment of encrypted communication.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/Error.html" title="class in nl.andrewl.concord_core.msg.types">Error</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">Error message which can be sent between either the server or client to
indicate an unsavory situation.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab3"><a href="concord_core/nl/andrewl/concord_core/msg/types/Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab3">
<div class="block">The error level gives an indication as to the severity of the error.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="concord_core/nl/andrewl/concord_core/util/ExtendedDataInputStream.html" title="class in nl.andrewl.concord_core.util">ExtendedDataInputStream</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
<div class="block">An extended output stream which contains additional methods for reading more
complex types that are used by the Concord system.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/KeyData.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">KeyData</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">This message is sent as the first message from both the server and the client
to establish an end-to-end encryption via a key exchange.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab1"><a href="concord_core/nl/andrewl/concord_core/msg/Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab1">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab1"><a href="concord_core/nl/andrewl/concord_core/msg/MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="concord_core/nl/andrewl/concord_core/msg/MessageReader.html" title="type parameter in MessageReader">T</a> extends <a href="concord_core/nl/andrewl/concord_core/msg/Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab1">&nbsp;</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;<a href="concord_core/nl/andrewl/concord_core/msg/MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="concord_core/nl/andrewl/concord_core/msg/Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">Record containing the components needed to read and write a given message.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="concord_core/nl/andrewl/concord_core/msg/MessageUtils.html" title="class in nl.andrewl.concord_core.msg">MessageUtils</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
<div class="block">Utility class which provides method for serializing and deserializing complex
data types.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab1"><a href="concord_core/nl/andrewl/concord_core/msg/MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="concord_core/nl/andrewl/concord_core/msg/MessageWriter.html" title="type parameter in MessageWriter">T</a> extends <a href="concord_core/nl/andrewl/concord_core/msg/Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab1">&nbsp;</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/channel/MoveToChannel.html" title="class in nl.andrewl.concord_core.msg.types.channel">MoveToChannel</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">A message that's sent to a client when they've been moved to another channel.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/util/Pair.html" title="class in nl.andrewl.concord_core.util">Pair</a>&lt;<a href="concord_core/nl/andrewl/concord_core/util/Pair.html" title="type parameter in Pair">A</a>,<wbr><a href="concord_core/nl/andrewl/concord_core/util/Pair.html" title="type parameter in Pair">B</a>&gt;</div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">Simple generic pair of two objects.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/RegistrationStatus.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">RegistrationStatus</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">A response from the server which indicates the current status of the client's
registration request.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab3"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/RegistrationStatus.Type.html" title="enum class in nl.andrewl.concord_core.msg.types.client_setup">RegistrationStatus.Type</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab3">&nbsp;</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="concord_core/nl/andrewl/concord_core/msg/Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
<div class="block">This class is responsible for reading and writing messages from streams.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/ServerMetaData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">Metadata is sent by the server to clients to inform them of the structure of
the server.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">Metadata about a top-level channel in the server which is visible and
joinable for a user.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/ServerUsers.html" title="class in nl.andrewl.concord_core.msg.types">ServerUsers</a></div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">This message is sent from the server to the client whenever a change happens
which requires the server to notify clients about a change of the list of
global users.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/ServerWelcome.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ServerWelcome</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">This message is sent from the server to the client after the server accepts
the client's identification and registers the client in the server.</div>
</div>
<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/util/Triple.html" title="class in nl.andrewl.concord_core.util">Triple</a>&lt;<a href="concord_core/nl/andrewl/concord_core/util/Triple.html" title="type parameter in Triple">A</a>,<wbr><a href="concord_core/nl/andrewl/concord_core/util/Triple.html" title="type parameter in Triple">B</a>,<wbr><a href="concord_core/nl/andrewl/concord_core/util/Triple.html" title="type parameter in Triple">C</a>&gt;</div>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
<div class="block">Simple generic triple of objects.</div>
</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="concord_core/nl/andrewl/concord_core/msg/types/UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
<div class="block">Standard set of user data that is used mainly as a component of other more
complex messages.</div>
</div>
</div>
</div>
</div>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,95 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>All Packages (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="package index">
<meta name="generator" content="javadoc/AllPackagesIndexWriter">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
</head>
<body class="all-packages-index-page">
<script type="text/javascript">var pathtoroot = "./";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="concord_core/module-summary.html">Module</a></li>
<li>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html#all-packages">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="All&amp;nbsp;Packages" class="title">All&nbsp;Packages</h1>
</div>
<div class="caption"><span>Package Summary</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="concord_core/nl/andrewl/concord_core/msg/package-summary.html">nl.andrewl.concord_core.msg</a></div>
<div class="col-last even-row-color">
<div class="block">Message components which are used by the server and the default client
implementation.</div>
</div>
<div class="col-first odd-row-color"><a href="concord_core/nl/andrewl/concord_core/msg/types/package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<div class="col-last odd-row-color">
<div class="block">Contains all the various message types which can be sent between the server
and client.</div>
</div>
<div class="col-first even-row-color"><a href="concord_core/nl/andrewl/concord_core/msg/types/channel/package-summary.html">nl.andrewl.concord_core.msg.types.channel</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to channel interaction and updates.</div>
</div>
<div class="col-first odd-row-color"><a href="concord_core/nl/andrewl/concord_core/msg/types/chat/package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></div>
<div class="col-last odd-row-color">
<div class="block">Messages pertaining to chat messages and other auxiliary messages regarding
the management of chat information.</div>
</div>
<div class="col-first even-row-color"><a href="concord_core/nl/andrewl/concord_core/msg/types/client_setup/package-summary.html">nl.andrewl.concord_core.msg.types.client_setup</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to the establishment of a connection with clients.</div>
</div>
<div class="col-first odd-row-color"><a href="concord_core/nl/andrewl/concord_core/util/package-summary.html">nl.andrewl.concord_core.util</a></div>
<div class="col-last odd-row-color">
<div class="block">Contains some useful one-off utility classes that any consumer of Concord
messages could benefit from.</div>
</div>
</div>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,215 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Encryption (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg, class: Encryption">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/Encryption.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg</a></div>
<h1 title="Class Encryption" class="title">Class Encryption</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance">nl.andrewl.concord_core.msg.Encryption</div>
</div>
<section class="class-description" id="class-description">
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">Encryption</span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
<div class="block">Utility class for handling the establishment of encrypted communication.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">Encryption</a>()</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>private static byte[]</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#computeSecretKey(byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link">computeSecretKey</a><wbr>(byte[]&nbsp;sharedSecret,
byte[]&nbsp;pk1,
byte[]&nbsp;pk2)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="../util/Pair.html" title="class in nl.andrewl.concord_core.util">Pair</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/crypto/CipherInputStream.html" title="class or interface in javax.crypto" class="external-link">CipherInputStream</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/crypto/CipherOutputStream.html" title="class or interface in javax.crypto" class="external-link">CipherOutputStream</a>&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#upgrade(java.io.InputStream,java.io.OutputStream,nl.andrewl.concord_core.msg.Serializer)" class="member-name-link">upgrade</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;in,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/OutputStream.html" title="class or interface in java.io" class="external-link">OutputStream</a>&nbsp;out,
<a href="Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a>&nbsp;serializer)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Upgrades the given input and output streams to a pair of cipher input and
output streams.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;()">
<h3>Encryption</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">Encryption</span>()</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="upgrade(java.io.InputStream,java.io.OutputStream,nl.andrewl.concord_core.msg.Serializer)">
<h3>upgrade</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="../util/Pair.html" title="class in nl.andrewl.concord_core.util">Pair</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/crypto/CipherInputStream.html" title="class or interface in javax.crypto" class="external-link">CipherInputStream</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/crypto/CipherOutputStream.html" title="class or interface in javax.crypto" class="external-link">CipherOutputStream</a>&gt;</span>&nbsp;<span class="element-name">upgrade</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;in,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/OutputStream.html" title="class or interface in java.io" class="external-link">OutputStream</a>&nbsp;out,
<a href="Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a>&nbsp;serializer)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/security/GeneralSecurityException.html" title="class or interface in java.security" class="external-link">GeneralSecurityException</a>,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Upgrades the given input and output streams to a pair of cipher input and
output streams. This upgrade follows the following steps:
<ol>
<li>Generate an elliptic curve key pair, and send the public key to the output stream.</li>
<li>Read the public key that the other person has sent, from the input stream.</li>
<li>Compute a shared private key using the ECDH key exchange, with our private key and their public key.</li>
<li>Create the cipher streams from the shared private key.</li>
</ol></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>in</code> - The unencrypted input stream.</dd>
<dd><code>out</code> - The unencrypted output stream.</dd>
<dd><code>serializer</code> - The message serializer that is used to read and write
messages according to the standard Concord protocol.</dd>
<dt>Returns:</dt>
<dd>The pair of cipher streams, which can be used to send encrypted
messages.</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/security/GeneralSecurityException.html" title="class or interface in java.security" class="external-link">GeneralSecurityException</a></code> - If an error occurs while generating keys
or preparing the cipher streams.</dd>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - If an error occurs while reading or writing data on
the streams.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="computeSecretKey(byte[],byte[],byte[])">
<h3>computeSecretKey</h3>
<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="return-type">byte[]</span>&nbsp;<span class="element-name">computeSecretKey</span><wbr><span class="parameters">(byte[]&nbsp;sharedSecret,
byte[]&nbsp;pk1,
byte[]&nbsp;pk2)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/security/NoSuchAlgorithmException.html" title="class or interface in java.security" class="external-link">NoSuchAlgorithmException</a></span></div>
<dl class="notes">
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/security/NoSuchAlgorithmException.html" title="class or interface in java.security" class="external-link">NoSuchAlgorithmException</a></code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,167 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Message (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg, interface: Message">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/Message.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg</a></div>
<h1 title="Interface Message" class="title">Interface Message</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="types/chat/Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></code>, <code><a href="types/chat/ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryRequest</a></code>, <code><a href="types/chat/ChatHistoryResponse.html" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryResponse</a></code>, <code><a href="types/client_setup/ClientLogin.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientLogin</a></code>, <code><a href="types/client_setup/ClientRegistration.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientRegistration</a></code>, <code><a href="types/client_setup/ClientSessionResume.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientSessionResume</a></code>, <code><a href="types/channel/CreateThread.html" title="class in nl.andrewl.concord_core.msg.types.channel">CreateThread</a></code>, <code><a href="types/Error.html" title="class in nl.andrewl.concord_core.msg.types">Error</a></code>, <code><a href="types/client_setup/KeyData.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">KeyData</a></code>, <code><a href="types/channel/MoveToChannel.html" title="class in nl.andrewl.concord_core.msg.types.channel">MoveToChannel</a></code>, <code><a href="types/client_setup/RegistrationStatus.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">RegistrationStatus</a></code>, <code><a href="types/ServerMetaData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData</a></code>, <code><a href="types/ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a></code>, <code><a href="types/ServerUsers.html" title="class in nl.andrewl.concord_core.msg.types">ServerUsers</a></code>, <code><a href="types/client_setup/ServerWelcome.html" title="class in nl.andrewl.concord_core.msg.types.client_setup">ServerWelcome</a></code>, <code><a href="types/UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public interface </span><span class="element-name type-name-label">Message</span></div>
<div class="block">Represents any message which can be sent over the network.
<p>
All messages consist of a single byte type identifier, followed by a
payload whose structure depends on the message.
</p></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab5" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab5', 3)" class="table-tab">Default Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#byteSize()" class="member-name-link">byteSize</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Convenience method to determine the size of this message in bytes.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#getTypeSerializer()" class="member-name-link">getTypeSerializer</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Convenience method to get the serializer for this message's type, using
the static auto-generated set of serializers.</div>
</div>
</div>
</div>
</div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="getTypeSerializer()">
<h3>getTypeSerializer</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>
<span class="return-type"><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</span>&nbsp;<span class="element-name">getTypeSerializer</span>()</div>
<div class="block">Convenience method to get the serializer for this message's type, using
the static auto-generated set of serializers.</div>
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>T</code> - The message type.</dd>
<dt>Returns:</dt>
<dd>The serializer to use to read and write messages of this type.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="byteSize()">
<h3>byteSize</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">byteSize</span>()</div>
<div class="block">Convenience method to determine the size of this message in bytes.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>The size of this message, in bytes.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,150 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>MessageReader (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg, interface: MessageReader">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/MessageReader.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg</a></div>
<h1 title="Interface MessageReader" class="title">Interface MessageReader&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Functional Interface:</dt>
<dd>This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.</dd>
</dl>
<hr>
<div class="type-signature"><span class="annotations"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/FunctionalInterface.html" title="class or interface in java.lang" class="external-link">@FunctionalInterface</a>
</span><span class="modifiers">public interface </span><span class="element-name type-name-label">MessageReader&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="MessageReader.html" title="type parameter in MessageReader">T</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#read(nl.andrewl.concord_core.util.ExtendedDataInputStream)" class="member-name-link">read</a><wbr>(<a href="../util/ExtendedDataInputStream.html" title="class in nl.andrewl.concord_core.util">ExtendedDataInputStream</a>&nbsp;in)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Reads all of this message's properties from the given input stream.</div>
</div>
</div>
</div>
</div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="read(nl.andrewl.concord_core.util.ExtendedDataInputStream)">
<h3>read</h3>
<div class="member-signature"><span class="return-type"><a href="MessageReader.html" title="type parameter in MessageReader">T</a></span>&nbsp;<span class="element-name">read</span><wbr><span class="parameters">(<a href="../util/ExtendedDataInputStream.html" title="class in nl.andrewl.concord_core.util">ExtendedDataInputStream</a>&nbsp;in)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Reads all of this message's properties from the given input stream.
<p>
The single byte type identifier has already been read.
</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>in</code> - The input stream to read from.</dd>
<dt>Returns:</dt>
<dd>The message that was read.</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - If an error occurs while reading.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,499 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>MessageTypeSerializer (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg, record: MessageTypeSerializer">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/MessageTypeSerializer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg</a></div>
<h1 title="Record Class MessageTypeSerializer" class="title">Record Class MessageTypeSerializer&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.MessageTypeSerializer&lt;T&gt;</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>T</code> - The type of message.</dd>
<dt>Record Components:</dt>
<dd><code><span id="param-messageClass">messageClass</span></code> - The class of the message.</dd>
<dd><code><span id="param-byteSizeFunction">byteSizeFunction</span></code> - A function that computes the byte size of the message.</dd>
<dd><code><span id="param-reader">reader</span></code> - A reader that can read messages from an input stream.</dd>
<dd><code><span id="param-writer">writer</span></code> - A writer that write messages from an input stream.</dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">MessageTypeSerializer&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;&nbsp;messageClass, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;&nbsp;byteSizeFunction, <a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;&nbsp;reader, <a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;&nbsp;writer)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></span></div>
<div class="block">Record containing the components needed to read and write a given message.
<p>
Also contains methods for automatically generating message type
implementations for standard record-based messages.
</p></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</code></div>
<div class="col-second even-row-color"><code><a href="#byteSizeFunction" class="member-name-link">byteSizeFunction</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="#param-byteSizeFunction"><code>byteSizeFunction</code></a> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;?&gt;,<wbr><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;&gt;</code></div>
<div class="col-second odd-row-color"><code><a href="#generatedMessageTypes" class="member-name-link">generatedMessageTypes</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second even-row-color"><code><a href="#messageClass" class="member-name-link">messageClass</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="#param-messageClass"><code>messageClass</code></a> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second odd-row-color"><code><a href="#reader" class="member-name-link">reader</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <a href="#param-reader"><code>reader</code></a> record component.</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second even-row-color"><code><a href="#writer" class="member-name-link">writer</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="#param-writer"><code>writer</code></a> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.Class,java.util.function.Function,nl.andrewl.concord_core.msg.MessageReader,nl.andrewl.concord_core.msg.MessageWriter)" class="member-name-link">MessageTypeSerializer</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;messageClass,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;&nbsp;byteSizeFunction,
<a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;reader,
<a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;writer)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>MessageTypeSerializer</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#byteSizeFunction()" class="member-name-link">byteSizeFunction</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-byteSizeFunction"><code>byteSizeFunction</code></a> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>private static &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;T,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#generateByteSizeFunction(java.lang.reflect.RecordComponent%5B%5D)" class="member-name-link">generateByteSizeFunction</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/RecordComponent.html" title="class or interface in java.lang.reflect" class="external-link">RecordComponent</a>[]&nbsp;components)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Generates a function implementation that counts the byte size of a
message based on the message's record component types.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#generateForRecord(java.lang.Class)" class="member-name-link">generateForRecord</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageTypeClass)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Generates a message type instance for a given class, using reflection to
introspect the fields of the message.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>private static &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#generateReader(java.lang.reflect.Constructor)" class="member-name-link">generateReader</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/Constructor.html" title="class or interface in java.lang.reflect" class="external-link">Constructor</a>&lt;T&gt;&nbsp;constructor)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Generates a message reader for the given message constructor method.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>private static &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;T&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#generateWriter(java.lang.reflect.RecordComponent%5B%5D)" class="member-name-link">generateWriter</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/RecordComponent.html" title="class or interface in java.lang.reflect" class="external-link">RecordComponent</a>[]&nbsp;components)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Generates a message writer for the given message record components.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#get(java.lang.Class)" class="member-name-link">get</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageClass)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Gets the <a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg"><code>MessageTypeSerializer</code></a> instance for a given message class, and
generates a new implementation if none exists yet.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#messageClass()" class="member-name-link">messageClass</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-messageClass"><code>messageClass</code></a> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#reader()" class="member-name-link">reader</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-reader"><code>reader</code></a> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writer()" class="member-name-link">writer</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-writer"><code>writer</code></a> record component.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="messageClass">
<h3>messageClass</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="element-name">messageClass</span></div>
<div class="block">The field for the <a href="#param-messageClass"><code>messageClass</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="byteSizeFunction">
<h3>byteSizeFunction</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</span>&nbsp;<span class="element-name">byteSizeFunction</span></div>
<div class="block">The field for the <a href="#param-byteSizeFunction"><code>byteSizeFunction</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="reader">
<h3>reader</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="element-name">reader</span></div>
<div class="block">The field for the <a href="#param-reader"><code>reader</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="writer">
<h3>writer</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a> extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="element-name">writer</span></div>
<div class="block">The field for the <a href="#param-writer"><code>writer</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="generatedMessageTypes">
<h3>generatedMessageTypes</h3>
<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;?&gt;,<wbr><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;&gt;</span>&nbsp;<span class="element-name">generatedMessageTypes</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.lang.Class,java.util.function.Function,nl.andrewl.concord_core.msg.MessageReader,nl.andrewl.concord_core.msg.MessageWriter)">
<h3>MessageTypeSerializer</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">MessageTypeSerializer</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;messageClass,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;&nbsp;byteSizeFunction,
<a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;reader,
<a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;writer)</span></div>
<div class="block">Creates an instance of a <code>MessageTypeSerializer</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>messageClass</code> - the value for the <a href="#param-messageClass"><code>messageClass</code></a> record component</dd>
<dd><code>byteSizeFunction</code> - the value for the <a href="#param-byteSizeFunction"><code>byteSizeFunction</code></a> record component</dd>
<dd><code>reader</code> - the value for the <a href="#param-reader"><code>reader</code></a> record component</dd>
<dd><code>writer</code> - the value for the <a href="#param-writer"><code>writer</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="get(java.lang.Class)">
<h3>get</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>
<span class="return-type"><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</span>&nbsp;<span class="element-name">get</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageClass)</span></div>
<div class="block">Gets the <a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg"><code>MessageTypeSerializer</code></a> instance for a given message class, and
generates a new implementation if none exists yet.</div>
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>T</code> - The type of the message.</dd>
<dt>Parameters:</dt>
<dd><code>messageClass</code> - The class of the message to get a type for.</dd>
<dt>Returns:</dt>
<dd>The message type.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="generateForRecord(java.lang.Class)">
<h3>generateForRecord</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>
<span class="return-type"><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</span>&nbsp;<span class="element-name">generateForRecord</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageTypeClass)</span></div>
<div class="block">Generates a message type instance for a given class, using reflection to
introspect the fields of the message.
<p>
Note that this only works for record-based messages.
</p></div>
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>T</code> - The type of the message.</dd>
<dt>Parameters:</dt>
<dd><code>messageTypeClass</code> - The class of the message type.</dd>
<dt>Returns:</dt>
<dd>A message type instance.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="generateByteSizeFunction(java.lang.reflect.RecordComponent[])">
<h3>generateByteSizeFunction</h3>
<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>
<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;T,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</span>&nbsp;<span class="element-name">generateByteSizeFunction</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/RecordComponent.html" title="class or interface in java.lang.reflect" class="external-link">RecordComponent</a>[]&nbsp;components)</span></div>
<div class="block">Generates a function implementation that counts the byte size of a
message based on the message's record component types.</div>
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>T</code> - The message type.</dd>
<dt>Parameters:</dt>
<dd><code>components</code> - The list of components that make up the message.</dd>
<dt>Returns:</dt>
<dd>A function that computes the byte size of a message of the given
type.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="generateReader(java.lang.reflect.Constructor)">
<h3>generateReader</h3>
<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="return-type"><a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;T&gt;</span>&nbsp;<span class="element-name">generateReader</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/Constructor.html" title="class or interface in java.lang.reflect" class="external-link">Constructor</a>&lt;T&gt;&nbsp;constructor)</span></div>
<div class="block">Generates a message reader for the given message constructor method. It
will try to read objects from the input stream according to the
parameters of the canonical constructor of a message record.</div>
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>T</code> - The message type.</dd>
<dt>Parameters:</dt>
<dd><code>constructor</code> - The canonical constructor of the message record.</dd>
<dt>Returns:</dt>
<dd>A message reader for the given type.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="generateWriter(java.lang.reflect.RecordComponent[])">
<h3>generateWriter</h3>
<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="return-type"><a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;T&gt;</span>&nbsp;<span class="element-name">generateWriter</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/RecordComponent.html" title="class or interface in java.lang.reflect" class="external-link">RecordComponent</a>[]&nbsp;components)</span></div>
<div class="block">Generates a message writer for the given message record components.</div>
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>T</code> - The type of message.</dd>
<dt>Parameters:</dt>
<dd><code>components</code> - The record components to write.</dd>
<dt>Returns:</dt>
<dd>The message writer for the given type.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="messageClass()">
<h3>messageClass</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</span>&nbsp;<span class="element-name">messageClass</span>()</div>
<div class="block">Returns the value of the <a href="#param-messageClass"><code>messageClass</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-messageClass"><code>messageClass</code></a> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="byteSizeFunction()">
<h3>byteSizeFunction</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</span>&nbsp;<span class="element-name">byteSizeFunction</span>()</div>
<div class="block">Returns the value of the <a href="#param-byteSizeFunction"><code>byteSizeFunction</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-byteSizeFunction"><code>byteSizeFunction</code></a> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="reader()">
<h3>reader</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</span>&nbsp;<span class="element-name">reader</span>()</div>
<div class="block">Returns the value of the <a href="#param-reader"><code>reader</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-reader"><code>reader</code></a> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="writer()">
<h3>writer</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</span>&nbsp;<span class="element-name">writer</span>()</div>
<div class="block">Returns the value of the <a href="#param-writer"><code>writer</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-writer"><code>writer</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,287 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>MessageUtils (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg, class: MessageUtils">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/MessageUtils.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg</a></div>
<h1 title="Class MessageUtils" class="title">Class MessageUtils</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance">nl.andrewl.concord_core.msg.MessageUtils</div>
</div>
<section class="class-description" id="class-description">
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">MessageUtils</span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
<div class="block">Utility class which provides method for serializing and deserializing complex
data types.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static final int</code></div>
<div class="col-second even-row-color"><code><a href="#ENUM_BYTES" class="member-name-link">ENUM_BYTES</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>static final int</code></div>
<div class="col-second odd-row-color"><code><a href="#UUID_BYTES" class="member-name-link">UUID_BYTES</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">MessageUtils</a>()</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#getByteSize(java.lang.Object)" class="member-name-link">getByteSize</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#getByteSize(java.lang.Object...)" class="member-name-link">getByteSize</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>...&nbsp;objects)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#getByteSize(java.lang.String)" class="member-name-link">getByteSize</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;s)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Gets the number of bytes that the given string will occupy when it is
serialized.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#getByteSize(java.lang.String...)" class="member-name-link">getByteSize</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;strings)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Gets the number of bytes that all the given strings will occupy when
serialized with a length-prefix encoding.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#getByteSize(nl.andrewl.concord_core.msg.Message)" class="member-name-link">getByteSize</a><wbr>(<a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#getByteSize(T%5B%5D)" class="member-name-link">getByteSize</a><wbr>(T[]&nbsp;items)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">&nbsp;</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="UUID_BYTES">
<h3>UUID_BYTES</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">UUID_BYTES</span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../constant-values.html#nl.andrewl.concord_core.msg.MessageUtils.UUID_BYTES">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="ENUM_BYTES">
<h3>ENUM_BYTES</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">ENUM_BYTES</span></div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../constant-values.html#nl.andrewl.concord_core.msg.MessageUtils.ENUM_BYTES">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;()">
<h3>MessageUtils</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">MessageUtils</span>()</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="getByteSize(java.lang.String)">
<h3>getByteSize</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getByteSize</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;s)</span></div>
<div class="block">Gets the number of bytes that the given string will occupy when it is
serialized.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>s</code> - The string. This may be null.</dd>
<dt>Returns:</dt>
<dd>The number of bytes used to serialize the string.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getByteSize(java.lang.String...)">
<h3>getByteSize</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getByteSize</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;strings)</span></div>
<div class="block">Gets the number of bytes that all the given strings will occupy when
serialized with a length-prefix encoding.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>strings</code> - The set of strings.</dd>
<dt>Returns:</dt>
<dd>The total byte size.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getByteSize(nl.andrewl.concord_core.msg.Message)">
<h3>getByteSize</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getByteSize</span><wbr><span class="parameters">(<a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg)</span></div>
</section>
</li>
<li>
<section class="detail" id="getByteSize(T[])">
<h3 id="getByteSize(nl.andrewl.concord_core.msg.Message[])">getByteSize</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getByteSize</span><wbr><span class="parameters">(T[]&nbsp;items)</span></div>
</section>
</li>
<li>
<section class="detail" id="getByteSize(java.lang.Object)">
<h3>getByteSize</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getByteSize</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
</section>
</li>
<li>
<section class="detail" id="getByteSize(java.lang.Object...)">
<h3>getByteSize</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getByteSize</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>...&nbsp;objects)</span></div>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,148 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>MessageWriter (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg, interface: MessageWriter">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/MessageWriter.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg</a></div>
<h1 title="Interface MessageWriter" class="title">Interface MessageWriter&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Functional Interface:</dt>
<dd>This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.</dd>
</dl>
<hr>
<div class="type-signature"><span class="annotations"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/FunctionalInterface.html" title="class or interface in java.lang" class="external-link">@FunctionalInterface</a>
</span><span class="modifiers">public interface </span><span class="element-name type-name-label">MessageWriter&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#write(T,nl.andrewl.concord_core.util.ChainedDataOutputStream)" class="member-name-link">write</a><wbr>(<a href="MessageWriter.html" title="type parameter in MessageWriter">T</a>&nbsp;msg,
<a href="../util/ChainedDataOutputStream.html" title="class in nl.andrewl.concord_core.util">ChainedDataOutputStream</a>&nbsp;out)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Writes this message to the given output stream.</div>
</div>
</div>
</div>
</div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="write(T,nl.andrewl.concord_core.util.ChainedDataOutputStream)">
<h3 id="write(nl.andrewl.concord_core.msg.Message,nl.andrewl.concord_core.util.ChainedDataOutputStream)">write</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">write</span><wbr><span class="parameters">(<a href="MessageWriter.html" title="type parameter in MessageWriter">T</a>&nbsp;msg,
<a href="../util/ChainedDataOutputStream.html" title="class in nl.andrewl.concord_core.util">ChainedDataOutputStream</a>&nbsp;out)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Writes this message to the given output stream.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>msg</code> - The message to write.</dd>
<dd><code>out</code> - The output stream to write to.</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - If an error occurs while writing.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,281 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Serializer (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg, class: Serializer">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/Serializer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg</a></div>
<h1 title="Class Serializer" class="title">Class Serializer</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance">nl.andrewl.concord_core.msg.Serializer</div>
</div>
<section class="class-description" id="class-description">
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">Serializer</span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
<div class="block">This class is responsible for reading and writing messages from streams. It
also defines the set of supported message types, and their associated byte
identifiers, via the <a href="#registerType(int,java.lang.Class)"><code>registerType(int, Class)</code></a> method.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html" title="class or interface in java.lang" class="external-link">Byte</a>&gt;</code></div>
<div class="col-second even-row-color"><code><a href="#inverseMessageTypes" class="member-name-link">inverseMessageTypes</a></code></div>
<div class="col-last even-row-color">
<div class="block">An inverse of <a href="#messageTypes"><code>messageTypes</code></a> which is used to look up a
message's byte value when you know the class of the message.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html" title="class or interface in java.lang" class="external-link">Byte</a>,<wbr><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;&gt;</code></div>
<div class="col-second odd-row-color"><code><a href="#messageTypes" class="member-name-link">messageTypes</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The mapping which defines each supported message type and the byte value
used to identify it when reading and writing messages.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">Serializer</a>()</code></div>
<div class="col-last even-row-color">
<div class="block">Constructs a new serializer instance, with a standard set of supported
message types.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#readMessage(java.io.InputStream)" class="member-name-link">readMessage</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;i)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Reads a message from the given input stream and returns it, or throws an
exception if an error occurred while reading from the stream.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private &lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#registerType(int,java.lang.Class)" class="member-name-link">registerType</a><wbr>(int&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageClass)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Helper method which registers a message type to be supported by the
serializer, by adding it to the normal and inverse mappings.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeMessage(nl.andrewl.concord_core.msg.Message,java.io.OutputStream)" class="member-name-link">writeMessage</a><wbr>(<a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/OutputStream.html" title="class or interface in java.io" class="external-link">OutputStream</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Writes a message to the given output stream.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="messageTypes">
<h3>messageTypes</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html" title="class or interface in java.lang" class="external-link">Byte</a>,<wbr><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;&gt;</span>&nbsp;<span class="element-name">messageTypes</span></div>
<div class="block">The mapping which defines each supported message type and the byte value
used to identify it when reading and writing messages.</div>
</section>
</li>
<li>
<section class="detail" id="inverseMessageTypes">
<h3>inverseMessageTypes</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html" title="class or interface in java.lang" class="external-link">Byte</a>&gt;</span>&nbsp;<span class="element-name">inverseMessageTypes</span></div>
<div class="block">An inverse of <a href="#messageTypes"><code>messageTypes</code></a> which is used to look up a
message's byte value when you know the class of the message.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;()">
<h3>Serializer</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">Serializer</span>()</div>
<div class="block">Constructs a new serializer instance, with a standard set of supported
message types.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="registerType(int,java.lang.Class)">
<h3>registerType</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">registerType</span><wbr><span class="parameters">(int&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageClass)</span></div>
<div class="block">Helper method which registers a message type to be supported by the
serializer, by adding it to the normal and inverse mappings.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>id</code> - The byte which will be used to identify messages of the given
class. The value should from 0 to 127.</dd>
<dd><code>messageClass</code> - The type of message associated with the given id.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="readMessage(java.io.InputStream)">
<h3>readMessage</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span>&nbsp;<span class="element-name">readMessage</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;i)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Reads a message from the given input stream and returns it, or throws an
exception if an error occurred while reading from the stream.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>i</code> - The input stream to read from.</dd>
<dt>Returns:</dt>
<dd>The message which was read.</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - If an error occurs while reading, such as trying to
read an unsupported message type, or if a message object could not be
constructed for the incoming data.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="writeMessage(nl.andrewl.concord_core.msg.Message,java.io.OutputStream)">
<h3>writeMessage</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="type-parameters">&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">writeMessage</span><wbr><span class="parameters">(<a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/OutputStream.html" title="class or interface in java.io" class="external-link">OutputStream</a>&nbsp;o)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Writes a message to the given output stream.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>msg</code> - The message to write.</dd>
<dd><code>o</code> - The output stream to write to.</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - If an error occurs while writing, or if the message
to write is not supported by this serializer.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Class nl.andrewl.concord_core.msg.Encryption (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg, class: Encryption">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../Encryption.html" title="class in nl.andrewl.concord_core.msg">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Class nl.andrewl.concord_core.msg.Encryption" class="title">Uses of Class<br>nl.andrewl.concord_core.msg.Encryption</h1>
</div>
No usage of nl.andrewl.concord_core.msg.Encryption</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,386 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Interface nl.andrewl.concord_core.msg.Message (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg, interface: Message">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Interface nl.andrewl.concord_core.msg.Message" class="title">Uses of Interface<br>nl.andrewl.concord_core.msg.Message</h1>
</div>
<div class="caption"><span>Packages that use <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg">nl.andrewl.concord_core.msg</a></div>
<div class="col-last even-row-color">
<div class="block">Message components which are used by the server and the default client
implementation.</div>
</div>
<div class="col-first odd-row-color"><a href="#nl.andrewl.concord_core.msg.types">nl.andrewl.concord_core.msg.types</a></div>
<div class="col-last odd-row-color">
<div class="block">Contains all the various message types which can be sent between the server
and client.</div>
</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg.types.channel">nl.andrewl.concord_core.msg.types.channel</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to channel interaction and updates.</div>
</div>
<div class="col-first odd-row-color"><a href="#nl.andrewl.concord_core.msg.types.chat">nl.andrewl.concord_core.msg.types.chat</a></div>
<div class="col-last odd-row-color">
<div class="block">Messages pertaining to chat messages and other auxiliary messages regarding
the management of chat information.</div>
</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg.types.client_setup">nl.andrewl.concord_core.msg.types.client_setup</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to the establishment of a connection with clients.</div>
</div>
<div class="col-first odd-row-color"><a href="#nl.andrewl.concord_core.util">nl.andrewl.concord_core.util</a></div>
<div class="col-last odd-row-color">
<div class="block">Contains some useful one-off utility classes that any consumer of Concord
messages could benefit from.</div>
</div>
</div>
<section class="class-uses">
<ul class="block-list">
<li>
<section class="detail" id="nl.andrewl.concord_core.msg">
<h2>Uses of <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a> in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a></h2>
<div class="caption"><span>Classes in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> with type parameters of type <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Interface</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>interface&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../MessageReader.html" class="type-name-link" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../MessageTypeSerializer.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</code></div>
<div class="col-last odd-row-color">
<div class="block">Record containing the components needed to read and write a given message.</div>
</div>
<div class="col-first even-row-color"><code>interface&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../MessageWriter.html" class="type-name-link" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> with type parameters of type <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;T,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generateByteSizeFunction(java.lang.reflect.RecordComponent%5B%5D)" class="member-name-link">generateByteSizeFunction</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/RecordComponent.html" title="class or interface in java.lang.reflect" class="external-link">RecordComponent</a>[]&nbsp;components)</code></div>
<div class="col-last even-row-color">
<div class="block">Generates a function implementation that counts the byte size of a
message based on the message's record component types.</div>
</div>
<div class="col-first odd-row-color"><code>static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generateForRecord(java.lang.Class)" class="member-name-link">generateForRecord</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageTypeClass)</code></div>
<div class="col-last odd-row-color">
<div class="block">Generates a message type instance for a given class, using reflection to
introspect the fields of the message.</div>
</div>
<div class="col-first even-row-color"><code>private static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generateReader(java.lang.reflect.Constructor)" class="member-name-link">generateReader</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/Constructor.html" title="class or interface in java.lang.reflect" class="external-link">Constructor</a>&lt;T&gt;&nbsp;constructor)</code></div>
<div class="col-last even-row-color">
<div class="block">Generates a message reader for the given message constructor method.</div>
</div>
<div class="col-first odd-row-color"><code>private static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;T&gt;</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generateWriter(java.lang.reflect.RecordComponent%5B%5D)" class="member-name-link">generateWriter</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/RecordComponent.html" title="class or interface in java.lang.reflect" class="external-link">RecordComponent</a>[]&nbsp;components)</code></div>
<div class="col-last odd-row-color">
<div class="block">Generates a message writer for the given message record components.</div>
</div>
<div class="col-first even-row-color"><code>static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#get(java.lang.Class)" class="member-name-link">get</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageClass)</code></div>
<div class="col-last even-row-color">
<div class="block">Gets the <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg"><code>MessageTypeSerializer</code></a> instance for a given message class, and
generates a new implementation if none exists yet.</div>
</div>
<div class="col-first odd-row-color"><code>static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>int</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">MessageUtils.</span><code><a href="../MessageUtils.html#getByteSize(T%5B%5D)" class="member-name-link">getByteSize</a><wbr>(T[]&nbsp;items)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>default &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">Message.</span><code><a href="../Message.html#getTypeSerializer()" class="member-name-link">getTypeSerializer</a>()</code></div>
<div class="col-last even-row-color">
<div class="block">Convenience method to get the serializer for this message's type, using
the static auto-generated set of serializers.</div>
</div>
<div class="col-first odd-row-color"><code>private &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>void</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">Serializer.</span><code><a href="../Serializer.html#registerType(int,java.lang.Class)" class="member-name-link">registerType</a><wbr>(int&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageClass)</code></div>
<div class="col-last odd-row-color">
<div class="block">Helper method which registers a message type to be supported by the
serializer, by adding it to the normal and inverse mappings.</div>
</div>
<div class="col-first even-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>void</code></div>
<div class="col-second even-row-color"><span class="type-name-label">Serializer.</span><code><a href="../Serializer.html#writeMessage(nl.andrewl.concord_core.msg.Message,java.io.OutputStream)" class="member-name-link">writeMessage</a><wbr>(<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/OutputStream.html" title="class or interface in java.io" class="external-link">OutputStream</a>&nbsp;o)</code></div>
<div class="col-last even-row-color">
<div class="block">Writes a message to the given output stream.</div>
</div>
</div>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> that return <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code><a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></div>
<div class="col-second even-row-color"><span class="type-name-label">Serializer.</span><code><a href="../Serializer.html#readMessage(java.io.InputStream)" class="member-name-link">readMessage</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;i)</code></div>
<div class="col-last even-row-color">
<div class="block">Reads a message from the given input stream and returns it, or throws an
exception if an error occurred while reading from the stream.</div>
</div>
</div>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> with parameters of type <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static int</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageUtils.</span><code><a href="../MessageUtils.html#getByteSize(nl.andrewl.concord_core.msg.Message)" class="member-name-link">getByteSize</a><wbr>(<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>int</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">MessageUtils.</span><code><a href="../MessageUtils.html#getByteSize(T%5B%5D)" class="member-name-link">getByteSize</a><wbr>(T[]&nbsp;items)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>void</code></div>
<div class="col-second even-row-color"><span class="type-name-label">Serializer.</span><code><a href="../Serializer.html#writeMessage(nl.andrewl.concord_core.msg.Message,java.io.OutputStream)" class="member-name-link">writeMessage</a><wbr>(<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/OutputStream.html" title="class or interface in java.io" class="external-link">OutputStream</a>&nbsp;o)</code></div>
<div class="col-last even-row-color">
<div class="block">Writes a message to the given output stream.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types">
<h2>Uses of <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a> in <a href="../types/package-summary.html">nl.andrewl.concord_core.msg.types</a></h2>
<div class="caption"><span>Classes in <a href="../types/package-summary.html">nl.andrewl.concord_core.msg.types</a> that implement <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/Error.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types">Error</a></code></div>
<div class="col-last even-row-color">
<div class="block">Error message which can be sent between either the server or client to
indicate an unsavory situation.</div>
</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../types/ServerMetaData.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Metadata is sent by the server to clients to inform them of the structure of
the server.</div>
</div>
<div class="col-first even-row-color"><code>static final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/ServerMetaData.ChannelData.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a></code></div>
<div class="col-last even-row-color">
<div class="block">Metadata about a top-level channel in the server which is visible and
joinable for a user.</div>
</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../types/ServerUsers.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types">ServerUsers</a></code></div>
<div class="col-last odd-row-color">
<div class="block">This message is sent from the server to the client whenever a change happens
which requires the server to notify clients about a change of the list of
global users.</div>
</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/UserData.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types">UserData</a></code></div>
<div class="col-last even-row-color">
<div class="block">Standard set of user data that is used mainly as a component of other more
complex messages.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types.channel">
<h2>Uses of <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a> in <a href="../types/channel/package-summary.html">nl.andrewl.concord_core.msg.types.channel</a></h2>
<div class="caption"><span>Classes in <a href="../types/channel/package-summary.html">nl.andrewl.concord_core.msg.types.channel</a> that implement <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/channel/CreateThread.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.channel">CreateThread</a></code></div>
<div class="col-last even-row-color">
<div class="block">This message is sent by clients when they indicate that they would like to
create a new thread in their current channel.</div>
</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../types/channel/MoveToChannel.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.channel">MoveToChannel</a></code></div>
<div class="col-last odd-row-color">
<div class="block">A message that's sent to a client when they've been moved to another channel.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types.chat">
<h2>Uses of <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a> in <a href="../types/chat/package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></h2>
<div class="caption"><span>Classes in <a href="../types/chat/package-summary.html">nl.andrewl.concord_core.msg.types.chat</a> that implement <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/chat/Chat.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></code></div>
<div class="col-last even-row-color">
<div class="block">This message contains information about a chat message that a user sent.</div>
</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../types/chat/ChatHistoryRequest.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryRequest</a></code></div>
<div class="col-last odd-row-color">
<div class="block">A message which clients can send to the server to request some messages from
the server's history of all sent messages from a particular source.</div>
</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/chat/ChatHistoryResponse.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryResponse</a></code></div>
<div class="col-last even-row-color">
<div class="block">The response that a server sends to a <a href="../types/chat/ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat"><code>ChatHistoryRequest</code></a>.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types.client_setup">
<h2>Uses of <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a> in <a href="../types/client_setup/package-summary.html">nl.andrewl.concord_core.msg.types.client_setup</a></h2>
<div class="caption"><span>Classes in <a href="../types/client_setup/package-summary.html">nl.andrewl.concord_core.msg.types.client_setup</a> that implement <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/client_setup/ClientLogin.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientLogin</a></code></div>
<div class="col-last even-row-color">
<div class="block">This message is sent by clients to log into a server that they have already
registered with, but don't have a valid session token for.</div>
</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../types/client_setup/ClientRegistration.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientRegistration</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The data that new users should send to a server in order to register in that
server.</div>
</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/client_setup/ClientSessionResume.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.client_setup">ClientSessionResume</a></code></div>
<div class="col-last even-row-color">
<div class="block">This message is sent by the client to log into a server using a session token
instead of a username/password combination.</div>
</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../types/client_setup/KeyData.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.client_setup">KeyData</a></code></div>
<div class="col-last odd-row-color">
<div class="block">This message is sent as the first message from both the server and the client
to establish an end-to-end encryption via a key exchange.</div>
</div>
<div class="col-first even-row-color"><code>final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../types/client_setup/RegistrationStatus.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.client_setup">RegistrationStatus</a></code></div>
<div class="col-last even-row-color">
<div class="block">A response from the server which indicates the current status of the client's
registration request.</div>
</div>
<div class="col-first odd-row-color"><code>final record&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../types/client_setup/ServerWelcome.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.client_setup">ServerWelcome</a></code></div>
<div class="col-last odd-row-color">
<div class="block">This message is sent from the server to the client after the server accepts
the client's identification and registers the client in the server.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.util">
<h2>Uses of <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a> in <a href="../../util/package-summary.html">nl.andrewl.concord_core.util</a></h2>
<div class="caption"><span>Methods in <a href="../../util/package-summary.html">nl.andrewl.concord_core.util</a> with type parameters of type <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>T[]</code></div>
<div class="col-second even-row-color"><span class="type-name-label">ExtendedDataInputStream.</span><code><a href="../../util/ExtendedDataInputStream.html#readArray(nl.andrewl.concord_core.msg.MessageTypeSerializer)" class="member-name-link">readArray</a><wbr>(<a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;&nbsp;type)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../../util/ChainedDataOutputStream.html" title="class in nl.andrewl.concord_core.util">ChainedDataOutputStream</a></code></div>
<div class="col-second odd-row-color"><span class="type-name-label">ChainedDataOutputStream.</span><code><a href="../../util/ChainedDataOutputStream.html#writeArray(T%5B%5D)" class="member-name-link">writeArray</a><wbr>(T[]&nbsp;array)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../../util/ChainedDataOutputStream.html" title="class in nl.andrewl.concord_core.util">ChainedDataOutputStream</a></code></div>
<div class="col-second even-row-color"><span class="type-name-label">ChainedDataOutputStream.</span><code><a href="../../util/ChainedDataOutputStream.html#writeMessage(nl.andrewl.concord_core.msg.Message)" class="member-name-link">writeMessage</a><wbr>(<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
<div class="caption"><span>Methods in <a href="../../util/package-summary.html">nl.andrewl.concord_core.util</a> that return <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>T[]</code></div>
<div class="col-second even-row-color"><span class="type-name-label">ExtendedDataInputStream.</span><code><a href="../../util/ExtendedDataInputStream.html#readArray(nl.andrewl.concord_core.msg.MessageTypeSerializer)" class="member-name-link">readArray</a><wbr>(<a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;&nbsp;type)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
<div class="caption"><span>Methods in <a href="../../util/package-summary.html">nl.andrewl.concord_core.util</a> with parameters of type <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../../util/ChainedDataOutputStream.html" title="class in nl.andrewl.concord_core.util">ChainedDataOutputStream</a></code></div>
<div class="col-second even-row-color"><span class="type-name-label">ChainedDataOutputStream.</span><code><a href="../../util/ChainedDataOutputStream.html#writeArray(T%5B%5D)" class="member-name-link">writeArray</a><wbr>(T[]&nbsp;array)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../../util/ChainedDataOutputStream.html" title="class in nl.andrewl.concord_core.util">ChainedDataOutputStream</a></code></div>
<div class="col-second odd-row-color"><span class="type-name-label">ChainedDataOutputStream.</span><code><a href="../../util/ChainedDataOutputStream.html#writeMessage(nl.andrewl.concord_core.msg.Message)" class="member-name-link">writeMessage</a><wbr>(<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&nbsp;msg)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
</div>
</section>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,122 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Interface nl.andrewl.concord_core.msg.MessageReader (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg, interface: MessageReader">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Interface nl.andrewl.concord_core.msg.MessageReader" class="title">Uses of Interface<br>nl.andrewl.concord_core.msg.MessageReader</h1>
</div>
<div class="caption"><span>Packages that use <a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg">nl.andrewl.concord_core.msg</a></div>
<div class="col-last even-row-color">
<div class="block">Message components which are used by the server and the default client
implementation.</div>
</div>
</div>
<section class="class-uses">
<ul class="block-list">
<li>
<section class="detail" id="nl.andrewl.concord_core.msg">
<h2>Uses of <a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a> in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a></h2>
<div class="caption"><span>Fields in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> declared as <a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#reader" class="member-name-link">reader</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="../../../../../../concord_core/nl/andrewl/concord_core/msg/MessageTypeSerializer.html#param-reader"><code>reader</code></a> record component.</div>
</div>
</div>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> that return <a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generateReader(java.lang.reflect.Constructor)" class="member-name-link">generateReader</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/Constructor.html" title="class or interface in java.lang.reflect" class="external-link">Constructor</a>&lt;T&gt;&nbsp;constructor)</code></div>
<div class="col-last even-row-color">
<div class="block">Generates a message reader for the given message constructor method.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#reader()" class="member-name-link">reader</a>()</code></div>
<div class="col-last odd-row-color">
<div class="block">Returns the value of the <a href="../../../../../../concord_core/nl/andrewl/concord_core/msg/MessageTypeSerializer.html#param-reader"><code>reader</code></a> record component.</div>
</div>
</div>
<div class="caption"><span>Constructors in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> with parameters of type <a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier</div>
<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../MessageTypeSerializer.html#%3Cinit%3E(java.lang.Class,java.util.function.Function,nl.andrewl.concord_core.msg.MessageReader,nl.andrewl.concord_core.msg.MessageWriter)" class="member-name-link">MessageTypeSerializer</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;messageClass,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;&nbsp;byteSizeFunction,
<a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;reader,
<a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;writer)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>MessageTypeSerializer</code> record class.</div>
</div>
</div>
</section>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,145 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Record Class nl.andrewl.concord_core.msg.MessageTypeSerializer (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg, record: MessageTypeSerializer">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Record Class nl.andrewl.concord_core.msg.MessageTypeSerializer" class="title">Uses of Record Class<br>nl.andrewl.concord_core.msg.MessageTypeSerializer</h1>
</div>
<div class="caption"><span>Packages that use <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg">nl.andrewl.concord_core.msg</a></div>
<div class="col-last even-row-color">
<div class="block">Message components which are used by the server and the default client
implementation.</div>
</div>
<div class="col-first odd-row-color"><a href="#nl.andrewl.concord_core.util">nl.andrewl.concord_core.util</a></div>
<div class="col-last odd-row-color">
<div class="block">Contains some useful one-off utility classes that any consumer of Concord
messages could benefit from.</div>
</div>
</div>
<section class="class-uses">
<ul class="block-list">
<li>
<section class="detail" id="nl.andrewl.concord_core.msg">
<h2>Uses of <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a> in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a></h2>
<div class="caption"><span>Fields in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> with type parameters of type <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;?&gt;,<wbr><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generatedMessageTypes" class="member-name-link">generatedMessageTypes</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html" title="class or interface in java.lang" class="external-link">Byte</a>&gt;</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">Serializer.</span><code><a href="../Serializer.html#inverseMessageTypes" class="member-name-link">inverseMessageTypes</a></code></div>
<div class="col-last odd-row-color">
<div class="block">An inverse of <a href="../Serializer.html#messageTypes"><code>Serializer.messageTypes</code></a> which is used to look up a
message's byte value when you know the class of the message.</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html" title="class or interface in java.lang" class="external-link">Byte</a>,<wbr><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;?&gt;&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">Serializer.</span><code><a href="../Serializer.html#messageTypes" class="member-name-link">messageTypes</a></code></div>
<div class="col-last even-row-color">
<div class="block">The mapping which defines each supported message type and the byte value
used to identify it when reading and writing messages.</div>
</div>
</div>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> that return <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generateForRecord(java.lang.Class)" class="member-name-link">generateForRecord</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageTypeClass)</code></div>
<div class="col-last even-row-color">
<div class="block">Generates a message type instance for a given class, using reflection to
introspect the fields of the message.</div>
</div>
<div class="col-first odd-row-color"><code>static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#get(java.lang.Class)" class="member-name-link">get</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;T&gt;&nbsp;messageClass)</code></div>
<div class="col-last odd-row-color">
<div class="block">Gets the <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg"><code>MessageTypeSerializer</code></a> instance for a given message class, and
generates a new implementation if none exists yet.</div>
</div>
<div class="col-first even-row-color"><code>default &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">Message.</span><code><a href="../Message.html#getTypeSerializer()" class="member-name-link">getTypeSerializer</a>()</code></div>
<div class="col-last even-row-color">
<div class="block">Convenience method to get the serializer for this message's type, using
the static auto-generated set of serializers.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.util">
<h2>Uses of <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a> in <a href="../../util/package-summary.html">nl.andrewl.concord_core.util</a></h2>
<div class="caption"><span>Methods in <a href="../../util/package-summary.html">nl.andrewl.concord_core.util</a> with parameters of type <a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>&lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br>T[]</code></div>
<div class="col-second even-row-color"><span class="type-name-label">ExtendedDataInputStream.</span><code><a href="../../util/ExtendedDataInputStream.html#readArray(nl.andrewl.concord_core.msg.MessageTypeSerializer)" class="member-name-link">readArray</a><wbr>(<a href="../MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;&nbsp;type)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Class nl.andrewl.concord_core.msg.MessageUtils (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg, class: MessageUtils">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../MessageUtils.html" title="class in nl.andrewl.concord_core.msg">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Class nl.andrewl.concord_core.msg.MessageUtils" class="title">Uses of Class<br>nl.andrewl.concord_core.msg.MessageUtils</h1>
</div>
No usage of nl.andrewl.concord_core.msg.MessageUtils</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,122 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Interface nl.andrewl.concord_core.msg.MessageWriter (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg, interface: MessageWriter">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Interface nl.andrewl.concord_core.msg.MessageWriter" class="title">Uses of Interface<br>nl.andrewl.concord_core.msg.MessageWriter</h1>
</div>
<div class="caption"><span>Packages that use <a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg">nl.andrewl.concord_core.msg</a></div>
<div class="col-last even-row-color">
<div class="block">Message components which are used by the server and the default client
implementation.</div>
</div>
</div>
<section class="class-uses">
<ul class="block-list">
<li>
<section class="detail" id="nl.andrewl.concord_core.msg">
<h2>Uses of <a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a> in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a></h2>
<div class="caption"><span>Fields in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> declared as <a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#writer" class="member-name-link">writer</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="../../../../../../concord_core/nl/andrewl/concord_core/msg/MessageTypeSerializer.html#param-writer"><code>writer</code></a> record component.</div>
</div>
</div>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> that return <a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private static &lt;T extends <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;<br><a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;T&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#generateWriter(java.lang.reflect.RecordComponent%5B%5D)" class="member-name-link">generateWriter</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/RecordComponent.html" title="class or interface in java.lang.reflect" class="external-link">RecordComponent</a>[]&nbsp;components)</code></div>
<div class="col-last even-row-color">
<div class="block">Generates a message writer for the given message record components.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">MessageTypeSerializer.</span><code><a href="../MessageTypeSerializer.html#writer()" class="member-name-link">writer</a>()</code></div>
<div class="col-last odd-row-color">
<div class="block">Returns the value of the <a href="../../../../../../concord_core/nl/andrewl/concord_core/msg/MessageTypeSerializer.html#param-writer"><code>writer</code></a> record component.</div>
</div>
</div>
<div class="caption"><span>Constructors in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> with parameters of type <a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier</div>
<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../MessageTypeSerializer.html#%3Cinit%3E(java.lang.Class,java.util.function.Function,nl.andrewl.concord_core.msg.MessageReader,nl.andrewl.concord_core.msg.MessageWriter)" class="member-name-link">MessageTypeSerializer</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;messageClass,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html" title="class or interface in java.lang" class="external-link">Integer</a>&gt;&nbsp;byteSizeFunction,
<a href="../MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;reader,
<a href="../MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;<a href="../MessageTypeSerializer.html" title="type parameter in MessageTypeSerializer">T</a>&gt;&nbsp;writer)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>MessageTypeSerializer</code> record class.</div>
</div>
</div>
</section>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,95 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Class nl.andrewl.concord_core.msg.Serializer (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg, class: Serializer">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../Serializer.html" title="class in nl.andrewl.concord_core.msg">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Class nl.andrewl.concord_core.msg.Serializer" class="title">Uses of Class<br>nl.andrewl.concord_core.msg.Serializer</h1>
</div>
<div class="caption"><span>Packages that use <a href="../Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg">nl.andrewl.concord_core.msg</a></div>
<div class="col-last even-row-color">
<div class="block">Message components which are used by the server and the default client
implementation.</div>
</div>
</div>
<section class="class-uses">
<ul class="block-list">
<li>
<section class="detail" id="nl.andrewl.concord_core.msg">
<h2>Uses of <a href="../Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a> in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a></h2>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg</a> with parameters of type <a href="../Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static <a href="../../util/Pair.html" title="class in nl.andrewl.concord_core.util">Pair</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/crypto/CipherInputStream.html" title="class or interface in javax.crypto" class="external-link">CipherInputStream</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/crypto/CipherOutputStream.html" title="class or interface in javax.crypto" class="external-link">CipherOutputStream</a>&gt;</code></div>
<div class="col-second even-row-color"><span class="type-name-label">Encryption.</span><code><a href="../Encryption.html#upgrade(java.io.InputStream,java.io.OutputStream,nl.andrewl.concord_core.msg.Serializer)" class="member-name-link">upgrade</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;in,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/OutputStream.html" title="class or interface in java.io" class="external-link">OutputStream</a>&nbsp;out,
<a href="../Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a>&nbsp;serializer)</code></div>
<div class="col-last even-row-color">
<div class="block">Upgrades the given input and output streams to a pair of cipher input and
output streams.</div>
</div>
</div>
</section>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,137 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>nl.andrewl.concord_core.msg (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg">
<meta name="generator" content="javadoc/PackageWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="package-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li class="nav-bar-cell1-rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#package">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Package:&nbsp;</li>
<li><a href="#package-description">Description</a>&nbsp;|&nbsp;</li>
<li><a href="#related-package-summary">Related Packages</a>&nbsp;|&nbsp;</li>
<li><a href="#class-summary">Classes and Interfaces</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../../../module-summary.html">concord_core</a></div>
<h1 title="Package nl.andrewl.concord_core.msg" class="title">Package nl.andrewl.concord_core.msg</h1>
</div>
<hr>
<div class="package-signature">package <span class="element-name">nl.andrewl.concord_core.msg</span></div>
<section class="package-description" id="package-description">
<div class="block">Message components which are used by the server and the default client
implementation. Notably, the <a href="Serializer.html" title="class in nl.andrewl.concord_core.msg"><code>Serializer</code></a>
within this package defines the set of supported message types, and provides
the highest-level interface to client-server communication.</div>
</section>
<section class="summary">
<ul class="summary-list">
<li>
<div id="related-package-summary">
<div class="caption"><span>Related Packages</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="types/package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<div class="col-last even-row-color">
<div class="block">Contains all the various message types which can be sent between the server
and client.</div>
</div>
</div>
</div>
</li>
<li>
<div id="class-summary">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="class-summary-tab0" role="tab" aria-selected="true" aria-controls="class-summary.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('class-summary', 'class-summary', 2)" class="active-table-tab">All Classes and Interfaces</button><button id="class-summary-tab1" role="tab" aria-selected="false" aria-controls="class-summary.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('class-summary', 'class-summary-tab1', 2)" class="table-tab">Interfaces</button><button id="class-summary-tab2" role="tab" aria-selected="false" aria-controls="class-summary.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('class-summary', 'class-summary-tab2', 2)" class="table-tab">Classes</button><button id="class-summary-tab4" role="tab" aria-selected="false" aria-controls="class-summary.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('class-summary', 'class-summary-tab4', 2)" class="table-tab">Record Classes</button></div>
<div id="class-summary.tabpanel" role="tabpanel">
<div class="summary-table two-column-summary" aria-labelledby="class-summary-tab0">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color class-summary class-summary-tab2"><a href="Encryption.html" title="class in nl.andrewl.concord_core.msg">Encryption</a></div>
<div class="col-last even-row-color class-summary class-summary-tab2">
<div class="block">Utility class for handling the establishment of encrypted communication.</div>
</div>
<div class="col-first odd-row-color class-summary class-summary-tab1"><a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></div>
<div class="col-last odd-row-color class-summary class-summary-tab1">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
<div class="col-first even-row-color class-summary class-summary-tab1"><a href="MessageReader.html" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</div>
<div class="col-last even-row-color class-summary class-summary-tab1">&nbsp;</div>
<div class="col-first odd-row-color class-summary class-summary-tab4"><a href="MessageTypeSerializer.html" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</div>
<div class="col-last odd-row-color class-summary class-summary-tab4">
<div class="block">Record containing the components needed to read and write a given message.</div>
</div>
<div class="col-first even-row-color class-summary class-summary-tab2"><a href="MessageUtils.html" title="class in nl.andrewl.concord_core.msg">MessageUtils</a></div>
<div class="col-last even-row-color class-summary class-summary-tab2">
<div class="block">Utility class which provides method for serializing and deserializing complex
data types.</div>
</div>
<div class="col-first odd-row-color class-summary class-summary-tab1"><a href="MessageWriter.html" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;T extends <a href="Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>&gt;</div>
<div class="col-last odd-row-color class-summary class-summary-tab1">&nbsp;</div>
<div class="col-first even-row-color class-summary class-summary-tab2"><a href="Serializer.html" title="class in nl.andrewl.concord_core.msg">Serializer</a></div>
<div class="col-last even-row-color class-summary class-summary-tab2">
<div class="block">This class is responsible for reading and writing messages from streams.</div>
</div>
</div>
</div>
</div>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,91 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>nl.andrewl.concord_core.msg Class Hierarchy (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="tree: module: concord_core, package: nl.andrewl.concord_core.msg">
<meta name="generator" content="javadoc/PackageTreeWriter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="package-tree-page">
<script type="text/javascript">var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li>Use</li>
<li class="nav-bar-cell1-rev">Tree</li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#tree">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 class="title">Hierarchy For Package nl.andrewl.concord_core.msg</h1>
<span class="package-hierarchy-label">Package Hierarchies:</span>
<ul class="horizontal">
<li><a href="../../../../../overview-tree.html">All Packages</a></li>
</ul>
</div>
<section class="hierarchy">
<h2 title="Class Hierarchy">Class Hierarchy</h2>
<ul>
<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" class="type-name-link external-link" title="class or interface in java.lang">Object</a>
<ul>
<li class="circle">nl.andrewl.concord_core.msg.<a href="Encryption.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg">Encryption</a></li>
<li class="circle">nl.andrewl.concord_core.msg.<a href="MessageUtils.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg">MessageUtils</a></li>
<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" class="type-name-link external-link" title="class or interface in java.lang">Record</a>
<ul>
<li class="circle">nl.andrewl.concord_core.msg.<a href="MessageTypeSerializer.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg">MessageTypeSerializer</a>&lt;T&gt;</li>
</ul>
</li>
<li class="circle">nl.andrewl.concord_core.msg.<a href="Serializer.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg">Serializer</a></li>
</ul>
</li>
</ul>
</section>
<section class="hierarchy">
<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
<ul>
<li class="circle">nl.andrewl.concord_core.msg.<a href="Message.html" class="type-name-link" title="interface in nl.andrewl.concord_core.msg">Message</a></li>
<li class="circle">nl.andrewl.concord_core.msg.<a href="MessageReader.html" class="type-name-link" title="interface in nl.andrewl.concord_core.msg">MessageReader</a>&lt;T&gt;</li>
<li class="circle">nl.andrewl.concord_core.msg.<a href="MessageWriter.html" class="type-name-link" title="interface in nl.andrewl.concord_core.msg">MessageWriter</a>&lt;T&gt;</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,193 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Package nl.andrewl.concord_core.msg (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg">
<meta name="generator" content="javadoc/PackageUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="package-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Package nl.andrewl.concord_core.msg" class="title">Uses of Package<br>nl.andrewl.concord_core.msg</h1>
</div>
<div class="caption"><span>Packages that use <a href="package-summary.html">nl.andrewl.concord_core.msg</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg">nl.andrewl.concord_core.msg</a></div>
<div class="col-last even-row-color">
<div class="block">Message components which are used by the server and the default client
implementation.</div>
</div>
<div class="col-first odd-row-color"><a href="#nl.andrewl.concord_core.msg.types">nl.andrewl.concord_core.msg.types</a></div>
<div class="col-last odd-row-color">
<div class="block">Contains all the various message types which can be sent between the server
and client.</div>
</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg.types.channel">nl.andrewl.concord_core.msg.types.channel</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to channel interaction and updates.</div>
</div>
<div class="col-first odd-row-color"><a href="#nl.andrewl.concord_core.msg.types.chat">nl.andrewl.concord_core.msg.types.chat</a></div>
<div class="col-last odd-row-color">
<div class="block">Messages pertaining to chat messages and other auxiliary messages regarding
the management of chat information.</div>
</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg.types.client_setup">nl.andrewl.concord_core.msg.types.client_setup</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to the establishment of a connection with clients.</div>
</div>
<div class="col-first odd-row-color"><a href="#nl.andrewl.concord_core.util">nl.andrewl.concord_core.util</a></div>
<div class="col-last odd-row-color">
<div class="block">Contains some useful one-off utility classes that any consumer of Concord
messages could benefit from.</div>
</div>
</div>
<section class="package-uses">
<ul class="block-list">
<li>
<section class="detail" id="nl.andrewl.concord_core.msg">
<div class="caption"><span>Classes in <a href="package-summary.html">nl.andrewl.concord_core.msg</a> used by <a href="package-summary.html">nl.andrewl.concord_core.msg</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="class-use/Message.html#nl.andrewl.concord_core.msg">Message</a></div>
<div class="col-last even-row-color">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
<div class="col-first odd-row-color"><a href="class-use/MessageReader.html#nl.andrewl.concord_core.msg">MessageReader</a></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><a href="class-use/MessageTypeSerializer.html#nl.andrewl.concord_core.msg">MessageTypeSerializer</a></div>
<div class="col-last even-row-color">
<div class="block">Record containing the components needed to read and write a given message.</div>
</div>
<div class="col-first odd-row-color"><a href="class-use/MessageWriter.html#nl.andrewl.concord_core.msg">MessageWriter</a></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><a href="class-use/Serializer.html#nl.andrewl.concord_core.msg">Serializer</a></div>
<div class="col-last even-row-color">
<div class="block">This class is responsible for reading and writing messages from streams.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types">
<div class="caption"><span>Classes in <a href="package-summary.html">nl.andrewl.concord_core.msg</a> used by <a href="types/package-summary.html">nl.andrewl.concord_core.msg.types</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="class-use/Message.html#nl.andrewl.concord_core.msg.types">Message</a></div>
<div class="col-last even-row-color">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types.channel">
<div class="caption"><span>Classes in <a href="package-summary.html">nl.andrewl.concord_core.msg</a> used by <a href="types/channel/package-summary.html">nl.andrewl.concord_core.msg.types.channel</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="class-use/Message.html#nl.andrewl.concord_core.msg.types.channel">Message</a></div>
<div class="col-last even-row-color">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types.chat">
<div class="caption"><span>Classes in <a href="package-summary.html">nl.andrewl.concord_core.msg</a> used by <a href="types/chat/package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="class-use/Message.html#nl.andrewl.concord_core.msg.types.chat">Message</a></div>
<div class="col-last even-row-color">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types.client_setup">
<div class="caption"><span>Classes in <a href="package-summary.html">nl.andrewl.concord_core.msg</a> used by <a href="types/client_setup/package-summary.html">nl.andrewl.concord_core.msg.types.client_setup</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="class-use/Message.html#nl.andrewl.concord_core.msg.types.client_setup">Message</a></div>
<div class="col-last even-row-color">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
</div>
</section>
</li>
<li>
<section class="detail" id="nl.andrewl.concord_core.util">
<div class="caption"><span>Classes in <a href="package-summary.html">nl.andrewl.concord_core.msg</a> used by <a href="../util/package-summary.html">nl.andrewl.concord_core.util</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="class-use/Message.html#nl.andrewl.concord_core.util">Message</a></div>
<div class="col-last even-row-color">
<div class="block">Represents any message which can be sent over the network.</div>
</div>
<div class="col-first odd-row-color"><a href="class-use/MessageTypeSerializer.html#nl.andrewl.concord_core.util">MessageTypeSerializer</a></div>
<div class="col-last odd-row-color">
<div class="block">Record containing the components needed to read and write a given message.</div>
</div>
</div>
</section>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,260 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Error.Level (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types, record: Error, enum: Level">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/Error.Level.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#enum-constant-summary">Enum Constants</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#enum-constant-detail">Enum Constants</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<h1 title="Enum Class Error.Level" class="title">Enum Class Error.Level</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">java.lang.Enum</a>&lt;<a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>&gt;
<div class="inheritance">nl.andrewl.concord_core.msg.types.Error.Level</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/Serializable.html" title="class or interface in java.io" class="external-link">Serializable</a></code>, <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html" title="class or interface in java.lang" class="external-link">Comparable</a>&lt;<a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>&gt;</code>, <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/constant/Constable.html" title="class or interface in java.lang.constant" class="external-link">Constable</a></code></dd>
</dl>
<dl class="notes">
<dt>Enclosing class:</dt>
<dd><a href="Error.html" title="class in nl.andrewl.concord_core.msg.types">Error</a></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public static enum </span><span class="element-name type-name-label">Error.Level</span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a>&lt;<a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>&gt;</span></div>
<div class="block">The error level gives an indication as to the severity of the error.
Warnings indicate that a user has attempted to do something which they
shouldn't, or some scenario which is not ideal but recoverable from.
Errors indicate actual issues with the software which should be addressed.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="inherited-list">
<h2 id="nested-classes-inherited-from-class-java.lang.Enum">Nested classes/interfaces inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a></h2>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.EnumDesc.html" title="class or interface in java.lang" class="external-link">Enum.EnumDesc</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.EnumDesc.html" title="class or interface in java.lang" class="external-link">E</a> extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.EnumDesc.html" title="class or interface in java.lang" class="external-link">E</a>&gt;&gt;</code></div>
</section>
</li>
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
<li>
<section class="constants-summary" id="enum-constant-summary">
<h2>Enum Constant Summary</h2>
<div class="caption"><span>Enum Constants</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Enum Constant</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code><a href="#ERROR" class="member-name-link">ERROR</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code><a href="#WARNING" class="member-name-link">WARNING</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier</div>
<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private </code></div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">Level</a>()</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#valueOf(java.lang.String)" class="member-name-link">valueOf</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Returns the enum constant of this class with the specified name.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>[]</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#values()" class="member-name-link">values</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Returns an array containing the constants of this enum class, in
the order they are declared.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Enum">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html" title="class or interface in java.lang" class="external-link">Enum</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#compareTo(E)" title="class or interface in java.lang" class="external-link">compareTo</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#describeConstable()" title="class or interface in java.lang" class="external-link">describeConstable</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#getDeclaringClass()" title="class or interface in java.lang" class="external-link">getDeclaringClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#name()" title="class or interface in java.lang" class="external-link">name</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#ordinal()" title="class or interface in java.lang" class="external-link">ordinal</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#valueOf(java.lang.Class,java.lang.String)" title="class or interface in java.lang" class="external-link">valueOf</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ ENUM CONSTANT DETAIL =========== -->
<li>
<section class="constant-details" id="enum-constant-detail">
<h2>Enum Constant Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="WARNING">
<h3>WARNING</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type"><a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></span>&nbsp;<span class="element-name">WARNING</span></div>
</section>
</li>
<li>
<section class="detail" id="ERROR">
<h3>ERROR</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type"><a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></span>&nbsp;<span class="element-name">ERROR</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;()">
<h3>Level</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="element-name">Level</span>()</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="values()">
<h3>values</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>[]</span>&nbsp;<span class="element-name">values</span>()</div>
<div class="block">Returns an array containing the constants of this enum class, in
the order they are declared.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>an array containing the constants of this enum class, in the order they are declared</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="valueOf(java.lang.String)">
<h3>valueOf</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></span>&nbsp;<span class="element-name">valueOf</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</span></div>
<div class="block">Returns the enum constant of this class with the specified name.
The string must match <i>exactly</i> an identifier used to declare an
enum constant in this class. (Extraneous whitespace characters are
not permitted.)</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>name</code> - the name of the enum constant to be returned.</dd>
<dt>Returns:</dt>
<dd>the enum constant with the specified name</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if this enum class has no constant with the specified name</dd>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html" title="class or interface in java.lang" class="external-link">NullPointerException</a></code> - if the argument is null</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,367 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Error (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types, record: Error">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/Error.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<h1 title="Record Class Error" class="title">Record Class Error</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.Error</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Record Components:</dt>
<dd><code><span id="param-level">level</span></code> - The severity level of the error.</dd>
<dd><code><span id="param-message">message</span></code> - A message indicating what went wrong.</dd>
</dl>
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">Error</span>(<a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>&nbsp;level, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">Error message which can be sent between either the server or client to
indicate an unsavory situation.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="caption"><span>Nested Classes</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static enum&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="Error.Level.html" class="type-name-link" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></code></div>
<div class="col-last even-row-color">
<div class="block">The error level gives an indication as to the severity of the error.</div>
</div>
</div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></code></div>
<div class="col-second even-row-color"><code><a href="#level" class="member-name-link">level</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="#param-level"><code>level</code></a> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#message" class="member-name-link">message</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <a href="#param-message"><code>message</code></a> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(nl.andrewl.concord_core.msg.types.Error.Level,java.lang.String)" class="member-name-link">Error</a><wbr>(<a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>&nbsp;level,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>Error</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="Error.html" title="class in nl.andrewl.concord_core.msg.types">Error</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#error(java.lang.String)" class="member-name-link">error</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Creates an error message.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#level()" class="member-name-link">level</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-level"><code>level</code></a> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#message()" class="member-name-link">message</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-message"><code>message</code></a> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="Error.html" title="class in nl.andrewl.concord_core.msg.types">Error</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#warning(java.lang.String)" class="member-name-link">warning</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Creates a warning message.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../Message.html#byteSize()">byteSize</a>, <a href="../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="level">
<h3>level</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></span>&nbsp;<span class="element-name">level</span></div>
<div class="block">The field for the <a href="#param-level"><code>level</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="message">
<h3>message</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">message</span></div>
<div class="block">The field for the <a href="#param-message"><code>message</code></a> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(nl.andrewl.concord_core.msg.types.Error.Level,java.lang.String)">
<h3>Error</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">Error</span><wbr><span class="parameters">(<a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a>&nbsp;level,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</span></div>
<div class="block">Creates an instance of a <code>Error</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>level</code> - the value for the <a href="#param-level"><code>level</code></a> record component</dd>
<dd><code>message</code> - the value for the <a href="#param-message"><code>message</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="warning(java.lang.String)">
<h3>warning</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="Error.html" title="class in nl.andrewl.concord_core.msg.types">Error</a></span>&nbsp;<span class="element-name">warning</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</span></div>
<div class="block">Creates a warning message.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>message</code> - The message text.</dd>
<dt>Returns:</dt>
<dd>A warning-level error message.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="error(java.lang.String)">
<h3>error</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="Error.html" title="class in nl.andrewl.concord_core.msg.types">Error</a></span>&nbsp;<span class="element-name">error</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</span></div>
<div class="block">Creates an error message.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>message</code> - The message text.</dd>
<dt>Returns:</dt>
<dd>An error-level error message.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="level()">
<h3>level</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="Error.Level.html" title="enum class in nl.andrewl.concord_core.msg.types">Error.Level</a></span>&nbsp;<span class="element-name">level</span>()</div>
<div class="block">Returns the value of the <a href="#param-level"><code>level</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-level"><code>level</code></a> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="message()">
<h3>message</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">message</span>()</div>
<div class="block">Returns the value of the <a href="#param-message"><code>message</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-message"><code>message</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,313 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>ServerMetaData.ChannelData (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types, record: ServerMetaData, record: ChannelData">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/ServerMetaData.ChannelData.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<h1 title="Record Class ServerMetaData.ChannelData" class="title">Record Class ServerMetaData.ChannelData</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.ServerMetaData.ChannelData</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<dl class="notes">
<dt>Enclosing class:</dt>
<dd><a href="ServerMetaData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData</a></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public static record </span><span class="element-name type-name-label">ServerMetaData.ChannelData</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">Metadata about a top-level channel in the server which is visible and
joinable for a user.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color"><code><a href="#id" class="member-name-link">id</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>id</code> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#name" class="member-name-link">name</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <code>name</code> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.lang.String)" class="member-name-link">ChannelData</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>ChannelData</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#id()" class="member-name-link">id</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>id</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#name()" class="member-name-link">name</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>name</code> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../Message.html#byteSize()">byteSize</a>, <a href="../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="id">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span></div>
<div class="block">The field for the <code>id</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="name">
<h3>name</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">name</span></div>
<div class="block">The field for the <code>name</code> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.lang.String)">
<h3>ChannelData</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ChannelData</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</span></div>
<div class="block">Creates an instance of a <code>ChannelData</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>id</code> - the value for the <code>id</code> record component</dd>
<dd><code>name</code> - the value for the <code>name</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="id()">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span>()</div>
<div class="block">Returns the value of the <code>id</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>id</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="name()">
<h3>name</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">name</span>()</div>
<div class="block">Returns the value of the <code>name</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>name</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,328 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>ServerMetaData (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types, record: ServerMetaData">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/ServerMetaData.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<h1 title="Record Class ServerMetaData" class="title">Record Class ServerMetaData</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.ServerMetaData</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">ServerMetaData</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name, <a href="ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a>[]&nbsp;channels)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">Metadata is sent by the server to clients to inform them of the structure of
the server. This includes basic information about the server's own properties
as well as information about all top-level channels.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="caption"><span>Nested Classes</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static final record&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="ServerMetaData.ChannelData.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a></code></div>
<div class="col-last even-row-color">
<div class="block">Metadata about a top-level channel in the server which is visible and
joinable for a user.</div>
</div>
</div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a>[]</code></div>
<div class="col-second even-row-color"><code><a href="#channels" class="member-name-link">channels</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>channels</code> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#name" class="member-name-link">name</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <code>name</code> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.String,nl.andrewl.concord_core.msg.types.ServerMetaData.ChannelData%5B%5D)" class="member-name-link">ServerMetaData</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
<a href="ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a>[]&nbsp;channels)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>ServerMetaData</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a>[]</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#channels()" class="member-name-link">channels</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>channels</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#name()" class="member-name-link">name</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>name</code> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../Message.html#byteSize()">byteSize</a>, <a href="../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="name">
<h3>name</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">name</span></div>
<div class="block">The field for the <code>name</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="channels">
<h3>channels</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a>[]</span>&nbsp;<span class="element-name">channels</span></div>
<div class="block">The field for the <code>channels</code> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.lang.String,nl.andrewl.concord_core.msg.types.ServerMetaData.ChannelData[])">
<h3>ServerMetaData</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ServerMetaData</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
<a href="ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a>[]&nbsp;channels)</span></div>
<div class="block">Creates an instance of a <code>ServerMetaData</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>name</code> - the value for the <code>name</code> record component</dd>
<dd><code>channels</code> - the value for the <code>channels</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="name()">
<h3>name</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">name</span>()</div>
<div class="block">Returns the value of the <code>name</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>name</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="channels()">
<h3>channels</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="ServerMetaData.ChannelData.html" title="class in nl.andrewl.concord_core.msg.types">ServerMetaData.ChannelData</a>[]</span>&nbsp;<span class="element-name">channels</span>()</div>
<div class="block">Returns the value of the <code>channels</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>channels</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,279 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>ServerUsers (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types, record: ServerUsers">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/ServerUsers.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<h1 title="Record Class ServerUsers" class="title">Record Class ServerUsers</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.ServerUsers</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">ServerUsers</span>(<a href="UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a>[]&nbsp;users)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">This message is sent from the server to the client whenever a change happens
which requires the server to notify clients about a change of the list of
global users.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a>[]</code></div>
<div class="col-second even-row-color"><code><a href="#users" class="member-name-link">users</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>users</code> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(nl.andrewl.concord_core.msg.types.UserData%5B%5D)" class="member-name-link">ServerUsers</a><wbr>(<a href="UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a>[]&nbsp;users)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>ServerUsers</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a>[]</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#users()" class="member-name-link">users</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>users</code> record component.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../Message.html#byteSize()">byteSize</a>, <a href="../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="users">
<h3>users</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a>[]</span>&nbsp;<span class="element-name">users</span></div>
<div class="block">The field for the <code>users</code> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(nl.andrewl.concord_core.msg.types.UserData[])">
<h3>ServerUsers</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ServerUsers</span><wbr><span class="parameters">(<a href="UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a>[]&nbsp;users)</span></div>
<div class="block">Creates an instance of a <code>ServerUsers</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>users</code> - the value for the <code>users</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="users()">
<h3>users</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="UserData.html" title="class in nl.andrewl.concord_core.msg.types">UserData</a>[]</span>&nbsp;<span class="element-name">users</span>()</div>
<div class="block">Returns the value of the <code>users</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>users</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,309 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>UserData (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types, record: UserData">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/UserData.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<h1 title="Record Class UserData" class="title">Record Class UserData</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.UserData</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">UserData</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">Standard set of user data that is used mainly as a component of other more
complex messages.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color"><code><a href="#id" class="member-name-link">id</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>id</code> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#name" class="member-name-link">name</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <code>name</code> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.lang.String)" class="member-name-link">UserData</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>UserData</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#id()" class="member-name-link">id</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>id</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#name()" class="member-name-link">name</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>name</code> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../Message.html#byteSize()">byteSize</a>, <a href="../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="id">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span></div>
<div class="block">The field for the <code>id</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="name">
<h3>name</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">name</span></div>
<div class="block">The field for the <code>name</code> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.lang.String)">
<h3>UserData</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">UserData</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name)</span></div>
<div class="block">Creates an instance of a <code>UserData</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>id</code> - the value for the <code>id</code> record component</dd>
<dd><code>name</code> - the value for the <code>name</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="id()">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span>()</div>
<div class="block">Returns the value of the <code>id</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>id</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="name()">
<h3>name</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">name</span>()</div>
<div class="block">Returns the value of the <code>name</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>name</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,320 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>CreateThread (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types.channel, record: CreateThread">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/CreateThread.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types.channel</a></div>
<h1 title="Record Class CreateThread" class="title">Record Class CreateThread</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.channel.CreateThread</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Record Components:</dt>
<dd><code><span id="param-messageId">messageId</span></code> - The id of the message that a thread will be/is attached to.</dd>
<dd><code><span id="param-title">title</span></code> - The title of the thread. This may be null.</dd>
</dl>
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">CreateThread</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;messageId, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;title)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">This message is sent by clients when they indicate that they would like to
create a new thread in their current channel.
<p>
Conversely, this message is also sent by the server when a thread has
been created by someone, and all clients need to be notified so that they
can properly display to the user that a message has been turned into a
thread.
</p></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color"><code><a href="#messageId" class="member-name-link">messageId</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="#param-messageId"><code>messageId</code></a> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#title" class="member-name-link">title</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <a href="#param-title"><code>title</code></a> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.lang.String)" class="member-name-link">CreateThread</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;messageId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;title)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>CreateThread</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#messageId()" class="member-name-link">messageId</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-messageId"><code>messageId</code></a> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#title()" class="member-name-link">title</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-title"><code>title</code></a> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../../Message.html#byteSize()">byteSize</a>, <a href="../../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="messageId">
<h3>messageId</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">messageId</span></div>
<div class="block">The field for the <a href="#param-messageId"><code>messageId</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="title">
<h3>title</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">title</span></div>
<div class="block">The field for the <a href="#param-title"><code>title</code></a> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.lang.String)">
<h3>CreateThread</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">CreateThread</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;messageId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;title)</span></div>
<div class="block">Creates an instance of a <code>CreateThread</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>messageId</code> - the value for the <a href="#param-messageId"><code>messageId</code></a> record component</dd>
<dd><code>title</code> - the value for the <a href="#param-title"><code>title</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="messageId()">
<h3>messageId</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">messageId</span>()</div>
<div class="block">Returns the value of the <a href="#param-messageId"><code>messageId</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-messageId"><code>messageId</code></a> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="title()">
<h3>title</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">title</span>()</div>
<div class="block">Returns the value of the <a href="#param-title"><code>title</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-title"><code>title</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,337 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>MoveToChannel (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types.channel, record: MoveToChannel">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/MoveToChannel.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types.channel</a></div>
<h1 title="Record Class MoveToChannel" class="title">Record Class MoveToChannel</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.channel.MoveToChannel</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Record Components:</dt>
<dd><code><span id="param-id">id</span></code> - The id of the channel that the client is requesting or being moved
to, or the id of another client that the user wishes to begin
private messaging with.</dd>
<dd><code><span id="param-channelName">channelName</span></code> - The name of the channel that the client is moved to. This
is null in cases where the client is requesting to move to
a channel, and is only provided by the server when it
moves a client.</dd>
</dl>
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">MoveToChannel</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;channelName)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">A message that's sent to a client when they've been moved to another channel.
This indicates to the client that they should perform the necessary requests
to update their view to indicate that they're now in a different channel.
<p>
Conversely, a client can send this request to the server to indicate that
they would like to switch to the specified channel.
</p>
<p>
Clients can also send this message and provide the id of another client
to request that they enter a private message channel with the referenced
client.
</p></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color"><code><a href="#channelName" class="member-name-link">channelName</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="#param-channelName"><code>channelName</code></a> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second odd-row-color"><code><a href="#id" class="member-name-link">id</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <a href="#param-id"><code>id</code></a> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID)" class="member-name-link">MoveToChannel</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.lang.String)" class="member-name-link">MoveToChannel</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;channelName)</code></div>
<div class="col-last odd-row-color">
<div class="block">Creates an instance of a <code>MoveToChannel</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#channelName()" class="member-name-link">channelName</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-channelName"><code>channelName</code></a> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#id()" class="member-name-link">id</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-id"><code>id</code></a> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../../Message.html#byteSize()">byteSize</a>, <a href="../../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="id">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span></div>
<div class="block">The field for the <a href="#param-id"><code>id</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="channelName">
<h3>channelName</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">channelName</span></div>
<div class="block">The field for the <a href="#param-channelName"><code>channelName</code></a> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID)">
<h3>MoveToChannel</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">MoveToChannel</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.lang.String)">
<h3>MoveToChannel</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">MoveToChannel</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;channelName)</span></div>
<div class="block">Creates an instance of a <code>MoveToChannel</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>id</code> - the value for the <a href="#param-id"><code>id</code></a> record component</dd>
<dd><code>channelName</code> - the value for the <a href="#param-channelName"><code>channelName</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="id()">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span>()</div>
<div class="block">Returns the value of the <a href="#param-id"><code>id</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-id"><code>id</code></a> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="channelName()">
<h3>channelName</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">channelName</span>()</div>
<div class="block">Returns the value of the <a href="#param-channelName"><code>channelName</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-channelName"><code>channelName</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Record Class nl.andrewl.concord_core.msg.types.channel.CreateThread (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg.types.channel, record: CreateThread">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../CreateThread.html" title="class in nl.andrewl.concord_core.msg.types.channel">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Record Class nl.andrewl.concord_core.msg.types.channel.CreateThread" class="title">Uses of Record Class<br>nl.andrewl.concord_core.msg.types.channel.CreateThread</h1>
</div>
No usage of nl.andrewl.concord_core.msg.types.channel.CreateThread</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Record Class nl.andrewl.concord_core.msg.types.channel.MoveToChannel (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg.types.channel, record: MoveToChannel">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../MoveToChannel.html" title="class in nl.andrewl.concord_core.msg.types.channel">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Record Class nl.andrewl.concord_core.msg.types.channel.MoveToChannel" class="title">Uses of Record Class<br>nl.andrewl.concord_core.msg.types.channel.MoveToChannel</h1>
</div>
No usage of nl.andrewl.concord_core.msg.types.channel.MoveToChannel</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,121 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>nl.andrewl.concord_core.msg.types.channel (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types.channel">
<meta name="generator" content="javadoc/PackageWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="package-declaration-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li class="nav-bar-cell1-rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#package">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Package:&nbsp;</li>
<li><a href="#package-description">Description</a>&nbsp;|&nbsp;</li>
<li><a href="#related-package-summary">Related Packages</a>&nbsp;|&nbsp;</li>
<li><a href="#class-summary">Classes and Interfaces</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../../../../../module-summary.html">concord_core</a></div>
<h1 title="Package nl.andrewl.concord_core.msg.types.channel" class="title">Package nl.andrewl.concord_core.msg.types.channel</h1>
</div>
<hr>
<div class="package-signature">package <span class="element-name">nl.andrewl.concord_core.msg.types.channel</span></div>
<section class="package-description" id="package-description">
<div class="block">Messages pertaining to channel interaction and updates.</div>
</section>
<section class="summary">
<ul class="summary-list">
<li>
<div id="related-package-summary">
<div class="caption"><span>Related Packages</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="../package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<div class="col-last even-row-color">
<div class="block">Contains all the various message types which can be sent between the server
and client.</div>
</div>
<div class="col-first odd-row-color"><a href="../chat/package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></div>
<div class="col-last odd-row-color">
<div class="block">Messages pertaining to chat messages and other auxiliary messages regarding
the management of chat information.</div>
</div>
<div class="col-first even-row-color"><a href="../client_setup/package-summary.html">nl.andrewl.concord_core.msg.types.client_setup</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to the establishment of a connection with clients.</div>
</div>
</div>
</div>
</li>
<li>
<div id="class-summary">
<div class="caption"><span>Record Classes</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color class-summary class-summary-tab4"><a href="CreateThread.html" title="class in nl.andrewl.concord_core.msg.types.channel">CreateThread</a></div>
<div class="col-last even-row-color class-summary class-summary-tab4">
<div class="block">This message is sent by clients when they indicate that they would like to
create a new thread in their current channel.</div>
</div>
<div class="col-first odd-row-color class-summary class-summary-tab4"><a href="MoveToChannel.html" title="class in nl.andrewl.concord_core.msg.types.channel">MoveToChannel</a></div>
<div class="col-last odd-row-color class-summary class-summary-tab4">
<div class="block">A message that's sent to a client when they've been moved to another channel.</div>
</div>
</div>
</div>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,81 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>nl.andrewl.concord_core.msg.types.channel Class Hierarchy (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="tree: module: concord_core, package: nl.andrewl.concord_core.msg.types.channel">
<meta name="generator" content="javadoc/PackageTreeWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="package-tree-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li>Use</li>
<li class="nav-bar-cell1-rev">Tree</li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#tree">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 class="title">Hierarchy For Package nl.andrewl.concord_core.msg.types.channel</h1>
<span class="package-hierarchy-label">Package Hierarchies:</span>
<ul class="horizontal">
<li><a href="../../../../../../../overview-tree.html">All Packages</a></li>
</ul>
</div>
<section class="hierarchy">
<h2 title="Class Hierarchy">Class Hierarchy</h2>
<ul>
<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" class="type-name-link external-link" title="class or interface in java.lang">Object</a>
<ul>
<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" class="type-name-link external-link" title="class or interface in java.lang">Record</a>
<ul>
<li class="circle">nl.andrewl.concord_core.msg.types.channel.<a href="CreateThread.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.channel">CreateThread</a> (implements nl.andrewl.concord_core.msg.<a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>)</li>
<li class="circle">nl.andrewl.concord_core.msg.types.channel.<a href="MoveToChannel.html" class="type-name-link" title="class in nl.andrewl.concord_core.msg.types.channel">MoveToChannel</a> (implements nl.andrewl.concord_core.msg.<a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a>)</li>
</ul>
</li>
</ul>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Package nl.andrewl.concord_core.msg.types.channel (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg.types.channel">
<meta name="generator" content="javadoc/PackageUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="package-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Package nl.andrewl.concord_core.msg.types.channel" class="title">Uses of Package<br>nl.andrewl.concord_core.msg.types.channel</h1>
</div>
No usage of nl.andrewl.concord_core.msg.types.channel</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,433 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Chat (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types.chat, record: Chat">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/Chat.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></div>
<h1 title="Record Class Chat" class="title">Record Class Chat</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.chat.Chat</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">Chat</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;senderId, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;senderNickname, long&nbsp;timestamp, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">This message contains information about a chat message that a user sent.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color"><code><a href="#id" class="member-name-link">id</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>id</code> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#message" class="member-name-link">message</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <code>message</code> record component.</div>
</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color"><code><a href="#senderId" class="member-name-link">senderId</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>senderId</code> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#senderNickname" class="member-name-link">senderNickname</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <code>senderNickname</code> record component.</div>
</div>
<div class="col-first even-row-color"><code>private final long</code></div>
<div class="col-second even-row-color"><code><a href="#timestamp" class="member-name-link">timestamp</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>timestamp</code> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.String)" class="member-name-link">Chat</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.lang.String,long,java.lang.String)" class="member-name-link">Chat</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;senderId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;senderNickname,
long&nbsp;timestamp,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.util.UUID,java.lang.String,long,java.lang.String)" class="member-name-link">Chat</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;senderId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;senderNickname,
long&nbsp;timestamp,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>Chat</code> record class.</div>
</div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,nl.andrewl.concord_core.msg.types.chat.Chat)" class="member-name-link">Chat</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;newId,
<a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>&nbsp;original)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#id()" class="member-name-link">id</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>id</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#message()" class="member-name-link">message</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>message</code> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#senderId()" class="member-name-link">senderId</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>senderId</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#senderNickname()" class="member-name-link">senderNickname</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>senderNickname</code> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>long</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#timestamp()" class="member-name-link">timestamp</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>timestamp</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../../Message.html#byteSize()">byteSize</a>, <a href="../../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="id">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span></div>
<div class="block">The field for the <code>id</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="senderId">
<h3>senderId</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">senderId</span></div>
<div class="block">The field for the <code>senderId</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="senderNickname">
<h3>senderNickname</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">senderNickname</span></div>
<div class="block">The field for the <code>senderNickname</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="timestamp">
<h3>timestamp</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name">timestamp</span></div>
<div class="block">The field for the <code>timestamp</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="message">
<h3>message</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">message</span></div>
<div class="block">The field for the <code>message</code> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.lang.String,long,java.lang.String)">
<h3>Chat</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">Chat</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;senderId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;senderNickname,
long&nbsp;timestamp,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(java.lang.String)">
<h3>Chat</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">Chat</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,nl.andrewl.concord_core.msg.types.chat.Chat)">
<h3>Chat</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">Chat</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;newId,
<a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>&nbsp;original)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.util.UUID,java.lang.String,long,java.lang.String)">
<h3>Chat</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">Chat</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;id,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;senderId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;senderNickname,
long&nbsp;timestamp,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;message)</span></div>
<div class="block">Creates an instance of a <code>Chat</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>id</code> - the value for the <code>id</code> record component</dd>
<dd><code>senderId</code> - the value for the <code>senderId</code> record component</dd>
<dd><code>senderNickname</code> - the value for the <code>senderNickname</code> record component</dd>
<dd><code>timestamp</code> - the value for the <code>timestamp</code> record component</dd>
<dd><code>message</code> - the value for the <code>message</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. Reference components are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>; primitive components are compared with '=='.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="id()">
<h3>id</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">id</span>()</div>
<div class="block">Returns the value of the <code>id</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>id</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="senderId()">
<h3>senderId</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">senderId</span>()</div>
<div class="block">Returns the value of the <code>senderId</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>senderId</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="senderNickname()">
<h3>senderNickname</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">senderNickname</span>()</div>
<div class="block">Returns the value of the <code>senderNickname</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>senderNickname</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="timestamp()">
<h3>timestamp</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name">timestamp</span>()</div>
<div class="block">Returns the value of the <code>timestamp</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>timestamp</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="message()">
<h3>message</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">message</span>()</div>
<div class="block">Returns the value of the <code>message</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>message</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,375 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>ChatHistoryRequest (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types.chat, record: ChatHistoryRequest">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/ChatHistoryRequest.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></div>
<h1 title="Record Class ChatHistoryRequest" class="title">Record Class ChatHistoryRequest</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">ChatHistoryRequest</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;query)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">A message which clients can send to the server to request some messages from
the server's history of all sent messages from a particular source. Every
request must provide the id of the source that messages should be fetched
from, in addition to the type of source (channel, thread, dm).
<p>
The query string is a specially-formatted string that allows you to
filter results to only certain messages, using different parameters that
are separated by the <code>;</code> character.
</p>
<p>
All query parameters are of the form <code>param=value</code>, where
<code>param</code> is the case-sensitive name of the parameter, and
<code>value</code> is the value of the parameter.
</p>
<p>
The following query parameters are supported:
</p>
<ul>
<li><code>count</code> - Fetch up to N messages. Minimum of 1, and
a server-specific maximum count, usually no higher than 1000.</li>
<li><code>from</code> - ISO-8601 timestamp indicating the timestamp
after which messages should be fetched. Only messages after this
point in time are returned.</li>
<li><code>to</code> - ISO-8601 timestamp indicating the timestamp
before which messages should be fetched. Only messages before this
point in time are returned.</li>
<li><code>id</code> - A single message id to fetch. If this parameter
is present, all others are ignored, and a list containing the single
message is returned, if it could be found, otherwise an empty list.</li>
</ul>
<p>
Responses to this request are sent via <a href="ChatHistoryResponse.html" title="class in nl.andrewl.concord_core.msg.types.chat"><code>ChatHistoryResponse</code></a>, where
the list of messages is always sorted by the timestamp.
</p></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color"><code><a href="#channelId" class="member-name-link">channelId</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <code>channelId</code> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#query" class="member-name-link">query</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <code>query</code> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID)" class="member-name-link">ChatHistoryRequest</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.lang.String)" class="member-name-link">ChatHistoryRequest</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;query)</code></div>
<div class="col-last odd-row-color">
<div class="block">Creates an instance of a <code>ChatHistoryRequest</code> record class.</div>
</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,java.util.Map)" class="member-name-link">ChatHistoryRequest</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;&nbsp;params)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#channelId()" class="member-name-link">channelId</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>channelId</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getQueryAsMap()" class="member-name-link">getQueryAsMap</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Utility method to extract the query string's values as a key-value map.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#query()" class="member-name-link">query</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <code>query</code> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../../Message.html#byteSize()">byteSize</a>, <a href="../../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="channelId">
<h3>channelId</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">channelId</span></div>
<div class="block">The field for the <code>channelId</code> record component.</div>
</section>
</li>
<li>
<section class="detail" id="query">
<h3>query</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">query</span></div>
<div class="block">The field for the <code>query</code> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID)">
<h3>ChatHistoryRequest</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ChatHistoryRequest</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.util.Map)">
<h3>ChatHistoryRequest</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ChatHistoryRequest</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;&nbsp;params)</span></div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,java.lang.String)">
<h3>ChatHistoryRequest</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ChatHistoryRequest</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;query)</span></div>
<div class="block">Creates an instance of a <code>ChatHistoryRequest</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>channelId</code> - the value for the <code>channelId</code> record component</dd>
<dd><code>query</code> - the value for the <code>query</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="getQueryAsMap()">
<h3>getQueryAsMap</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html" title="class or interface in java.util" class="external-link">Map</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</span>&nbsp;<span class="element-name">getQueryAsMap</span>()</div>
<div class="block">Utility method to extract the query string's values as a key-value map.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>A map of the query parameters.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="channelId()">
<h3>channelId</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">channelId</span>()</div>
<div class="block">Returns the value of the <code>channelId</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>channelId</code> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="query()">
<h3>query</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">query</span>()</div>
<div class="block">Returns the value of the <code>query</code> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <code>query</code> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,314 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>ChatHistoryResponse (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types.chat, record: ChatHistoryResponse">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/ChatHistoryResponse.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../../module-summary.html">concord_core</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></div>
<h1 title="Record Class ChatHistoryResponse" class="title">Record Class ChatHistoryResponse</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">java.lang.Record</a>
<div class="inheritance">nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Record Components:</dt>
<dd><code><span id="param-channelId">channelId</span></code> - The id of the channel that the chat messages belong to.</dd>
<dd><code><span id="param-messages">messages</span></code> - The list of messages that comprises the history.</dd>
</dl>
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public record </span><span class="element-name type-name-label">ChatHistoryResponse</span>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId, <a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]&nbsp;messages)
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a>
implements <a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></span></div>
<div class="block">The response that a server sends to a <a href="ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat"><code>ChatHistoryRequest</code></a>. The list of
messages is ordered by timestamp, with the newest messages appearing first.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color"><code><a href="#channelId" class="member-name-link">channelId</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="#param-channelId"><code>channelId</code></a> record component.</div>
</div>
<div class="col-first odd-row-color"><code>private final <a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]</code></div>
<div class="col-second odd-row-color"><code><a href="#messages" class="member-name-link">messages</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The field for the <a href="#param-messages"><code>messages</code></a> record component.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.util.UUID,nl.andrewl.concord_core.msg.types.chat.Chat%5B%5D)" class="member-name-link">ChatHistoryResponse</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId,
<a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]&nbsp;messages)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates an instance of a <code>ChatHistoryResponse</code> record class.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#channelId()" class="member-name-link">channelId</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-channelId"><code>channelId</code></a> record component.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether some other object is "equal to" this one.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash code value for this object.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#messages()" class="member-name-link">messages</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the value of the <a href="#param-messages"><code>messages</code></a> record component.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a string representation of this record class.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-nl.andrewl.concord_core.msg.Message">Methods inherited from interface&nbsp;nl.andrewl.concord_core.msg.<a href="../../Message.html" title="interface in nl.andrewl.concord_core.msg">Message</a></h3>
<code><a href="../../Message.html#byteSize()">byteSize</a>, <a href="../../Message.html#getTypeSerializer()">getTypeSerializer</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="channelId">
<h3>channelId</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">channelId</span></div>
<div class="block">The field for the <a href="#param-channelId"><code>channelId</code></a> record component.</div>
</section>
</li>
<li>
<section class="detail" id="messages">
<h3>messages</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]</span>&nbsp;<span class="element-name">messages</span></div>
<div class="block">The field for the <a href="#param-messages"><code>messages</code></a> record component.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(java.util.UUID,nl.andrewl.concord_core.msg.types.chat.Chat[])">
<h3>ChatHistoryResponse</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ChatHistoryResponse</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId,
<a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]&nbsp;messages)</span></div>
<div class="block">Creates an instance of a <code>ChatHistoryResponse</code> record class.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>channelId</code> - the value for the <a href="#param-channelId"><code>channelId</code></a> record component</dd>
<dd><code>messages</code> - the value for the <a href="#param-messages"><code>messages</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a string representation of this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash code value for this object. The value is derived from the hash code of each of the record components.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Returns:</dt>
<dd>a hash code value for this object</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;o)</span></div>
<div class="block">Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#equals(java.lang.Object,java.lang.Object)" title="class or interface in java.util" class="external-link"><code>Objects::equals(Object,Object)</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html" title="class or interface in java.lang" class="external-link">Record</a></code></dd>
<dt>Parameters:</dt>
<dd><code>o</code> - the object with which to compare</dd>
<dt>Returns:</dt>
<dd><code>true</code> if this object is the same as the <code>o</code> argument; <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="channelId()">
<h3>channelId</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a></span>&nbsp;<span class="element-name">channelId</span>()</div>
<div class="block">Returns the value of the <a href="#param-channelId"><code>channelId</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-channelId"><code>channelId</code></a> record component</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="messages()">
<h3>messages</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]</span>&nbsp;<span class="element-name">messages</span>()</div>
<div class="block">Returns the value of the <a href="#param-messages"><code>messages</code></a> record component.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the value of the <a href="#param-messages"><code>messages</code></a> record component</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,119 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Record Class nl.andrewl.concord_core.msg.types.chat.Chat (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg.types.chat, record: Chat">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Record Class nl.andrewl.concord_core.msg.types.chat.Chat" class="title">Uses of Record Class<br>nl.andrewl.concord_core.msg.types.chat.Chat</h1>
</div>
<div class="caption"><span>Packages that use <a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#nl.andrewl.concord_core.msg.types.chat">nl.andrewl.concord_core.msg.types.chat</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to chat messages and other auxiliary messages regarding
the management of chat information.</div>
</div>
</div>
<section class="class-uses">
<ul class="block-list">
<li>
<section class="detail" id="nl.andrewl.concord_core.msg.types.chat">
<h2>Uses of <a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a> in <a href="../package-summary.html">nl.andrewl.concord_core.msg.types.chat</a></h2>
<div class="caption"><span>Fields in <a href="../package-summary.html">nl.andrewl.concord_core.msg.types.chat</a> declared as <a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]</code></div>
<div class="col-second even-row-color"><span class="type-name-label">ChatHistoryResponse.</span><code><a href="../ChatHistoryResponse.html#messages" class="member-name-link">messages</a></code></div>
<div class="col-last even-row-color">
<div class="block">The field for the <a href="../../../../../../../../concord_core/nl/andrewl/concord_core/msg/types/chat/ChatHistoryResponse.html#param-messages"><code>messages</code></a> record component.</div>
</div>
</div>
<div class="caption"><span>Methods in <a href="../package-summary.html">nl.andrewl.concord_core.msg.types.chat</a> that return <a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code><a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]</code></div>
<div class="col-second even-row-color"><span class="type-name-label">ChatHistoryResponse.</span><code><a href="../ChatHistoryResponse.html#messages()" class="member-name-link">messages</a>()</code></div>
<div class="col-last even-row-color">
<div class="block">Returns the value of the <a href="../../../../../../../../concord_core/nl/andrewl/concord_core/msg/types/chat/ChatHistoryResponse.html#param-messages"><code>messages</code></a> record component.</div>
</div>
</div>
<div class="caption"><span>Constructors in <a href="../package-summary.html">nl.andrewl.concord_core.msg.types.chat</a> with parameters of type <a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier</div>
<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="../Chat.html#%3Cinit%3E(java.util.UUID,nl.andrewl.concord_core.msg.types.chat.Chat)" class="member-name-link">Chat</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;newId,
<a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>&nbsp;original)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="../ChatHistoryResponse.html#%3Cinit%3E(java.util.UUID,nl.andrewl.concord_core.msg.types.chat.Chat%5B%5D)" class="member-name-link">ChatHistoryResponse</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/UUID.html" title="class or interface in java.util" class="external-link">UUID</a>&nbsp;channelId,
<a href="../Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a>[]&nbsp;messages)</code></div>
<div class="col-last odd-row-color">
<div class="block">Creates an instance of a <code>ChatHistoryResponse</code> record class.</div>
</div>
</div>
</section>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Record Class nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg.types.chat, record: ChatHistoryRequest">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Record Class nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest" class="title">Uses of Record Class<br>nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest</h1>
</div>
No usage of nl.andrewl.concord_core.msg.types.chat.ChatHistoryRequest</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>Uses of Record Class nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="use: module: concord_core, package: nl.andrewl.concord_core.msg.types.chat, record: ChatHistoryResponse">
<meta name="generator" content="javadoc/ClassUseWriter">
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-use-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../../module-summary.html">Module</a></li>
<li><a href="../package-summary.html">Package</a></li>
<li><a href="../ChatHistoryResponse.html" title="class in nl.andrewl.concord_core.msg.types.chat">Class</a></li>
<li class="nav-bar-cell1-rev">Use</li>
<li><a href="../package-tree.html">Tree</a></li>
<li><a href="../../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../../help-doc.html#use">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<h1 title="Uses of Record Class nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse" class="title">Uses of Record Class<br>nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse</h1>
</div>
No usage of nl.andrewl.concord_core.msg.types.chat.ChatHistoryResponse</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,125 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Tue Sep 28 23:55:20 CEST 2021 -->
<title>nl.andrewl.concord_core.msg.types.chat (concord-core 1.0-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-09-28">
<meta name="description" content="declaration: module: concord_core, package: nl.andrewl.concord_core.msg.types.chat">
<meta name="generator" content="javadoc/PackageWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="package-declaration-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li class="nav-bar-cell1-rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#package">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Package:&nbsp;</li>
<li><a href="#package-description">Description</a>&nbsp;|&nbsp;</li>
<li><a href="#related-package-summary">Related Packages</a>&nbsp;|&nbsp;</li>
<li><a href="#class-summary">Classes and Interfaces</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<div class="header">
<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../../../../../module-summary.html">concord_core</a></div>
<h1 title="Package nl.andrewl.concord_core.msg.types.chat" class="title">Package nl.andrewl.concord_core.msg.types.chat</h1>
</div>
<hr>
<div class="package-signature">package <span class="element-name">nl.andrewl.concord_core.msg.types.chat</span></div>
<section class="package-description" id="package-description">
<div class="block">Messages pertaining to chat messages and other auxiliary messages regarding
the management of chat information.</div>
</section>
<section class="summary">
<ul class="summary-list">
<li>
<div id="related-package-summary">
<div class="caption"><span>Related Packages</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Package</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="../package-summary.html">nl.andrewl.concord_core.msg.types</a></div>
<div class="col-last even-row-color">
<div class="block">Contains all the various message types which can be sent between the server
and client.</div>
</div>
<div class="col-first odd-row-color"><a href="../channel/package-summary.html">nl.andrewl.concord_core.msg.types.channel</a></div>
<div class="col-last odd-row-color">
<div class="block">Messages pertaining to channel interaction and updates.</div>
</div>
<div class="col-first even-row-color"><a href="../client_setup/package-summary.html">nl.andrewl.concord_core.msg.types.client_setup</a></div>
<div class="col-last even-row-color">
<div class="block">Messages pertaining to the establishment of a connection with clients.</div>
</div>
</div>
</div>
</li>
<li>
<div id="class-summary">
<div class="caption"><span>Record Classes</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color class-summary class-summary-tab4"><a href="Chat.html" title="class in nl.andrewl.concord_core.msg.types.chat">Chat</a></div>
<div class="col-last even-row-color class-summary class-summary-tab4">
<div class="block">This message contains information about a chat message that a user sent.</div>
</div>
<div class="col-first odd-row-color class-summary class-summary-tab4"><a href="ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryRequest</a></div>
<div class="col-last odd-row-color class-summary class-summary-tab4">
<div class="block">A message which clients can send to the server to request some messages from
the server's history of all sent messages from a particular source.</div>
</div>
<div class="col-first even-row-color class-summary class-summary-tab4"><a href="ChatHistoryResponse.html" title="class in nl.andrewl.concord_core.msg.types.chat">ChatHistoryResponse</a></div>
<div class="col-last even-row-color class-summary class-summary-tab4">
<div class="block">The response that a server sends to a <a href="ChatHistoryRequest.html" title="class in nl.andrewl.concord_core.msg.types.chat"><code>ChatHistoryRequest</code></a>.</div>
</div>
</div>
</div>
</li>
</ul>
</section>
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More