118 lines
2 KiB
TypeScript
118 lines
2 KiB
TypeScript
// includes types that are shared between the client and server
|
|
// e.g. the websocket message protocol
|
|
|
|
export interface User {
|
|
name: string;
|
|
userId: string;
|
|
}
|
|
|
|
export interface ClientJoinMessage {
|
|
type: "JOIN";
|
|
payload: {
|
|
username: string;
|
|
};
|
|
}
|
|
|
|
export interface ClientLeaveMessage {
|
|
type: "LEAVE";
|
|
payload: {
|
|
username: string;
|
|
};
|
|
}
|
|
|
|
export interface ClientChatMessage {
|
|
type: "CHAT_MESSAGE";
|
|
payload: {
|
|
content: string;
|
|
};
|
|
}
|
|
|
|
export interface ClientDeleteMessage {
|
|
type: "DELETE_MESSAGE";
|
|
payload: {
|
|
messageId: string;
|
|
};
|
|
}
|
|
|
|
export interface ClientEditMessage {
|
|
type: "EDIT_MESSAGE";
|
|
payload: {
|
|
messageId: string;
|
|
content: string;
|
|
};
|
|
}
|
|
|
|
export type ClientMessage =
|
|
| ClientJoinMessage
|
|
| ClientLeaveMessage
|
|
| ClientChatMessage
|
|
| ClientDeleteMessage
|
|
| ClientEditMessage;
|
|
|
|
// Server messages
|
|
|
|
export interface ChatMessage {
|
|
id: string;
|
|
content: string;
|
|
timestamp: number;
|
|
author: User;
|
|
}
|
|
|
|
// sent to the newly registered client to confirm that the username was not taken
|
|
export interface ServerRegistrationConfirmed {
|
|
type: "REGISTRATION_CONFIRMED";
|
|
payload: {
|
|
user: User;
|
|
};
|
|
}
|
|
|
|
// sent to all clients when a new client has joined the chat
|
|
export interface ServerUserJoinedMessage {
|
|
type: "USER_JOINED";
|
|
payload: {
|
|
user: User;
|
|
};
|
|
}
|
|
|
|
export interface ServerUserLeftMessage {
|
|
type: "USER_LEFT";
|
|
payload: {
|
|
user: User;
|
|
};
|
|
}
|
|
|
|
export interface ServerChatMessage {
|
|
type: "CHAT_MESSAGE";
|
|
payload: ChatMessage;
|
|
}
|
|
|
|
export interface ServerMessageDeletedMessage {
|
|
type: "MESSAGE_DELETED";
|
|
payload: {
|
|
messageId: string;
|
|
};
|
|
}
|
|
|
|
export interface ServerMessageEditedMessage {
|
|
type: "MESSAGE_EDITED";
|
|
payload: {
|
|
messageId: string;
|
|
content: string;
|
|
};
|
|
}
|
|
|
|
export interface ServerUserListMessage {
|
|
type: "USER_LIST";
|
|
payload: {
|
|
users: User[];
|
|
};
|
|
}
|
|
|
|
export type ServerMessage =
|
|
| ServerRegistrationConfirmed
|
|
| ServerUserJoinedMessage
|
|
| ServerUserLeftMessage
|
|
| ServerChatMessage
|
|
| ServerMessageDeletedMessage
|
|
| ServerMessageEditedMessage
|
|
| ServerUserListMessage;
|