feat: Add message send/recive system

This commit is contained in:
April Hall 2025-01-04 22:55:09 -05:00
parent 158f9e097d
commit 57ab049945
Signed by: arithefirst
GPG Key ID: 4508A15C4DB91C5B
3 changed files with 44 additions and 9 deletions

View File

@ -8,9 +8,17 @@ const server = createServer(app);
const io = new Server(server); const io = new Server(server);
io.on('connection', (socket) => { io.on('connection', (socket) => {
// Runs on client connect
console.log(`[ws:kit] client connected (${socket.id})`); console.log(`[ws:kit] client connected (${socket.id})`);
io!.emit('message', `Hello from SvelteKit ${new Date().toLocaleString()} (${socket.id})`); io!.emit('message', `[ws] Hello from SvelteKit ${new Date().toLocaleString()} (${socket.id})`);
// Runs on message receive
socket.on('message', (msg) => {
console.log(`[ws:kit] message from ${socket.id}: ${msg}`);
io!.emit('message', `[${socket.id}] ${msg}`);
});
// Runs on client disconnect
socket.on('disconnect', () => { socket.on('disconnect', () => {
io!.emit('message', `client disconnected (${socket.id})`); io!.emit('message', `client disconnected (${socket.id})`);
console.log(`[ws:kit] client disconnected (${socket.id})`); console.log(`[ws:kit] client disconnected (${socket.id})`);

View File

@ -7,10 +7,19 @@ export function startupSocketIOServer(httpServer: HttpServer | null) {
if (io) return; if (io) return;
console.log('[ws:kit] setup'); console.log('[ws:kit] setup');
io = new SocketIOServer(httpServer); io = new SocketIOServer(httpServer);
io.on('connection', (socket) => {
console.log(`[ws:kit] client connected (${socket.id})`);
io!.emit('message', `Hello from SvelteKit ${new Date().toLocaleString()} (${socket.id})`);
io.on('connection', (socket) => {
// Runs on client connect
console.log(`[ws:kit] client connected (${socket.id})`);
io!.emit('message', `[ws] Hello from SvelteKit ${new Date().toLocaleString()} (${socket.id})`);
// Runs on message receive
socket.on('message', (msg) => {
console.log(`[ws:kit] message from ${socket.id}: ${msg}`);
io!.emit('message', `[${socket.id}] ${msg}`);
});
// Runs on client disconnect
socket.on('disconnect', () => { socket.on('disconnect', () => {
io!.emit('message', `client disconnected (${socket.id})`); io!.emit('message', `client disconnected (${socket.id})`);
console.log(`[ws:kit] client disconnected (${socket.id})`); console.log(`[ws:kit] client disconnected (${socket.id})`);

View File

@ -1,8 +1,10 @@
<script lang="ts"> <script lang="ts">
import { io } from 'socket.io-client'; import { io } from 'socket.io-client';
import { onMount } from 'svelte';
let socket: ReturnType<typeof io> | null = null; let socket: ReturnType<typeof io> | null = null;
let log: string[] = []; let log: string[] = [];
let msg: string = '';
function logEvent(str: string) { function logEvent(str: string) {
log = [...log, str]; log = [...log, str];
@ -24,16 +26,32 @@
socket.on('message', (data: string) => { socket.on('message', (data: string) => {
console.log('[ws] message received', data); console.log('[ws] message received', data);
logEvent(`[ws] message received: ${data}`); logEvent(data);
}); });
} }
function sendMessage() {
if (!socket) return;
socket.emit('message', msg);
msg = '';
}
onMount(() => {
establishSocketIOConnection();
});
</script> </script>
<main> <main class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-1/2 h-fit">
<h1 class="text-lg"># SvelteKit with Socket.IO Integration</h1> <h1 class="text-lg"># SvelteKit with Socket.IO Integration</h1>
<form class="my-1 flex" on:submit={sendMessage}>
<button class="btn btn-primary" on:click={() => establishSocketIOConnection()}> Establish Socket.IO connection </button> <input type="text" placeholder="Type here" class="input input-bordered w-1/2 mr-1" bind:value={msg} />
<button class="btn w-1/2" type="submit">Send</button>
</form>
<button
class="btn w-full"
on:click={() => {
log = [];
}}>Clear</button>
<ul> <ul>
{#each log as event} {#each log as event}
<li>{event}</li> <li>{event}</li>